2

段落に「ストップワード」が含まれているかどうかを確認する必要があるだけです。ストップワードは以下の配列にあります。

私は次のような式を持っていました:

$pattern_array = array("preheat", "minutes", "stir", "heat", "put", "beat", "bowl", "pan");

    foreach ($pattern_array as $pattern) {
      if (preg_match('/'.$pattern.')/i', $paragraph)) {
        $stopwords = 1;
      }
    }

これは十分に機能しますが、「pan」のような短い単語の場合、「panko」のような単語はストップ ワードとして識別されます。

したがって、正規表現は、その前にスペースが必要であるか、新しい行の開始であり、ピリオド/スペース/コンマ/(他の非文字オブジェクト)で終わる必要があるようなものになります。

また、ストップワードが識別されたらすぐにループを終了するようにphpに指示するにはどうすればよいですか?

みんなありがとう、私が行くにつれて正規表現の学習が遅くなります!

4

4 に答える 4

4

\b(preheat|minutes|stir|heat|put|bowl|pan)\b正規表現として使用します。そうすれば、必要な正規表現は 1 つだけで (ループは必要ありません)、\b単語境界アサーションを使用することで、単語全体のみが一致することを確認できます。

于 2009-12-07T18:05:58.687 に答える
2

1.「\b」を使用して単語の境界を確認できます。単語の境界は、単語の文字と単語以外の文字の間の境界として定義されます。単語文字は、文字、数字、およびアンダースコアです。

2.「|」を使用すると、すべてを一度に実行できます。

$stopwords = preg_match('/\\b(preheat|minutes|stir|heat|..other words..|pan)\\b/i', $paragraph)
于 2009-12-07T18:07:29.447 に答える
2

これを試したことはありません\bが、探している文字グループになるはずです。PHPマニュアルから :

 \b   word boundary

コードは次のようになります。

$pattern_array = array("preheat", "minutes", "stir", "heat", "put", "beat", "bowl", "pan");

foreach ($pattern_array as $pattern) {
  if (preg_match('/\b'.$pattern.'\b/i', $paragraph)) { // also removed the ')'
    $stopwords = 1;
    break; // to exit the loop
  }
}

編集:人々は \b を使用した方が良いようですので、それに応じてこれを変更してください

于 2009-12-07T18:04:04.680 に答える
2

\b次のように正規表現に(単語境界を表す)を追加する必要があります。

'/\b'.$pattern.'\b/i'

コードにタイプミスがあるようです。これは、文字どおりの閉じ括弧がある (単語の一部が一致しない) か、開き閉じ括弧があるためです。

于 2009-12-07T18:05:52.510 に答える