Ответ 1
Вы забыли первый параметр для SequenceMatcher.
>>> import difflib
>>>
>>> a='abcd'
>>> b='ab123'
>>> seq=difflib.SequenceMatcher(None, a,b)
>>> d=seq.ratio()*100
>>> print d
44.4444444444
import difflib
a='abcd'
b='ab123'
seq=difflib.SequenceMatcher(a=a.lower(),b=b.lower())
seq=difflib.SequenceMatcher(a,b)
d=seq.ratio()*100
print d
Я использовал приведенный выше код, но полученный результат равен 0.0. Как я могу получить правильный ответ?
Вы забыли первый параметр для SequenceMatcher.
>>> import difflib
>>>
>>> a='abcd'
>>> b='ab123'
>>> seq=difflib.SequenceMatcher(None, a,b)
>>> d=seq.ratio()*100
>>> print d
44.4444444444
Из документов:
SequenceMatcher класс имеет этот конструктор:
class difflib.SequenceMatcher(isjunk=None, a='', b='', autojunk=True)
Проблема в вашем коде заключается в том, что, выполняя
seq=difflib.SequenceMatcher(a,b)
вы передаете a
как значение для isjunk
и b
как значение для a
, оставив значение ''
по умолчанию <<24 > . Это приводит к соотношению 0.0
.
Один из способов преодоления этого (уже упоминавшийся Леннартом) - явно передать None
в качестве дополнительного первого параметра, чтобы все аргументы ключевых слов получили правильные значения.
Однако я только что нашел и хотел упомянуть другое решение, которое не касается аргумента isjunk
, но использует метод set_seqs()
для указания разных последовательностей.
>>> import difflib
>>> a = 'abcd'
>>> b = 'ab123'
>>> seq = difflib.SequenceMatcher()
>>> seq.set_seqs(a.lower(), b.lower())
>>> d = seq.ratio()*100
>>> print d
44.44444444444444