String 最新的近似字符串匹配算法

String 最新的近似字符串匹配算法,string,pattern-matching,approximate,String,Pattern Matching,Approximate,我寻求一种最先进的算法来近似字符串匹配。 你给我提供参考资料(文章、论文等)吗? 谢谢您可能想了解Levenshtein distance 您可能已经得到了答案,但我想表达一下我对近似字符串匹配的观点,这样其他人可能会受益。我是根据我在解决云服务问题以处理真正大规模需求方面的经验说这番话的 如果我们只想讨论近似字符串匹配算法,那么有很多。 其中很少有: Jaro Winkler,编辑距离(Levenshtein),Jaccard相似性,Soundex/基于语音的算法等。 一个简单的谷歌搜索将为我

我寻求一种最先进的算法来近似字符串匹配。 你给我提供参考资料(文章、论文等)吗?
谢谢

您可能想了解Levenshtein distance


您可能已经得到了答案,但我想表达一下我对近似字符串匹配的观点,这样其他人可能会受益。我是根据我在解决云服务问题以处理真正大规模需求方面的经验说这番话的

如果我们只想讨论近似字符串匹配算法,那么有很多。 其中很少有: Jaro Winkler,编辑距离(Levenshtein),Jaccard相似性,Soundex/基于语音的算法等。 一个简单的谷歌搜索将为我们提供所有细节

具有讽刺意味的是,当您尝试匹配两个给定的输入字符串时,它们会起作用。好的,从理论上证明模糊或近似字符串匹配的工作方式

然而,严重低估的一点是,我们如何在生产设置中使用相同的设置。我所知道的寻找近似字符串匹配算法的人并不都知道如何在生产环境中解决相同的问题

假设我们有一个数百万个名字的列表,并且如果我们想使用上面的标准算法之一根据列表中的所有条目搜索给定的输入名字,这将意味着灾难

典型的编辑距离算法的时间复杂度为O(N^2),其中N是字符串中的字符数。要扫描大小为M的列表,复杂性为O(M*N^2)。这将意味着非常高的硬件要求,无论您想要叠加多少h/w,它都不会对您有利

这就是我们必须开始考虑其他方法的地方。 在生产环境中解决此类问题的常用方法之一是使用标准搜索引擎,如: 阿帕奇·卢森

Lucene索引引擎对参考数据(称为文档)进行索引,并可以针对引擎启动输入查询。返回的结果将根据它们与输入的接近程度进行排序。 这与谷歌搜索引擎的工作原理很接近。谷歌对整个网络进行爬网和索引,但你应该有一个模仿谷歌的微型系统

这适用于大多数情况,包括首名、中间名和姓氏互换的复杂名称匹配。

您可以根据Lucene发出的分数选择结果

当你的角色成熟时,你会开始考虑使用托管解决方案,比如Amazon Cloudsearch,它为你包装了Solr和ElastiSearch。当然,它在下面使用Lucene,并使您独立于索引的潜在大小,因为用于索引的引用数据更大


谢谢您的帮助。是的,我见过这种类型的方法,但我想要一个最先进的(文章,论文,…)谢谢你好运你的搜索。