Я хочу получить процент сходства двух слов, например)
abcd versus zzabcdzz == 50% similarity
Не нужно быть очень точным. Есть ли способ сделать это? Я использую Python, но не стесняйтесь рекомендовать другие языки.
Попробуйте использовать python-Levenshtein для расчета расстояния редактирования .
python-Levenshtein
Модуль расширения Levenshtein Python C содержит функции для быстрого вычисления Расстояние Левенштейна (редактирование) и операции редактирования сходство строк приблизительные срединные строки и, как правило, усреднение строк последовательность строк и сходство наборов
Модуль расширения Levenshtein Python C содержит функции для быстрого вычисления
Вы можете получить приблизительное представление о сходстве, рассчитав расстояние редактирования между двумя строками, разделенное на длину самой длинной строки. В вашем примере расстояние редактирования равно 4, а максимально возможное расстояние редактирования равно 8, поэтому сходство составляет 50%.
Вы можете использовать встроенный модуль Python difflib
Вот пример с этой страницы
>>> s = SequenceMatcher(None, "abcd", "bcde") >>> s.ratio() 0.75
некоторые метрики сходства из библиотеки nltk:
http://www.opendocs.net/nltk/0.9.5/api/nltk.wordnet.similarity-module.html
Копирование из этого ответа:
В Python существует difflib .
difflib предлагает SequenceMatcher класс, который может быть использован, чтобы дать вам коэффициент сходства.Пример функции:
difflib
def text_compare(text1, text2, isjunk=None): return difflib.SequenceMatcher(isjunk, text1, text2).ratio()