停止词功能

时间:2012-02-07 11:48:53

标签: php stop-words

我有这个函数,如果在数组$stopwords

中找到一个坏词,则返回true
function stopWords($string, $stopwords) {
    $stopwords = explode(',', $stopwords);
    $pattern = '/\b(' . implode('|', $stopwords) . ')\b/i';
    if(preg_match($pattern, $string) > 0) {
       return true;
    }
    return false;
}

似乎工作正常。

问题是,当数组$stopwords为空(所以没有指定坏词)时,它总是返回true,就像空值被识别为坏词并且它总是返回true(我认为问题就是这个,但也许是另一个)。

有人可以帮我解决这个问题吗?

由于

4 个答案:

答案 0 :(得分:6)

我会使用in_array()

function stopWords($string, $stopwords) {
   return in_array($string, explode(',',$stopwords));
}

这将节省一些时间而不是正则表达式。


编辑:匹配字符串中的任何单词

function stopWords($string, $stopwords) {
   $wordsArray = explode(' ', $string);
   $stopwordsArray = explode(',',$stopwords);
   return count(array_intersect($wordsArray, $stopwordsArray)) < 1;
}

答案 1 :(得分:0)

将$ stopwords作为数组

function stopWords($string, $stopwords) {
    //Fail in safe mode, if $stopwords is no array
    if (!is_array($stopwords)) return true;
    //Empty $stopwords means all is OK
    if (sizeof($stopwords)<1) return false;
    ....

答案 2 :(得分:0)

如果数组$stopwords为空,则explode(',', $stopwords)评估为空字符串,$pattern等于/\b( )\b/i。这就是为什么如果$stopwords为空,函数返回true的原因。

最简单的解决方法是添加if语句来检查数组是否为空。

答案 3 :(得分:-1)

你可以提出这样的条件:

if (!empty ($stopwords)) { your code} else {echo ("no bad words");}

然后要求用户或应用程序输入一些不良单词。