停用词功能

发布于 2025-01-03 00:48:43 字数 485 浏览 0 评论 0原文

我有这个函数,如果在数组 $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 (我认为问题是这个,但也许是另一个)。

谁能帮我解决这个问题吗?

谢谢

I have this function that returns true if one of the bad words is found in the array $stopwords

function stopWords($string, $stopwords) {
    $stopwords = explode(',', $stopwords);
    $pattern = '/\b(' . implode('|', $stopwords) . ')\b/i';
    if(preg_match($pattern, $string) > 0) {
       return true;
    }
    return false;
}

It seems to work fine.

The problem is that when the array $stopwords is empty ( so no bad words specified ), it always returns true, like if the empty value is recognized as a bad word and it always returns true ( I think the issue it's this but maybe is another one ).

Can anyone help me sorting out this issue?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

月亮邮递员 2025-01-10 00:48:43

我会使用 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;
}

I would use in_array():

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

This will save some time instead of the regexp.


EDIT: to match any word in the string

function stopWords($string, $stopwords) {
   $wordsArray = explode(' ', $string);
   $stopwordsArray = explode(',',$stopwords);
   return count(array_intersect($wordsArray, $stopwordsArray)) < 1;
}
怂人 2025-01-10 00:48:43

将 $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;
    ....

Give $stopwords as an array

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;
    ....
和影子一齐双人舞 2025-01-10 00:48:43

如果数组 $stopwords 为空,则 explode(',', $stopwords) 计算结果为空字符串,并且 $pattern 等于 /\b( )\b/i.这就是为什么如果 $stopwords 为空,您的函数会返回 true 的原因。

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

If the array $stopwords is empty, than explode(',', $stopwords) evaluates to an empty string and $pattern equals /\b( )\b/i. This is the reason why your function returns true if $stopwords is empty.

The easiest way to fix it is to add an if statement to check whether the array is empty or not.

夜血缘 2025-01-10 00:48:43

你可以设置这样的条件:

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

然后要求用户或应用程序输入一些脏话。

You can put a condition like this:

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

And then ask the user or application to input some bad words.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文