質問

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

次のような式がありました。

$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に指示するにはどうすればよいでしょうか?

皆さん、ありがとうございます。正規表現の学習が遅くなりました。

役に立ちましたか?

解決

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

他のヒント

これは試していませんが、 \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 を使用する方が良いようですので、それに応じてこれを変更しました

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

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

リテラルの閉じ括弧がある (単語の一部と一致しない) か、開いた閉じ括弧があるため、コードにタイプミスがあるようです。

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

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

$stopwords = preg_match('/\\b(preheat|minutes|stir|heat|..other words..|pan)\\b/i', $paragraph)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top