4

PHP を使用して、本文内の一般的なフレーズを見つける方法を探しています。PHP でそれができない場合は、これを完了するのに役立つ他の Web 言語に興味があります。

メモリや速度は問題ではありません。

現在、キーワードは簡単に検索できますが、フレーズの検索方法がわかりません。

4

6 に答える 6

4

ここで、まさにそれを行う PHP スクリプトを作成しました。まず、ソース テキストを単語の配列とその出現回数に分割します。次に、指定されたパラメーターを使用して、それらの単語の一般的なシーケンスをカウントします。古いコードでコメントされていませんが、役に立つかもしれません。

于 2011-01-26T06:51:02.597 に答える
1

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

于 2011-01-26T06:36:01.347 に答える
1

私はあなたが行くべきだと思います

str_word_count

$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
)
于 2011-01-26T07:04:47.667 に答える
0

醜いのは大丈夫だと言ったので、醜い解決策は、フレーズの最初の単語を検索することです。次に、その単語が見つかったら、その次の単語がフレーズ内の次に予想される単語と一致するかどうかを確認します。これは、単語が存在しないかフレーズが完了するまで、ヒットが肯定的である限り継続するループになります。

シンプルですが、非常に醜く、おそらく非常に遅いです。

于 2011-01-26T06:09:14.830 に答える
-2

HTML ファイルの全文検索が必要な場合は、強力な検索サーバーであるSphinxを使用してください。ドキュメントはこちら

于 2011-01-26T06:30:38.397 に答える