0

テキスト分析についてアドバイスが必要です。プログラムはphpで書かれています。

私のコードは、URL を受け取り、DB に対してサイトの単語を照合し、一致を探す必要があります。

注意が必要な部分は、テキストに表示される単語が常に DB に書き込まれるとは限らないことです。

例:

私のDBにこれらの値があるとしましょう:単語=​​文字

このサイトには次のようなものがあります。

私は出力することになっています:文字のこと

私のコードは、検索された単語をDBと照合しようとするたびに、いくつかの正規表現を作成します。

見つからない単語ごとに、DB に対して 8 つのクエリを作成します。ほとんどの単語は一致しないため、何百もの単語を含む Web サイト全体について話すと、CPU レベルが急上昇します。

私は、DB に見つからないすべての単語を出現時にグローバルに保存すること (HD は CPU よりもコストが低い)、またはそのすべてを保存するための配列または辞書を作成することを考えました。

私はこのプロジェクトと本当に混乱しています。多くのユーザーにサービスを提供することになっていますが、現在のコードでは、サーバーは 10 ~ 20 のユーザー リクエストで停止します。

何かご意見は?

編集: 検索された単語は英単語ではなく、コードは Windows 2008 サーバーで実行されます

4

4 に答える 4

1

トライを実装してレーベンスタイン距離を計算しますか? 実装の詳細なウォークスルーについては、このブログを参照してください: http://stevehanov.ca/blog/index.php?id=114

于 2011-07-25T21:05:29.213 に答える
0

回答ありがとうございます。残念ながら、答えはどれも私を助けませんでした、多分私は十分に明確ではありませんでした。

最終的に、DB上のすべての単語(約6000語)を含むハッシュテーブルを作成し、DBではなくハッシュと照合することで問題を解決しました。

コードは4秒の実行時間で起動し、現在は0.5秒です。:-)

再度、感謝します

于 2011-07-27T12:44:01.160 に答える
0

Sphynx & Stemingの仕事のように思えます。

于 2011-07-25T17:50:03.613 に答える
0

ばかげた質問かもしれませんが、SQL クエリで LIKE 句を使用することを検討しましたか? このようなもの:

$sql = "SELECT * FROM `your_table` WHERE `your_field` LIKE 'your_search'":

私は通常、クエリからの戻り値に対してあまりにも多くの文字列操作を行う必要があるときはいつでも、SQL 側で簡単に実行できることに気付きました。

于 2011-07-25T19:35:53.583 に答える