ホームページ >バックエンド開発 >PHPチュートリアル >単語が出現する回数を数える
非日常的な英単語のセットがあり、英語の記事で最も頻繁に出現する単語を計算する必要があります。
そこで、最初は配列を走査し、substr_count を使用して各単語の出現数を順番に数えることを考えましたが、これでは記事全体を複数回繰り返しスキャンすることになります。あるいは、記事を単語に分割し、配列関数を使用して交差の数を計算することもできますが、それでも理想的ではないと感じます。
何か考えはありますか?このアプリケーションは実際にはキーワードを抽出します。
配列に分割するのはなぜ良くないのですか? 英語で配列を入力するのは非常に便利です、少なくとも中国語よりははるかに簡単です
実際、私はニーズをよく理解していません。純粋な統計情報の array_count_values は十分便利です
つまり、シソーラスがすでにあるので、記事内でシソーラスの単語の出現数を確認する必要があります
はいの場合、その後、トライアルゴリズムを使用できます (私が投稿しました)
もちろん、記事を一度スキャンするだけです まずシソーラスを構築します
つまり、シソーラスはすでにあります。記事内の類義語辞典の単語
「はい」の場合は、トライ アルゴリズムを使用できます (私が投稿しました)
記事を一度スキャンするだけです。それだけです。もちろん、最初に語彙を構築する必要があります
なぜこの形式が保存に適しているのですか語彙? mysql、json、xml、純粋な配列?
記事が 5kb で語彙が 1000 語ある場合、この記事に一致するようにこれら 1000 語を 1 つずつ処理します。
mysql_query、
json_decode()
simplexml_load_file()
配列
どれがより効率的ですか?もっとリソース (CPU、RAM) を節約しますか?
5kb に 1000 語があり、そのすべてが記事である可能性は低いでしょうか?
たとえ 1000 個あったとしても、その量はそれほど多くはなく、重複を削除するのは 1 つの配列交差で十分です
私のアイデアは、記事を単語の配列に分割することであり、array_count_values で実行できます。関数
次に、特定の回数 (意味を一致させるには少なすぎますよね?) で部分を抽出すると、残りはほとんどなくなり、既存の部分との交差を見つけるだけで十分です。語彙
ポスターは特に英語の語彙について言及していますが、アルゴリズムが英語の語彙に限定されている場合、意味がありません
5kb に 1000 語があり、そのすべてが記事である可能性は低いです。
たとえ 1,000 個あったとしても、その量はそれほど多くはありません。重複を削除するのは 1 つの配列の交差で十分です。私のアイデアは、記事を単語の配列に分割することであり、array_count_values は両方の役割を果たします。関数
次に、特定の回数 (意味をなすには少なすぎますよね?) で部分を抽出すると、残りはほとんどなくなり、既存の語彙との交差部分を見つけるだけで十分です
あなたの言ったことは理にかなっています
もし彼が混合言語と言ったら、私だったらこの投稿には返信せずに見るだけでしょうね、笑フロア:5kbに1000文字って、全部記事ということはまずないですよね?
たとえ 1,000 個あったとしても、その量はそれほど大きくはありません。重複を削除するのは 1 つの配列の交差で十分です。私のアイデアは、記事を単語の配列に分割することであり、array_count_values は両方の役割を果たします。統計と重複排除機能
次に、回数を抽出します...
バージョンによって提供されるプレフィックスツリーが理解できないので、とりあえず実装するために記事を複数回スキャンすることにしました
例
include 'TTrie.php';class wordkey extends TTrie { function b() { $t = array_pop($this->buffer); $this->buffer[] = "<b>$t</b>"; }}$p = new wordkey;$p->set('秦始皇', 'b');$p->set('洛阳', 'b');$t = $p->match('秦始皇东巡洛阳');echo join('', $t);a4b561c25d9afb9ac8dc4d70affff419秦始皇帝0d36329ec37a2cc24d42c7229b69747a東部ツアー<洛陽0d36329ec37a2cc24d42c7229b69747a