Технология поиска python: сходство слов

Я хочу получить процент схожести двух слов, например)

abcd versus zzabcdzz == 50% similarity

Не нужно быть очень точным. Есть ли способ сделать это? Я использую Python, но не стесняйтесь рекомендовать другие языки.


person Bin Chen    schedule 12.02.2011    source источник
comment
возможный дубликат алгоритма различия текста   -  person tzot    schedule 12.02.2011


Ответы (4)


Попробуйте использовать python-Levenshtein для вычисления редактировать расстояние.

Модуль расширения Levenshtein Python C содержит функции для быстрого вычисления

  • Расстояние Левенштейна (править) и операции редактирования
  • сходство строк
  • приблизительные средние строки и, как правило, усреднение строк
  • последовательность строк и установить подобие

Вы можете получить приблизительное представление о сходстве, вычислив расстояние редактирования между двумя строками, разделенное на длину самой длинной строки. В вашем примере расстояние редактирования равно 4, а максимально возможное расстояние редактирования - 8, поэтому сходство составляет 50%.

person Mark Byers    schedule 12.02.2011

Вы можете использовать встроенный модуль python difflib

Вот пример с той страницы

>>> s = SequenceMatcher(None, "abcd", "bcde")
>>> s.ratio()
0.75
person TigrisC    schedule 12.02.2011

некоторые метрики сходства из библиотеки nltk:

http://www.opendocs.net/nltk/0.9.5/api/nltk.wordnet.similarity-module.html

person Asterisk    schedule 12.02.2011

Копирование из этого ответа:

В Python есть difflib.

difflib предлагает класс SequenceMatcher, который можно использовать для определения степени сходства . Пример функции:

def text_compare(text1, text2, isjunk=None):
    return difflib.SequenceMatcher(isjunk, text1, text2).ratio()
person tzot    schedule 12.02.2011