我正在寻找一个Python模块,可以做简单的模糊字符串比较。具体来说,我想知道字符串相似程度的百分比。我知道这是潜在的主观,所以我希望找到一个库,可以做位置比较以及最长的相似字符串匹配,等等。

基本上,我希望找到一些足够简单的东西,可以产生单个百分比,同时仍然可以配置,以便我可以指定要进行哪种类型的比较。


当前回答

另一种选择是使用最近发布的软件包FuzzyWuzzy。本博客还介绍了包支持的各种功能。

其他回答

正如nosklo所说,使用Python标准库中的difflib模块。

difflib模块可以使用SequenceMatcher()对象的ratio()方法返回序列相似性的度量值。相似度作为0.0到1.0范围内的浮点数返回。

>>> import difflib

>>> difflib.SequenceMatcher(None, 'abcde', 'abcde').ratio()
1.0

>>> difflib.SequenceMatcher(None, 'abcde', 'zbcde').ratio()
0.80000000000000004

>>> difflib.SequenceMatcher(None, 'abcde', 'zyzzy').ratio()
0.0

谷歌也有自己的Google -diff-match-patch(“目前在Java, JavaScript, c++和Python中可用”)。

(不能评论它,因为我自己只使用python的difflib)

我一直在用座位极客的Fuzzy Wuzzy,而且非常成功。

https://github.com/seatgeek/fuzzywuzzy

具体来说,令牌集比率函数…

他们还写了一篇关于模糊字符串匹配过程的文章:

http://seatgeek.com/blog/dev/fuzzywuzzy-fuzzy-string-matching-in-python

下面是如何使用Charicar的simhash的方法,这也适用于长文档,当你改变文档中的单词顺序时,它也会检测到100%的相似性

http://blog.simpliplant.eu/calculating-similarity-between-text-strings-in-python/

Difflib可以做到。

文档中的例子:

>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('apple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']

来看看。它还有其他功能,可以帮助您定制一些东西。