文本分析的代码效率

时间:2011-07-25 17:41:02

标签: php regex performance memory-efficient

我需要有关文本分析的建议。 该程序是用PHP编写的。

我的代码需要接收一个URL并将网站字与数据库匹配并寻找匹配项。

棘手的部分是,文字中出现的单词并非总是写在数据库中。

示例:

假设我的数据库具有以下值: Word =字母

该网站有: 罗嗦的事情

我应该输出: 信件事

我的代码在每个人尝试将搜索到的单词与数据库匹配后生成多个正则表达式。

对于未找到的每个单词,我向DB发出8个查询。大多数单词没有匹配,所以当我们谈论一个包含数百个单词的整个网站时,我的CPU级别会跳跃。

我考虑过将所有未在数据库中找到的单词存储起来(HD成本低于CPU),或者制作一个数组或字典来存储所有这些单词。

我真的很困惑这个项目。它应该服务于很多用户,使用当前代码服务器将在10-20个用户请求之后死亡。

有什么想法吗?

编辑: 搜索到的单词不是英文单词,代码在Windows 2008服务器中运行

4 个答案:

答案 0 :(得分:1)

实施trie并计算levenshtein距离?有关实施的详细演练,请参阅此博客:http://stevehanov.ca/blog/index.php?id=114

答案 1 :(得分:0)

对我而言似乎是Sphynx&的工作。 stemming

答案 2 :(得分:0)

可能是愚蠢的问题,但您是否考虑在SQL查询中使用LIKE子句? 像这样:

$sql = "SELECT * FROM `your_table` WHERE `your_field` LIKE 'your_search'":

我经常发现每当我必须对查询的返回值进行过多的字符串操作时,我可以在SQL端更轻松地完成它。

答案 3 :(得分:0)

谢谢大家的回答。 不幸的是,没有一个答案对我有帮助,也许我不够清楚。

我最终通过创建一个包含数据库中所有单词的哈希表(大约6000个单词)来解决问题,并检查哈希而不是数据库。

代码以4秒的执行时间启动,现在为0.5秒! : - )

再次感谢