Мне нужно многократно удалять определенные слова остановки из статей. В настоящее время я использую функцию str_replace для достижения этой цели. В качестве первого аргумента я использую переменную массива стоп-листа, чтобы удалить любое появление стоп-слов. Это прекрасно работает, за исключением того, что оно также удаляет любые совпадения, которые встречаются в середине слова (т. Е. Если стоп-слова являются «th», он удаляет «th» из «the», «then» и т. Д.).
Теперь, если бы я предоставил аргумент, используя простой текст, я мог бы добавить пробел по обе стороны слова, чтобы исправить ситуацию. Однако, поскольку я использую переменный массив, это не сработает. Я также попытался использовать оператор конкатенации, однако это, похоже, не является юридическим коннектором внутри функции.
Текущий код выглядит примерно так:
$i = str_replace(" " . $swarray . " ", $string );
Вместо этого вы должны использовать preg_replace
со preg_replace
. Например, ниже мы заменяем только слово, избегая them
замены, а then
т. Д.
$string = preg_replace('/\bthe\b/', '', $string);
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);
Документ соответствия Regex: http://www.php.net/manual/en/function.preg-replace.php#89364
\b Match a word boundary
Это должно работать:
$i = $string; foreach($swarray as $word) { $i = str_replace(" " . $word . " ", "", $i ); }