如何使用SequenceMatcher查找两个字符串之间的相似性?

时间:2011-01-26 07:10:28

标签: python difflib

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 个答案:

答案 0 :(得分:39)

你忘记了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

答案 1 :(得分:17)

来自文档:

  

SequenceMatcher类有这个构造函数:

     

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

代码中的问题是通过执行

seq=difflib.SequenceMatcher(a,b)

您传递a作为isjunkb的值作为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