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

Python 如何使用SequenceMatcher查找两个字符串之间的相似性?,python,difflib,Python,Difflib,我使用了上面的代码,但得到的输出是0.0。如何获得有效答案?您忘记了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 来自文档: 该类具有以下构造函数: class difflib.SequenceMatche

我使用了上面的代码,但得到的输出是0.0。如何获得有效答案?

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

来自文档:

该类具有以下构造函数:

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

代码中的问题在于

>>> import difflib
>>> 
>>> a='abcd'
>>> b='ab123'
>>> seq=difflib.SequenceMatcher(None, a,b)
>>> d=seq.ratio()*100
>>> print d
44.4444444444
您正在将
a
作为
isjunk
的值传递,将
b
作为
a
的值传递,保留
b
的默认值。这导致比率
0.0

克服此问题的一种方法(Lennart已经提到)是显式地将
None
作为额外的第一个参数传递,以便为所有关键字参数分配正确的值

然而,我刚刚发现了另一种解决方案,它不涉及
isjunk
参数,而是使用
set_seqs()
方法指定不同的序列

seq=difflib.SequenceMatcher(a,b)

嘿,回答很好,有没有办法得到匹配数?get_matching_blocks()是的,我得到了所有字符串,但它找不到所有常用字符串,即使您将autojunk设置为FalsGet_matching_blocks()也会返回匹配块的列表。因此,通过在该列表上执行len(),可以获得匹配数。这不是你想要的吗?这是你要求的。是的,但是对于长度较长的字符串,算法失败了
>>> import difflib
>>> a = 'abcd'
>>> b = 'ab123'
>>> seq = difflib.SequenceMatcher()
>>> seq.set_seqs(a.lower(), b.lower())
>>> d = seq.ratio()*100
>>> print d
44.44444444444444