如何使用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 个回答
22
根据文档:
SequenceMatcher 类的构造函数是这样的:
class difflib.SequenceMatcher(isjunk=None, a='', b='', autojunk=True)
你代码中的问题是,执行了
seq=difflib.SequenceMatcher(a,b)
这段代码后,你把 a
当成了 isjunk
的值,把 b
当成了 a
的值,而 b
则保留了默认的空字符串 ''
。这样就导致了比率为 0.0
。
解决这个问题的一种方法(Lennart 已经提到过)是明确地将 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
58
你忘记给SequenceMatcher传第一个参数了。
>>> import difflib
>>>
>>> a='abcd'
>>> b='ab123'
>>> seq=difflib.SequenceMatcher(None, a,b)
>>> d=seq.ratio()*100
>>> print d
44.4444444444