SequenceMatcher.ratio如何在difflib中工作

Ran*_*Rag 4 python string similarity string-matching

我正在尝试python的difflib模块,我遇到了SequenceMatcher.所以,我尝试了以下示例,但无法理解发生了什么.

>>> SequenceMatcher(None,"abc","a").ratio()
0.5

>>> SequenceMatcher(None,"aabc","a").ratio()
0.4

>>> SequenceMatcher(None,"aabc","aa").ratio()
0.6666666666666666
Run Code Online (Sandbox Code Playgroud)

现在,根据比例:

将序列相似性的度量返回为[0,1]范围内的浮点数.T两个序列中元素的总数 在哪里M,匹配的数量是多少2.0*M / T.

所以,对于我的情况:

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

根据我的理解T = len(aabc) + len(a),M=2因为a两次进来aabc.

那么,我错在哪里,我错过了什么.

是源代码SequenceMatcher.ratio()

Fre*_*Foo 5

你有第一个案例是正确的.在第二种情况下,只有一个aaabc匹配,所以中号 = 1.在第三示例中,两个a的比赛所以中号 = 2.

[PS:你指的是古老的Python 2.4源代码.目前的源代码位于hg.python.org.]

  • 匹配实际上代表_character_匹配.所以字符串"a"只能进行一次匹配,因为它只有一个可以创建匹配的字符."aa"有两个字符,因此提供两个匹配. (3认同)