找到两个字符串之间的相似性度量

新手上路,请多包涵

在 Python 中如何获得一个字符串与另一个字符串相似的概率?

我想得到一个十进制值,如 0.9(表示 90%)等。最好使用标准 Python 和库。

例如

similar("Apple","Appel") #would have a high prob.

similar("Apple","Mango") #would have a lower prob.

原文由 tenstar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 537
2 个回答

有一个内置的。

 from difflib import SequenceMatcher

def similar(a, b):
    return SequenceMatcher(None, a, b).ratio()

使用它:

 >>> similar("Apple","Appel")
0.8
>>> similar("Apple","Mango")
0.0

原文由 Inbar Rose 发布,翻译遵循 CC BY-SA 3.0 许可协议

解决方案 #1:Python 内置

使用 difflib 中的 SequenceMatcher

优点:原生 python 库,不需要额外的包。

缺点:太有限了,还有很多其他好的字符串相似性算法。

_例子_:

 >>> from difflib import SequenceMatcher
>>> s = SequenceMatcher(None, "abcd", "bcde")
>>> s.ratio()
0.75

解决方案#2: 水母

它是一个非常好的库,覆盖面广,问题少。它支持:

- 编辑距离

- Damerau-Levenshtein 距离

- 哈罗距离

- Jaro-Winkler 距离

- 匹配评分方法比较

- 汉明距离

优点:易于使用,支持算法的范围,经过测试。

缺点:不是本地库。

_例子_:

 >>> import jellyfish
>>> jellyfish.levenshtein_distance(u'jellyfish', u'smellyfish')
2
>>> jellyfish.jaro_distance(u'jellyfish', u'smellyfish')
0.89629629629629637
>>> jellyfish.damerau_levenshtein_distance(u'jellyfish', u'jellyfihs')
1

原文由 Iman Mirzadeh 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题