我使用的是 cakephp 1.3,我有用户提交文章的文本区域。提交时,我想查看文章中的某些关键词,并为文章添加相应的标签。
我在考虑 preg_match,但是 preg_match 模式必须是字符串。所以我将不得不遍历一个数组(大)。
有没有更简单的方法来插入模式的关键字数组。
非常感谢您的帮助。
谢谢。
最佳答案
我建议将您的关键字数组视为哈希表。小写文章文本,按空格展开,然后遍历展开数组的每个单词。如果该词存在于您的哈希表中,将它插入一个新数组,同时跟踪它出现的次数。
在这种情况下,我运行了一个快速基准测试,将正则表达式与哈希表进行比较。用正则表达式运行 1000 次,需要 17 秒。用哈希表运行它 1000 次,需要 0.4 秒。它应该是一个 O(n+m) 的过程。
$keywords = array("computer", "dog", "sandwich");
$article = "This is a test using your computer when your dog is being a dog";
$arr = explode(" ", strtolower($article));
$tracker = array();
foreach($arr as $word){
if(in_array($word, $keywords)){
if(isset($tracker[$word]))
$tracker[$word]++;
else
$tracker[$word] = 1;
}
}
$tracker 数组将输出:"computer"=> 1, "dog"=> 2。然后您可以执行该过程来决定要使用的标签。或者如果您不关心关键字出现的次数,您可以跳过跟踪器部分并在关键字出现时添加标签。
编辑:关键字数组可能需要是倒排索引数组以确保最快的查找。我不确定 in_array() 是如何工作的,但如果它搜索,那么它就没有它应该的那么快。倒排索引数组看起来像
array("computer" => 1, "dog" => 1, "sandwich" => 1); // "1" can be any value
然后你会做 isset($keywords[$word]) 来检查这个词是否匹配一个关键字,而不是 in_array(),它应该给你 O(1)。不过,其他人也许可以为我澄清这一点。
关于php - 任何更快、更简单的 php preg_match 替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4314503/