python-Levenshtein比率计算

标签 python levenshtein-distance

我有以下两个字符串:

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

两者之间的编辑距离为12。当我使用以下公式计算 Levenshtein 距离时,我得到与 python-Levenshtein 库的 0.01 差异:

>>> 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

造成这种差异的原因是什么?我在计算中做错了什么。请注意,我已经审查了此How python-Levenshtein.ratio is computed类似的问题,但它并不能完全回答我的问题。

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

最佳答案

根据 Lukas 的评论,其原因是 ratio() 使用 2 成本进行替换操作,而不是正常成本 1 编辑距离。下面是一个计算示例:

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

关于python-Levenshtein比率计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29402027/

相关文章:

python - Python 和 GAE 论坛

mysql - 在没有 super 权限的情况下在mysql中创建汉明距离函数

ruby - 单独统计Levenshtein距离算法中的删除次数

python - 如何在 GAE/Python 上进行 'access_type=offline'/server-only OAuth2 操作?

php - mysqli 准备好的语句中的编辑距离

python - 有效地确定 "how sorted"列表是,例如。编辑距离

algorithm - 使用优化的 Levenshtein 算法寻找最近的邻居

python - 使用 matplotlib 线图的颜色图

python - Django 表单集在多对多关系上变慢

python - Linux环境下如何安装Python包?