технология поиска Python: сходство слов - PullRequest
3 голосов
/ 12 февраля 2011

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

abcd versus zzabcdzz == 50% similarity

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

Ответы [ 4 ]

6 голосов
/ 12 февраля 2011

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

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

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

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

3 голосов
/ 12 февраля 2011

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

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

>>> s = SequenceMatcher(None, "abcd", "bcde")
>>> s.ratio()
0.75
1 голос
/ 12 февраля 2011

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

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

0 голосов
/ 12 февраля 2011

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

В Python существует difflib .

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

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