我试图找到一种好的,模糊的字符串匹配算法.直接匹配对我不起作用 - 这不太好,因为除非我的字符串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)