Python SequenceMatcher.ratio如何在difflib中工作
我在试用python的difflib模块时遇到了Python SequenceMatcher.ratio如何在difflib中工作,python,string,string-matching,similarity,Python,String,String Matching,Similarity,我在试用python的difflib模块时遇到了SequenceMatcher。因此,我尝试了以下示例,但无法理解发生了什么 >>> SequenceMatcher(None,"abc","a").ratio() 0.5 >>> SequenceMatcher(None,"aabc","a").ratio() 0.4 >>> SequenceMatcher(None,"aabc","aa").ratio() 0.6666666666666
SequenceMatcher
。因此,我尝试了以下示例,但无法理解发生了什么
>>> SequenceMatcher(None,"abc","a").ratio()
0.5
>>> SequenceMatcher(None,"aabc","a").ratio()
0.4
>>> SequenceMatcher(None,"aabc","aa").ratio()
0.6666666666666666
现在,根据
以范围内的浮点形式返回序列相似性的度量值
[0, 1]. 其中,T
是两个序列中的元素总数,并且
M
是匹配数,这是2.0*M/T
因此,对于我的案例:
T=4
和M=1
so比率2*1/4=0.5
T=5
和M=2
so比率2*2/5=0.8
T=6
和M=1
so比率2*1/6.0=0.33
T=len(aabc)+len(a)
和M=2
,因为a
在aabc
中出现两次
那么,我哪里做错了?我错过了什么
是SequenceMatcher.ratio()的源代码。第一个案例是正确的。在第二种情况下,只有来自
aabc
的一个a
匹配,因此M=1。在第三个示例中,两个a
s匹配,因此M=2
[p.S.:您指的是古老的Python 2.4源代码。当前源代码位于。]但是为什么
aabc
中只有一个a
匹配。我认为它应该与a的匹配。在第三个示例中,两个a的
匹配,但aa
单独匹配到aa
,或者它首先匹配到a
,然后是下一个a
,使其为M=2。我仍然不清楚。@Noob:因为在第二种情况下,第二个字符串中只有ona
要匹配,而在第三个字符串中有两个,所以只有bc
部分不匹配。尝试将a
与aa
匹配。Matches实际上代表字符匹配。因此字符串“a”只能进行一次匹配,因为它只有一个字符可以创建匹配。“aa”有两个字符,因此提供了两个匹配项。嘿,有没有办法获取匹配项的数量?太晚了,但仍然可以:您可以执行T=len(a)+len(b)
M=T*ratio()/2
。