只需要看一个段落是否包含“停用词”,停用词是否在下面的数组中。
我的公式为:
$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退出循环?
谢谢大家,我一边慢慢学习正则表达式!
答案 0 :(得分:4)
使用\b(preheat|minutes|stir|heat|put|bowl|pan)\b
作为正则表达式。这样,您只需要一个正则表达式(不需要循环),并使用\b
字边界断言,确保只有整个单词匹配。
答案 1 :(得分:2)
没试过,但\b
应该是您正在寻找的角色组。来自PHP manual:
\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,因此相应更改了
答案 2 :(得分:2)
你需要将\b
(代表单词边界)添加到正则表达式中,如下所示:
'/\b'.$pattern.'\b/i'
您的代码中似乎有一个拼写错误,因为您有一个文字结束括号(并且与单词的部分不匹配)或者您有一个打开的结束括号。
答案 3 :(得分:2)
1。您可以使用“\ b”检查字边界。单词边界被定义为单词字符和非单词字符之间的边界。单词字符是字母,数字和下划线。
2。您可以使用“|”一次完成所有操作:
$stopwords = preg_match('/\\b(preheat|minutes|stir|heat|..other words..|pan)\\b/i', $paragraph)