【发布时间】:2019-05-27 13:15:43
【问题描述】:
fuzzywuzzy 是一个非常流行的字符串匹配库。根据库的documentation,提到它使用 Levenshtein 距离来计算序列之间的差异。但是在关闭inspection 时,我发现它实际上使用了difflib 库中的SequenceMatcher 函数。这个函数,根据documentation 使用Ratcliff/Obershelp 模式匹配算法。
根据定义,Levenshtein distance 是将一个字符串转换为另一个字符串所需的最少编辑次数,Ratcliff/Obershelp pattern-matching algorithm 计算匹配字符数的两倍除以两个字符串中的字符总数。一个密切相关的post 比较两者。
当我运行一个示例时,我得到的 SequenceMatcher 和模糊模糊中的比率函数的结果相同。
from difflib import SequenceMatcher
from fuzzywuzzy import fuzz
s = SequenceMatcher(None, "abcd", "bcde")
s.ratio()
# 0.75
fuzz.ratio("abcd", "bcde")
# 75
如果我手动计算两个字符串之间的 Levenshtein 距离,我猜它只是 2。在这种情况下,它是如何使用贡献者在文档中写的 Levenshtein 距离的?
【问题讨论】:
-
文档可能已经过时了。当然最好的提问方式是在 github 站点上创建问题。
标签: python string-matching levenshtein-distance