PHP 停用词表

标签 php arrays performance words

我在我的代码中玩停用词我有一个充满我想要检查的单词的数组,以及一个我想要检查的单词数组。

目前,我一次一个地遍历数组,如果它的 in_array 与停用词列表比较,我会删除这个词,但我想知道是否有更好的方法,我查看了 array_diff 等但是,如果我在第一个数组中有多个停用词,array_diff 似乎只会删除第一个出现的词。

重点是速度和内存使用,但速度更重要。

编辑-

第一个数组是单数词,基于博客评论(这些通常很长)第二个数组是停用词的单数词。抱歉没说清楚

谢谢

最佳答案

使用 str_replace...

一个简单的方法是使用 str_replacestr_ireplace ,它可以采用一组“针”(要搜索的东西)、相应的替换和一组“干草堆”(要操作的东西)。

$haystacks=array(
  "The quick brown fox",
  "jumps over the ",
  "lazy dog"
);

$needles=array(
  "the", "lazy", "quick"
);

$result=str_ireplace($needles, "", $haystacks);

var_dump($result);

这产生

array(3) {
  [0]=>
  string(11) "  brown fox"
  [1]=>
  string(12) "jumps over  "
  [2]=>
  string(4) " dog"
}

顺便说一句,清理留下的尾随空格的一种快速方法是使用 array_map调用trim对于每个元素

$result=array_map("trim", $result);

使用 str_replace 的缺点是它会替换在 单词中找到的匹配项,而不是替换整个单词。为了解决这个问题,我们可以使用正则表达式...

使用preg_replace

一种使用 preg_replace 的方法看起来与上面的非常相似,但是针是正则表达式,我们使用\b

在匹配的开始和结束处检查“单词边界”
$haystacks=array(
"For we shall use fortran to",
"fortify the general theme",
"of this torrent of nonsense"
);

$needles=array(
  '/\bfor\b/i', 
  '/\bthe\b/i', 
  '/\bto\b/i', 
  '/\bof\b/i'
);

$result=preg_replace($needles, "", $haystacks);

关于PHP 停用词表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2752896/

相关文章:

arrays - 数组读取不同的值

java - Java中返回字符串的效率如何

java - 如何监控 Java 进程的性能?

php多文件上传脚本

php - 使用Eden PHP和Laravel 4上传到YouTube?

php - MYSQL优化设计规则: PHP method vs MYSQL procedure on local host

php - PDO 绑定(bind) n 次与 foreach 相同的值

Javascript如何过滤二维数组?

javascript - 如何在 Angular 中使用 splice 从列表中删除项目?

python - 通过替换生成随机(等概率)组合