2

只需要查看一个段落是否包含“停用词”,停用词在下面的数组中。

我的公式为:

$pattern_array = array("preheat", "minutes", "stir", "heat", "put", "beat", "bowl", "pan");

    foreach ($pattern_array as $pattern) {
      if (preg_match('/'.$pattern.')/i', $paragraph)) {
        $stopwords = 1;
      }
    }

这工作得很好,但对于像“pan”这样的短词,像“panko”这样的词被识别为停用词。

所以正则表达式就像它必须在它之前有一个空格或者是一个新行的开始,并且要么以句号/空格/逗号/(其他非字符对象)结尾。

另外,一旦识别出停用词,我怎么能告诉 php 退出循环?

谢谢大家,随着我的学习减慢正则表达式的学习速度!

4

4 回答 4

4

用作\b(preheat|minutes|stir|heat|put|bowl|pan)\b您的正则表达式。这样,您只需要一个正则表达式(不需要循环),并且通过使用\b单词边界断言,您可以确保只有整个单词匹配。

于 2009-12-07T18:05:58.687 回答
2

这个没试过,但\b应该是你要找的角色组。从 PHP 手册

 \b   word boundary

您的代码将如下所示:

$pattern_array = array("preheat", "minutes", "stir", "heat", "put", "beat", "bowl", "pan");

foreach ($pattern_array as $pattern) {
  if (preg_match('/\b'.$pattern.'\b/i', $paragraph)) { // also removed the ')'
    $stopwords = 1;
    break; // to exit the loop
  }
}

编辑:似乎人们最好使用\b,所以相应地改变了这个

于 2009-12-07T18:04:04.680 回答
2

您需要将\b(代表单词边界)添加到您的正则表达式中,如下所示:

'/\b'.$pattern.'\b/i'

您的代码中似乎有错字,因为您要么有一个文字右括号(并且不匹配部分单词),要么您有一个开放的右括号。

于 2009-12-07T18:05:52.510 回答
2

1.您可以使用“\b”来检查单词边界。单词边界被定义为单词字符和非单词字符之间的边界。单词字符是字母、数字和下划线。

2.您可以使用“|”一次性完成所有操作:

$stopwords = preg_match('/\\b(preheat|minutes|stir|heat|..other words..|pan)\\b/i', $paragraph)
于 2009-12-07T18:07:29.447 回答