什么是Python中的简单模糊字符串匹配算法?

Mri*_*lla 16 python

我试图找到一种好的,模糊的字符串匹配算法.直接匹配对我不起作用 - 这不太好,因为除非我的字符串100%相似,否则匹配失败.在莱文斯坦,因为它工作在一个人物等级方法不适用于字符串的工作也很好.我正在寻找与单词级别匹配相关的内容,例如

字符串 - 答:快速的棕色狐狸.

字符串B:快速的棕色狐狸跳过懒狗.

这些应匹配,因为字符串A中的所有单词都在字符串B中.

现在,这是一个过于简单的例子,但任何人都会知道一个好的,模糊的字符串匹配算法,适用于单词级别.

ber*_*nie 33

我喜欢德鲁的回答.

您可以使用difflib查找最长匹配:

>>> a = 'The quick brown fox.'
>>> b = 'The quick brown fox jumped over the lazy dog.'
>>> import difflib
>>> s = difflib.SequenceMatcher(None, a, b)
>>> s.find_longest_match(0,len(a),0,len(b))
Match(a=0, b=0, size=19) # returns NamedTuple (new in v2.6)
Run Code Online (Sandbox Code Playgroud)

或者选择一些最小匹配阈值.例:

>>> difflib.SequenceMatcher(None, a, b).ratio()
0.61538461538461542
Run Code Online (Sandbox Code Playgroud)


小智 17

看看这个这个python库,SeatGeek昨天开源了.显然,大多数这类问题都与环境有关,但它可能会对你有所帮助.

from fuzzywuzzy import fuzz

s1 = "the quick brown fox"
s2 = "the quick brown fox jumped over the lazy dog"
s3 = "the fast fox jumped over the hard-working dog"

fuzz.partial_ratio(s1, s2)
> 100

fuzz.token_set_ratio(s2, s3)
> 73
Run Code Online (Sandbox Code Playgroud)

SeatGeek网站

和Github回购