0

文字列からノイズ ワードを削除しようとしています。適切なアルゴリズムであると思われるものを持っていますが、問題が発生しています。preg_replace を実行する前に、アポストロフィ (') 以外のすべての句読点を削除します。私はこのpreg_replaceを通してそれを入れました:

$content = preg_replace('/\b('.implode('|', self::$noiseWords).')\b/','',$content);

実際にその ' 文字を持っている単語を除いて、これはうまく機能します。preg_replace はそれを境界文字として扱っているようです。これは私にとって問題です。

これを回避する方法はありますか?おそらく別の解決策ですか?

ありがとう!

これが私が使用している例です:

$content = strtolower(strip_tags($content));
    $content = preg_replace("/(?!['])\p{P}/u", "", $content);// remove punctuation
    echo $content;// i've added striptags for editing as well should still workyep it doesnbsp

    $content = preg_replace("/\b(?<')(".implode('|', self::$noiseWords).")(?!')\b/",'',$content);

    $contentArray = explode(" ", $content);

    print_r($contentArray);

3 行目には、preg_replace の直前にある $content のコメントが表示されます。

私の NoiseWords 配列がどのように見えるかはご想像いただけると思いますが、ここに示すのはほんの一部です。

$noiseWords = array("a", "able","about","above","abroad","according","accordingly","across",
        "actually","adj","after","afterwards","again",......)
4

1 に答える 1

0

否定の後読みと肯定の先読みを使用して、引用文字を「回避」していないことを確認できます。

$regex = "/\b(?<!')(".implode('|', self::$noiseWords).")(?!')\b/";

これで、正規表現は、単一引用符が前後にあるものと一致しなくなります。

于 2012-07-31T01:29:52.730 に答える