При расчете расстояния редактирования nltk, похоже, не учитывает изменения правильно.Например,
edit_distance(('paravati', 'selke', 'vital'), ('paravati', 'selke', 'vital'), transpositions=True)
Возвращает 0, поскольку совпадение строк.
edit_distance(('paravati', 'selke', 'vital'), ('selke', 'paravati', 'vital'), transpositions=True)
Возвращает 1, поскольку транспонирование включено.Еще 2
edit_distance(('paravati', 'selke', 'vital'), ('belke', 'paravati', 'vital'), transpositions=True)
Возвращает 2, потому что 1 балл за транспозиции и 1 за подстановку.
edit_distance(('paravati', 'selke', 'vital'), ('belke', 'zaravati', 'vital'), transpositions=True)
Но когда я изменяю написание второго слова (с p на z), явсе равно получите значение 2. Ожидаемое значение больше 2, потому что теперь изменилось 2 слова.
Другими словами, расстояние этих 2 слов равно 5 и расстояние кортежа, котороесодержит точно те же слова, что и 3. Это не кажется правильным.
from nltk.metrics import edit_distance
edit_distance('vital', 'vataldedd', transpositions=True)
edit_distance(('paravati', 'selke', 'vital'), ('selke', 'zaravatiasdf', 'vataldedd'), transpositions=True)
Ожидаемое расстояние для этого сравнения кортежей 5 или больше.
Обновление:
Я сравнил все строки по отдельности и взял итоговое значение, которое возвращает 10. Как и ожидалось.
s1, s2 = ('paravati', 'selke', 'vital'), ('selke', 'zaravatiasdf', 'vataldedd')
final=list()
for i in s1:
mylist=list()
for k in s2:
mylist.append(edit_distance(i, k, transpositions=True))
final.append(min(mylist))
sum(final)
Это правильный подход или я что-то упустил?