ищу библиотеку питона, которая может выполнять левенштейновскую / другую дистанцию ​​редактирования на уровне слов - PullRequest
0 голосов
/ 03 апреля 2019

Я видел кучу похожих вопросов по SO / в других местах, но ни один из ответов не вполне удовлетворяет мои потребности, поэтому я не думаю, что это дуплекс.

Кроме того, я полностью знаю, какреализовать это сам, но я пытаюсь не изобретать колесо заново.

Кто-нибудь знает какие-либо пакеты python, которые могут выполнить levenshtein / другое расстояние редактирования, сравнивая 2 списка слов (я нашелнесколько), но также позволяют указать ваши собственные затраты на вставку, удаление, замену и транспонирование?

в основном, я хочу, чтобы вычисляемые расстояния были количеством правок в словах в предложениях, а не наколичество символов в предложениях различается.

Я пытаюсь заменить пользовательский модуль расширения python, который на самом деле написан на C, используя C api в python2.Я мог бы переписать на чистом python или cython, но я бы просто добавил зависимость к проекту.Единственная проблема заключается в том, что этот код позволяет указать ваши собственные расходы для различных вариантов, и я пока не нашел пакет, который позволяет это до сих пор.

1 Ответ

2 голосов
/ 04 апреля 2019

NLTK имеет функцию с именем edit_distance . Он рассчитывает расстояние Левенштейна между двумя струнами. Но это хорошо работает и со списками строк:

import nltk

s1 = 'WAKA WAKA QB WTF BBBQ WAKA LOREM IPSUM WAKA'.split()
s2 = 'WAKA OMFG QB WTF WAKA WAKA LOREM IPSUM WAKA'.split()
print(s1)
print(s2)
print(nltk.edit_distance(s1, s2))
['WAKA', 'WAKA', 'QB', 'WTF', 'BBBQ', 'WAKA', 'LOREM', 'IPSUM', 'WAKA']
['WAKA', 'OMFG', 'QB', 'WTF', 'WAKA', 'WAKA', 'LOREM', 'IPSUM', 'WAKA']

2
...