我在我的PHP项目中要解决这个问题,其中一些关键字(从几百到几千,长度可能不同)需要在一个大约100-300个字符长的字符串中搜索,有时长度较短30- 50个字符。我可以预处理关键字以重用搜索字符串的新实例。我是PHP的新手,并没有找到在PHP库中执行此操作的方法。做了一些搜索,我在Aho Corasick算法中找到了一些好的候选人,然后是Sun Wu和Udi Manber的改进,这似乎也被称为agrep(或者是agrep的一部分):http://webglimpse.net/pubs/TR94-17.pdf < / p>
还有Rabin Karp,Suffix Trees等,但它们看起来并不合适,因为首先是固定长度关键字,后者看起来非常通用,需要相当多的工作。
如果我自己在php中实现Agrep / Sun Wu-Manber是一个解决这个问题的好方法,谁能告诉我?还有其他反馈吗?
编辑:正如我在评论中提到的那样,有数百个或更多不同的搜索关键字,因此正则表达式无济于事。所以这种反应没有帮助。答案 0 :(得分:1)
我认为你可以通过使用“Levenshtein距离”度量来解决这个问题。
在信息理论和计算机科学中,Levenshtein距离 是一个字符串指标,用于衡量两者之间的差异量 序列。
另外,PHP有一个levenshtein()方法。将关键字列表用作数组&amp;可搜索的字符串作为输入并迭代您的数组并在每次迭代中使用levenshtein()进行匹配。
答案 1 :(得分:0)
从PHP 5.5开始,PHP&#39; setRequestProperty
使用Wu-Manbers算法进行多模式匹配。有关实现的详细信息,请参阅PHP git存储库中的commit ccf15cf2。根据我的经验,它非常有效。
这里提供了Aho-Corasick算法的纯PHP实现:https://packagist.org/packages/wikimedia/aho-corasick