3

我需要从文章中反复删除某些停用词。目前我正在使用函数 str_replace 来实现这一点。作为第一个参数,我使用停止列表数组变量来删除任何出现的停止词。这很好用,除了它还会删除出现在单词中间的任何匹配项(即,如果停用词是“th”,它将从“the”、“then”等中删除“th”)。

现在,如果我使用纯文本提供参数,我可以在单词的两侧添加一个空格来纠正这种情况。但是,由于我使用的是变量数组,所以这不起作用。我也尝试使用连接运算符,但这似乎不是函数内的合法连接器。

当前代码如下所示:

$i = str_replace(" " . $swarray . " ", $string );
4

3 回答 3

12

您需要改为使用preg_replace单词边界。例如下面我们只替换 wordthe而避免替换themorthen

$string = preg_replace('/\bthe\b/', '', $string);
于 2013-08-26T11:06:47.883 回答
6

preg_replacearray

$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
于 2013-08-26T11:13:46.607 回答
0

这应该有效:

$i = $string;
foreach($swarray as $word) {
  $i = str_replace(" " . $word . " ", "", $i );
}
于 2013-08-26T11:04:02.667 回答