这个主题可能不像它可能的那样清晰,但我正在努力想出一种更好的方式来描述它。
我正在对我们从XML提要中提取的一些文章实现一个坏词过滤器。目前,我将坏词放入数组中,简单地检查文本,如下所示;
str_replace($badwords, '', $text, $count);
if ($count > 0) // We have bad words... 但是这太慢了!太慢了!当我试图一次处理30,000+文章时,我开始怀疑是否有更好的方法来实现这一点。如果只有strpos支持的数组!即使这样,我也不认为它会更快。
我很乐意给你任何建议。提前感谢!
编辑:
现在,我已经在调用microtime()之间测试了一些方法来对它们进行计时。str_replace() = 990秒preg_match() = 1029秒(请记住,我只需要识别它们,而不是替换它们)没有不好的词过滤= 1057秒(大概是因为它还有1000多篇用词不好的文章要处理。
谢谢你所有的答案,我将继续使用str_replace。:)
发布于 2009-09-16 01:16:27
将所有单词组合在一个正则表达式中以一次性替换所有内容如何?我不确定它的性能如何,但它可能会更快。
例如。
preg_replace('/(' . implode('|', $badwords) . ')/i', '', $text);发布于 2009-09-16 01:46:23
我以前在当地的报社工作。我所做的不是修改文本来删除原始文件中的坏词,而是在用户请求查看文章时运行过滤器。这样,如果您需要原始文本,您可以保留它,但也可以为您的观众提供一个干净的版本。应该没有必要一次处理30,000篇文章,除非我误解了什么。
发布于 2009-09-16 01:19:05
定义“慢”?任何要处理30,000篇文章的工作都可能需要一些时间才能完成。
也就是说,一种选择(我还没有对其进行基准测试,只是将其抛出以供考虑)是将单词组合到正则表达式中,并通过preg_replace运行该正则表达式(只需使用|运算符将它们放在一起)。
https://stackoverflow.com/questions/1430429
复制相似问题