PHP を使用して、本文内の一般的なフレーズを見つける方法を探しています。PHP でそれができない場合は、これを完了するのに役立つ他の Web 言語に興味があります。
メモリや速度は問題ではありません。
現在、キーワードは簡単に検索できますが、フレーズの検索方法がわかりません。
PHP を使用して、本文内の一般的なフレーズを見つける方法を探しています。PHP でそれができない場合は、これを完了するのに役立つ他の Web 言語に興味があります。
メモリや速度は問題ではありません。
現在、キーワードは簡単に検索できますが、フレーズの検索方法がわかりません。
ここで、まさにそれを行う PHP スクリプトを作成しました。まず、ソース テキストを単語の配列とその出現回数に分割します。次に、指定されたパラメーターを使用して、それらの単語の一般的なシーケンスをカウントします。古いコードでコメントされていませんが、役に立つかもしれません。
PHPだけを使用していますか?私が思いつくことができる最も簡単なものは次のとおりです。
私は正式なCSのゴミですが、これはn^2
複雑であり、特にn(n-1)/2
最悪の場合の比較が含まれると思います。これを行うためのより良い方法があることは間違いありませんが、効率は問題ではないとおっしゃっていたので、これで問題ありません。
コードは次のとおりです(検索パラメーターを受け入れるarray_keysという新しい関数を使用しました):
// assign the source text to $text
$text = file_get_contents('mytext.txt');
// there are other ways to do this, like preg_match_all,
// but this is computationally the simplest
$phrases = explode('.', $text);
// filter the phrases
// if you're in PHP5, you can use a foreach loop here
$num_phrases = count($phrases);
for($i = 0; $i < $num_phrases; $i++) {
$phrases[$i] = trim($phrases[$i]);
}
$counts = array();
while(count($phrases) > 0) {
$p = array_shift($phrases);
$keys = array_keys($phrases, $p);
$c = count($keys);
$counts[$p] = $c + 1;
if($c > 0) {
foreach($keys as $key) {
unset($phrases[$key]);
}
}
}
print_r($counts);
実際の動作を表示する:http://ideone.com/htDSC
私はあなたが行くべきだと思います
$str = "Hello friend, you're
looking good today!";
print_r(str_word_count($str, 1));
あげる
Array
(
[0] => Hello
[1] => friend
[2] => you're
[3] => looking
[4] => good
[5] => today
)
その後、あなたは使用することができますarray_count_values()
$array = array(1, "hello", 1, "world", "hello");
print_r(array_count_values($array));
それはあなたに与えるでしょう
Array
(
[1] => 2
[hello] => 2
[world] => 1
)
醜いのは大丈夫だと言ったので、醜い解決策は、フレーズの最初の単語を検索することです。次に、その単語が見つかったら、その次の単語がフレーズ内の次に予想される単語と一致するかどうかを確認します。これは、単語が存在しないかフレーズが完了するまで、ヒットが肯定的である限り継続するループになります。
シンプルですが、非常に醜く、おそらく非常に遅いです。
HTML ファイルの全文検索が必要な場合は、強力な検索サーバーであるSphinxを使用してください。ドキュメントはこちら