Python 更好的模糊匹配性能?

Python 更好的模糊匹配性能?,python,performance,levenshtein-distance,fuzzy-comparison,difflib,Python,Performance,Levenshtein Distance,Fuzzy Comparison,Difflib,我目前正在使用方法get_close_matches方法from遍历15000个字符串的列表,以获得与另一个约15000个字符串的列表最接近的匹配: a=['blah','pie','apple'...] b=['jimbo','zomg','pie'...] for value in a: difflib.get_close_matches(value,b,n=1,cutoff=.85) 每个值需要0.58秒,这意味着完成循环需要8714秒或145分钟。是否有其他更快的库/方法或提

我目前正在使用方法get_close_matches方法from遍历15000个字符串的列表,以获得与另一个约15000个字符串的列表最接近的匹配:

a=['blah','pie','apple'...]
b=['jimbo','zomg','pie'...]

for value in a:
    difflib.get_close_matches(value,b,n=1,cutoff=.85)
每个值需要0.58秒,这意味着完成循环需要8714秒或145分钟。是否有其他更快的库/方法或提高此方法速度的方法?我已经尝试过将两个数组都转换成小写,但结果只是略微提高了速度。

试试这个


Levenshtein Python C扩展模块包含用于快速计算-Levenshtein(编辑)距离和编辑操作-字符串相似性-近似中值字符串的函数,一般来说,字符串平均-字符串序列和集合相似性-它支持普通字符串和Unicode字符串。

也许您可以建立每个列表中出现的三叉图(三个连续字母)的索引。仅将
a
中的字符串与
b
中共享三元组的字符串进行对比


你可能想看看BLAST生物信息学工具;它对序列数据库进行近似的序列比对。

通过字符串的bigram和trigram索引字符串,以便在O(log(N))vsO(N)中查找
difflib
的近似匹配项。对于我的1M+单词和单词对的模糊集,它可以在大约20秒内计算索引,并在不到100毫秒的时间内找到最接近的匹配。

我尝试了几种模糊匹配方法。最好的是余弦相似性,阈值根据您的需要(我保留了80%的模糊匹配)。


是用于模糊字符串匹配的超快速库。它的API与著名的fuzzywuzzy相同,但速度更快,并且获得了麻省理工学院的许可。

您可以尝试在matchi@hobs之后从列表b中删除元素,谢谢您指出这一点
fuzzyset
是一个很好的软件包,但是文档很薄。您如何知道性能处于'0(日志(N))?你能给我指一些关于算法的论文吗@ℕʘʘḆḽḘ pypi上的文档页面现在非常棒。它们甚至展示了如何将字符串分解以创建三元反转索引。在正确实现的反向索引上的查找速度永远不会比
O(log(N))
慢,但在本例中,N是三角形的#,而不是字符串。