我需要反复删除文章中的某些停用词。目前我正在使用函数str_replace来实现这一目标。作为第一个参数,我使用停止列表数组变量来删除任何停用词的出现。这样可以正常工作,除了它还删除了在单词中间出现的任何匹配(即,如果停用词是“th”,它将从“the”,“then”等中删除“th”。
现在,如果我使用纯文本提供参数,我可以在单词的任一侧添加一个空格来弥补这种情况。但是,由于我使用的是变量数组,因此无效。我也尝试使用concatenate运算符,但这似乎不是函数内部的合法连接符。
当前代码如下所示:
$i = str_replace(" " . $swarray . " ", $string );
答案 0 :(得分:7)
您需要使用带有字边界的preg_replace
。例如下面我们只是替换单词the
,同时避免替换them
或then
等
$string = preg_replace('/\bthe\b/', '', $string);
答案 1 :(得分:4)
preg_replace
的 array
$find = array('/\bth\b/', '/\bthe\b/', '/\bthen\b/');
$replace = array('', '', '');
echo $i = preg_replace($find, $replace, $string);
$find = array('/\bth\b/', '/\bthe\b/', '/\bthen\b/');
echo $i = preg_replace($find, "", $string);
正则表达式匹配文档:http://www.php.net/manual/en/function.preg-replace.php#89364
\b Match a word boundary
答案 2 :(得分:0)
这应该有效:
$i = $string;
foreach($swarray as $word) {
$i = str_replace(" " . $word . " ", "", $i );
}