我正在寻找一个Python模块,可以做简单的模糊字符串比较。具体来说,我想知道字符串相似程度的百分比。我知道这是潜在的主观,所以我希望找到一个库,可以做位置比较以及最长的相似字符串匹配,等等。
基本上,我希望找到一些足够简单的东西,可以产生单个百分比,同时仍然可以配置,以便我可以指定要进行哪种类型的比较。
我正在寻找一个Python模块,可以做简单的模糊字符串比较。具体来说,我想知道字符串相似程度的百分比。我知道这是潜在的主观,所以我希望找到一个库,可以做位置比较以及最长的相似字符串匹配,等等。
基本上,我希望找到一些足够简单的东西,可以产生单个百分比,同时仍然可以配置,以便我可以指定要进行哪种类型的比较。
当前回答
Jellyfish是一个Python模块,支持许多字符串比较指标,包括语音匹配。与Jellyfish的实现相比,纯Python实现的Levenstein编辑距离非常慢。
使用示例:
import jellyfish
>>> jellyfish.levenshtein_distance('jellyfish', 'smellyfish')
2
>>> jellyfish.jaro_distance('jellyfish', 'smellyfish')
0.89629629629629637
>>> jellyfish.damerau_levenshtein_distance('jellyfish', 'jellyfihs')
1
>>> jellyfish.metaphone('Jellyfish')
'JLFX'
>>> jellyfish.soundex('Jellyfish')
'J412'
>>> jellyfish.nysiis('Jellyfish')
'JALYF'
>>> jellyfish.match_rating_codex('Jellyfish')
'JLLFSH'`
其他回答
谷歌也有自己的Google -diff-match-patch(“目前在Java, JavaScript, c++和Python中可用”)。
(不能评论它,因为我自己只使用python的difflib)
下面是如何使用Charicar的simhash的方法,这也适用于长文档,当你改变文档中的单词顺序时,它也会检测到100%的相似性
http://blog.simpliplant.eu/calculating-similarity-between-text-strings-in-python/
另一种选择是使用最近发布的软件包FuzzyWuzzy。本博客还介绍了包支持的各种功能。
Jellyfish是一个Python模块,支持许多字符串比较指标,包括语音匹配。与Jellyfish的实现相比,纯Python实现的Levenstein编辑距离非常慢。
使用示例:
import jellyfish
>>> jellyfish.levenshtein_distance('jellyfish', 'smellyfish')
2
>>> jellyfish.jaro_distance('jellyfish', 'smellyfish')
0.89629629629629637
>>> jellyfish.damerau_levenshtein_distance('jellyfish', 'jellyfihs')
1
>>> jellyfish.metaphone('Jellyfish')
'JLFX'
>>> jellyfish.soundex('Jellyfish')
'J412'
>>> jellyfish.nysiis('Jellyfish')
'JALYF'
>>> jellyfish.match_rating_codex('Jellyfish')
'JLLFSH'`
我一直在用座位极客的Fuzzy Wuzzy,而且非常成功。
https://github.com/seatgeek/fuzzywuzzy
具体来说,令牌集比率函数…
他们还写了一篇关于模糊字符串匹配过程的文章:
http://seatgeek.com/blog/dev/fuzzywuzzy-fuzzy-string-matching-in-python