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

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


当前回答

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

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

其他回答

下面是一个python脚本,用于计算两个单词的最长公共子字符串(可能需要调整才能用于多词短语):

def lcs(word1, word2):

    w1 = set(word1[i:j] for i in range(0, len(word1))
             for j in range(1, len(word1) + 1))

    w2 = set(word2[i:j] for i in range(0, len(word2))
             for j in range(1, len(word2) + 1))

    common_subs = w1.intersection(w2)

    sorted_cmn_subs = sorted([
        (len(str), str) for str in list(common_subs)
        ])

    return sorted_cmn_subs.pop()[1]

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

看一下Fuzzy模块。它具有基于soundex、NYSIIS和双变音位的快速(用C编写)算法。

好的介绍可以在http://www.informit.com/articles/article.aspx?p=1848528上找到

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

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

我用的是双变音位,就像一个咒语。

一个例子:

>>> dm(u'aubrey')
('APR', '')
>>> dm(u'richard')
('RXRT', 'RKRT')
>>> dm(u'katherine') == dm(u'catherine')
True

更新: 水母也有。在语音编码下。