ホワイトリストに登録された単語のリストがあります:kitchen chair table
;
テキストを与えられて、私はそれらのホワイトリストに載っている単語のどれがその中にあるか知りたいです。
これを達成するための良い方法は何でしょうか?つまり、わかりやすく、パフォーマンスが良いということですか?
ホワイトリストに登録された単語のリストがあります:kitchen chair table
;
テキストを与えられて、私はそれらのホワイトリストに載っている単語のどれがその中にあるか知りたいです。
これを達成するための良い方法は何でしょうか?つまり、わかりやすく、パフォーマンスが良いということですか?
これを実現するには、単語境界のある正規表現を使用する必要があります。文字列の位置に依存せず、単に依存する場合、「heat」などの単語は「cheat」などの単語内で一致します
$word_list = "kitchen chair table tables";
$words = explode( ' ', $word_list);
$text = 'There is a table in the kitchen';
foreach( $words as $word) {
if( preg_match( '/\b' . $word . '\b/', $text)) {
echo "$word is in the text\n";
}
}
これは以下を出力します:
kitchen is in the text
table is in the text
のみが含まれているtable
場合、これは一致しないことに注意してください。$text
tables
あまり明確な質問ではありませんが、次のようなものがうまくいくかもしれません:
$str = "kitchen chair table";
$search = "kitchen bathroom chair";
$arr1 = explode(' ', $str);
$arr2 = explode(' ', $search);
print_r(array_intersect($arr1, $arr2));
出力:
Array
(
[0] => kitchen
[1] => chair
)
これらの単語が文字列内にどのくらいの頻度で含まれているか、またはそれらの正確な位置を知る必要がありますか? そうでない場合は、「explode(' ', $list)」を使用してリストを配列に変換することをお勧めします。次に、その配列を繰り返し処理し、strpos で検索します。
必要に応じてサンプルコードを提供できます:)
位置とすべての出現が必要な場合は、正規表現を使用する必要があります。
//list of words
$myArray = array('kitchen', 'chair', 'table');
foreach($myArray as $word){
if(stristr($textBody, $word) !== false){
// word's in there
}
}
PHPの爆発機能を使用して、ワードリストをスペースで爆発させることができます。次に、配列を返します。入力テキストでも同じことが行われます。このようにして、2 つのアレイが作成されます。
その後、両方の配列で共通の単語を返すarray_intersect関数を使用できます。
$array = explode(' ',$wordlist);
$result = array_intersect($array, $inputarray);
$result には、すべての一般的な単語が含まれます。