Как использовать SequenceMatcher, чтобы найти сходство между двумя строками?

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. Как я могу получить правильный ответ?

2 ответа

Решение

Вы забыли первый параметр в SequenceMatcher.

>>> import difflib
>>> 
>>> a='abcd'
>>> b='ab123'
>>> seq=difflib.SequenceMatcher(None, a,b)
>>> d=seq.ratio()*100
>>> print d
44.4444444444

http://docs.python.org/library/difflib.html

Из документов:

Класс SequenceMatcher имеет этот конструктор:

class difflib.SequenceMatcher(isjunk=None, a='', b='', autojunk=True)

Проблема в вашем коде заключается в том, что, делая

seq=difflib.SequenceMatcher(a,b)

вы проходите a как значение для isjunk а также b как значение для aоставив значение по умолчанию '' значение для b, Это приводит к соотношению 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
Другие вопросы по тегам