0

今夜、私が使用しているストリッピング機能の1つが、ランダムに単語をスキップしているように見えることに気づきました。

<?php
function wordstrip($document){ 
  //I truncated the list here for brevity
$wordlist = array(
"it39s",
"039",
"the",
"while",
"message");

//convert all uppercase to lower so matches work correctly
$document = strtolower($document);
            foreach($wordlist as $word)

            $document = preg_replace("/\s". $word ."\s/", " ", $document);
            //echo $word;
            //echo $document;
            $nopunc = preg_replace('/[^a-z0-9]+/i', ' ', $document);
            $trimmed = trim($nopunc);
            return $trimmed; 
    } 

?>

「the」という単語をスキップしているので、理由がわかりません。リストは200語のようなもので、他のほとんどの単語を取り除いているので、その機能を知っています。

「死にゆくベテランからのジョージ・W・ブッシュとディック・チェイニーへの最後の手紙」を送り、「死にゆくベテランからのジョージ・W・ブッシュとディック・チェイニーへの最後の手紙」を返しました。

「the」は文字列の先頭にあるので、「/\s」が原因だと思います。「/\s?」を試してみました しかし、それはうまくいきませんでした。スペースをオプションにするだけでいいと思いますよね?

ありがとうございました

4

1 に答える 1

2

単語の境界を表すために使用でき\b、スペースやピリオドなど、単語を囲む可能性のあるものをいじることはできません。

$document = strtolower($document);

foreach($wordlist as $word)
    $document = preg_replace("/\b". $word ."\b/", " ", $document);

$nopunc = preg_replace('/[^a-z0-9]+/i', ' ', $document);
$trimmed = trim($nopunc);
return $trimmed;
于 2013-03-21T00:35:58.343 に答える