Расстояние Левенштейна между списком чисел

Имейте этот код, я хочу иметь расстояние Левенштейна между двумя списками чисел.

import textdistance
S1=[1,2,3,7,9,15,19,20]
S2=[1,2,3,7,8,14,20]
#convert lists to string 
Str1=‘’.join(str(e) for e in S1)
Str2=‘’.join(str(e) for e in S2)
textdistance.levenshtein.similarity(Str1,Str2)
textdistance.levenshtein.distance(Str1,Str2)

Приведенный выше код дает сходство: 7 Что неверно , правильно 5 . И показывает значение расстояния 4 , что также неверно, правильное расстояние равно 3.

Как манипулировать кодом, чтобы такие числа, как 14 и 15, можно было рассматривать как один элемент функции выше? Есть идеи ..

Не сработает ли использование distance вместо similarity?

Drecker 14.06.2019 14:16

@Drecker, если он работал со сходством, он будет работать и с расстоянием. Distance дает мне 4 , что тоже неверно. Правильное расстояние равно 3.

Paulo 14.06.2019 14:18

@Drecker Я обновил код выше и добавил расстояние.

Paulo 14.06.2019 14:25
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
3 432
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробуйте использовать библиотеку медуз как таковую:

import jellyfish
S1=[1,2,3,7,9,15,19,20]
S2=[1,2,3,7,8,14,20]
#convert lists to string 
Str1=‘’.join(str(e) for e in S1)
Str2=‘’.join(str(e) for e in S2)

jellyfish.levenshtein_distance(Str1, Str2)

Дополнительную информацию об этом можно найти здесь: https://pypi.org/project/jellyfish/

Это имеет ту же проблему, что и библиотека, которую он использует. Преобразование двузначных чисел в строки приводит к двузначной строке.

James 14.06.2019 14:24
Ответ принят как подходящий
pip install textdistance

Не преобразовывать в строку, оставить код как есть:

S1=[1,2,3,7,9,15,19,20]
S2=[1,2,3,7,8,14,20]

textdistance.levenshtein.similarity(S1,S2)
textdistance.levenshtein.distance(S1,S2)

После удаления convert to string код заработал в juypter Notebook, но в Visual Studio 2017 выдает ошибку am: «последовательность item():expected str instance,int found».

Paulo 15.06.2019 14:44
textdistance.levenshtein.distance это то, что сработало для меня.
Philippe Remy 20.08.2020 07:16

Другие вопросы по теме