python-Levenshtein比率计算

python-Levenshtein比率计算,python,levenshtein-distance,Python,Levenshtein Distance,我有以下两个字符串: a = 'bjork gudmundsdottir' b = 'b. gudmundsson gunnar' 两者之间的Levenshtein距离为12。当我对Levenshtein距离使用以下公式时,我得到了0.01与python Levenshtein库的差异: >>> Ldist / max(len( a ), len( b )) >>> float(12)/21 0.5714285714285714 # python-Leven

我有以下两个字符串:

a = 'bjork gudmundsdottir'
b = 'b. gudmundsson gunnar'
两者之间的Levenshtein距离为
12
。当我对Levenshtein距离使用以下公式时,我得到了
0.01
python Levenshtein
库的差异:

>>> Ldist / max(len( a ), len( b ))
>>> float(12)/21
0.5714285714285714
# python-Levenshtein
Levenshtein.ratio(a,b)
0.5853658536585366
# difflib
>>> seq=difflib.SequenceMatcher(a=a,b=b)
>>> seq.ratio()
0.5853658536585366
这一差异的原因是什么?我的计算有什么地方不正确。请注意,我已经回顾了这个类似的问题,但它并没有完全回答我的问题


有人能解释一下用于计算上述比率的公式吗?

根据卢卡斯的评论,原因是
ratio()
使用了2的替换操作成本,而不是1的正常Levenshtein距离成本。下面是一个计算示例:

a = 'bjork gudmundsdottir'
b = 'b. gudmundsson gunnar'

>>> Levenshtein.editops(a,b)
[('delete', 1, 1), ('delete', 2, 1), ('delete', 3, 1), ('replace', 4, 1), ('replace', 14, 11), ('insert', 16, 13), ('insert', 16, 14), ('insert', 16, 15), ('insert', 16, 16), ('replace', 16, 17), ('replace', 17, 18), ('replace', 18, 19)]

>>> ldist = sum([2 for item in Levenshtein.editops(a,b) if item[0] == 'replace']) 
          + sum([1 for item in Levenshtein.editops(a,b) if item[0] != 'replace']) # 17
ln = len(a) + len(b) # 41

>>> (41.0-17.0)/41.0
0.5853658536585366
>>> Levenshtein.ratio(a,b)
0.5853658536585366

那么你为什么不更新你的详细信息,以了解尚不清楚的内容呢?可能是你想看一下:@felipsmartins--我还添加了
difflib
的输出。可能是重复的。那么你是否真的查看了作为重复链接到你的问题的已接受答案
ratio()
使用的替换操作成本与
distance()
不同,因此存在差异<代码>(lensum-ldist)/lensum=(41.0-17.0)/41.0=0.585