PHP中的多个关键字(100 ~ 1000秒)搜索(字符串搜索算法)


Multiple keyword (100s to 1000s) search (string-search algorithm) in PHP

我在我的PHP项目中有这个问题要解决,其中一些关键字(从几百到几千,长度可以变化)需要在大约100-300个字符长的字符串中搜索,有时长度较小,为30-50个字符。我可以预处理关键字,以便重用搜索字符串的新实例。我是PHP的新手,在PHP库中没有找到这样做的方法。做了一些搜索,我在Aho Corasick算法中找到了一些很好的候选算法,然后是孙武和Udi Manber的改进,这似乎也被称为agrep(或是agrep的一部分):http://webglimpse.net/pubs/TR94-17.pdf

有Rabin Karp,后缀树等,但他们看起来不太合适,因为第一个是固定长度的关键字,后者似乎相当通用,将需要相当多的工作。

谁能让我知道如果实现Agrep/Sun Wu-Manber在我自己的php是一个好方法来解决这个问题?还有其他的反馈吗?

编辑:正如我在下面的评论中提到的,有数百个或更多不同的搜索关键字,所以正则表达式没有帮助。所以这个回应是没有用的

我认为你可以通过使用"Levenshtein距离"度量来解决这个问题。

从维基百科;

在信息理论和计算机科学中,Levenshtein距离弦度规是用来测量两者之间的差值的吗序列。

另外,PHP有一个levenshtein()方法。使用关键字列表作为数组&可搜索字符串作为输入,遍历数组并在每次迭代中使用levenshtein()进行匹配。

从PHP 5.5开始,PHP的strtr使用Wu-Manbers算法进行多模式匹配。有关实现的详细信息,请参阅PHP git存储库中的commit ccf15cf2。根据我的经验,这是相当有效的。

ho-corasick算法的纯php实现在这里:https://packagist.org/packages/wikimedia/aho-corasick