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

2024-05-17 04:36:04 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我想得到一个十进制值,比如0.9(意味着90%)等,最好是使用标准的Python和library。

例如

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

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

Tags: 字符串apple标准havelibrary概率lowersimilar
3条回答

我想也许你在找一个描述字符串之间距离的算法。以下是一些您可以参考的:

  1. Hamming distance
  2. Levenshtein distance
  3. Damerau–Levenshtein distance
  4. Jaro–Winkler distance

有一个内置的。

from difflib import SequenceMatcher

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

使用它:

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

解决方案1:Python内置

使用difflib中的SequenceMatcher

专业人士: 本机python库,不需要额外的包。
缺点:太有限了,还有很多其他很好的字符串相似性算法。

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

解决方案2:jellyfish

这是一个很好的图书馆,覆盖面广,发行量少。 它支持:
-Levenshtein距离
-Damerau Levenshtein距离
-Jaro距离
-Jaro Winkler距离
-匹配评分法比较
-汉明距离

专业人士: 易于使用,各种支持的算法,经过测试。
cons:不是本机库。

示例:

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

相关问题 更多 >