我在尝试python的difflib模块时,偶然发现了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.5T=5与M=2 so比值2*2/5 = 0.8T=6与M=1 so比值2*1/6.0 = 0.33根据我的理解,T = len(aabc) + len(a)和M=2是因为a在aabc中出现了两次。
那么,我哪里错了,我错过了什么。?
这里是SequenceMatcher.ratio()的源代码
发布于 2012-09-15 11:13:26
你的第一个案子是对的。在第二种情况下,只有一个来自a的aabc匹配,所以M= 1。在第三个例子中,两个a的匹配都是so _M= 2。
[P.S.]:您指的是古代Python2.4源代码。当前的源代码位于hg.python.org。]
发布于 2022-05-29 20:22:36
永远不要太晚..。
from difflib import SequenceMatcher
texto1 = 'BRASILIA~DISTRITO FEDERAL, DF'
texto2 = 'BRASILIA-DISTRITO FEDERAL, '
tamanho_texto1 = len(texto1)
tamanho_texto2 = len(texto2)
tamanho_tot = tamanho_texto1 + tamanho_texto2
tot = 0
if texto1 <= texto2:
for x in range(len(texto1)):
y = texto1[x]
if y in texto2:
tot += 1
else:
for x in range(len(texto2)):
y = texto2[x]
if y in texto1:
tot += 1
print('sequenceM = ',SequenceMatcher(None, texto1, texto2).ratio())
print('Total calculado = ',2*tot/tamanho_tot)sequenceM = 0.9285714285714286
总计算器= 0.9285714285714286
https://stackoverflow.com/questions/12436672
复制相似问题