php - PHP中的多个关键字(100s到1000s)搜索(字符串搜索算法)

标签 php search keyword string-algorithm agrep

我在我的 PHP 项目中有这个问题需要解决,其中一些关键字(从几百到几千,长度可能会有所不同)需要在大约 100-300 个字符长的字符串中搜索,有时长度更短 30- 50 个字符。我可以预处理关键字以重新用于搜索字符串的新实例。我是 PHP 的新手,在 PHP 库中找不到执行此操作的方法。做了一些搜索,我在 Aho Corasick 算法中找到了一些不错的候选者,然后是 Sun Wu 和 Udi Manber 的改进,它似乎也被称为 agrep(或者是 agrep 的一部分):http://webglimpse.net/pubs/TR94-17.pdf

还有 Rabin Karp、Suffix Trees 等,但它们看起来不太适合,因为第一个是固定长度的关键字,而后者看起来很通用,需要大量工作。

谁能告诉我自己在 php 中实现 Agrep/Sun Wu-Manber 是否是解决此问题的好方法?还有其他反馈吗?

编辑:正如我在下面的评论中提到的,有数百个或更多不同的搜索关键字,因此正则表达式无济于事。因此,该响应没有帮助。

最佳答案

我认为您可以使用“编辑距离”度量来解决这个问题。

From wikipedia ;

In information theory and computer science, the Levenshtein distance is a string metric for measuring the amount of difference between two sequences.

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

关于php - PHP中的多个关键字(100s到1000s)搜索(字符串搜索算法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6664370/

相关文章:

javascript - google maps api 地理定位和地点搜索

ruby - 从用户提交的文本中提取关键字的好方法是什么?

javascript - 如何以及为什么在代码中使用 SUPER?

php - 将大型 xml 文件写入 mysql 表太慢,可能是由于 foreach 循环?

php - 在 Wamp Server Mysql 命令行中使用 Mysqldump 备份所有数据库时出现错误 1064(42000)

php - 如何比较逗号分隔值和两个不同的ids-php mysql

javascript - NG-REPEAT 什么也不显示..即使数据解析成功

sql-server - 从现有数据库进行 Azure 搜索

c++ - 为什么我们应该只在类或函数 (C++) 中使用 'static'?

linux - 如何在 Linux 上递归搜索多个模式?