首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SequenceMatcher.ratio是如何在衍射库中工作的

SequenceMatcher.ratio是如何在衍射库中工作的
EN

Stack Overflow用户
提问于 2012-09-15 10:40:46
回答 2查看 10.4K关注 0票数 6

我在尝试python的difflib模块时,偶然发现了SequenceMatcher。因此,我尝试了下面的例子,但无法理解发生了什么。

代码语言:javascript
复制
>>> 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

所以,对于我的案子:

  1. T=4M=1 so比值2*1/4 = 0.5
  2. T=5M=2 so比值2*2/5 = 0.8
  3. T=6M=1 so比值2*1/6.0 = 0.33

根据我的理解,T = len(aabc) + len(a)M=2是因为aaabc中出现了两次。

那么,我哪里错了,我错过了什么。?

这里SequenceMatcher.ratio()的源代码

EN

回答 2

Stack Overflow用户

发布于 2012-09-15 11:13:26

你的第一个案子是对的。在第二种情况下,只有一个来自aaabc匹配,所以M= 1。在第三个例子中,两个a的匹配都是so _M= 2。

[P.S.]:您指的是古代Python2.4源代码。当前的源代码位于hg.python.org。]

票数 5
EN

Stack Overflow用户

发布于 2022-05-29 20:22:36

永远不要太晚..。

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12436672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档