2010-12-28 23 views
2

は最近の可能性を拡大縮小(良い)が必要になる場合がありますプロジェクトで作業を始めたので、私は、次の質問を作ってみました/さまざまなバリエーションで)、私は各辞書の単語を繰り返し、辞書の単語と入力した文字列の各単語との間の距離を計算します。PHPスペルチェックの反復最適化

<?php 
$input_words = array("this", "is", "a", "test"); 
foreach ($dictionary_words as $dictionary_word) { 
    foreach ($input_words as $input_word) { 
     $ld = levenshtein($input_word, $accepted_word); 
     if ($ld < $distances[$input_word] || $distances[$word] == NULL) { 
      $distances[$input_word] = $ld; 
      if ($ld == 0) 
       continue; 
     } 
    } 
} 
?> 

私の質問はベストプラクティスです。実行時間は〜1〜2秒です。 私は、起動時に辞書の単語をメモリにロードして、要求が受け取られたときにスペルチェックの一部として(上記のように)繰り返す「辞書サーバ」を実行しようと考えています。これにより、実行時間が短縮されるのでしょうか、それとも繰り返しの遅い部分(forループ)ですか?もしそうなら、適切に最適化するためにできることはありますか?

Googleの「あなたはどういう意味ですか?」同じ入力文字列を確認するのに数秒かかることはありません;)

ありがとうございます。

+0

google http://answers.google.com/answers/threadview?id=526503 –

答えて

3

NorvigのHow to Write a Spelling Correctorを読んでください。この記事ではPythonを使用していますが、他の人はPHP herehereで実装しています。

+0

の下に2つのPHP実装へのリンクが2つあります。 –

+0

@Tomありがとうございました。 – marcog

+0

Norvigの例を取っ​​て、ビットを微調整し、初期化を出発点にして(単語のスペルを確認して訂正されたバージョンで答えるサーバとしてpythonスクリプトを実行する)、単語あたり0.0001-0.001のexec時間を得ました。どうもありがとう! – James

0

バイナリツリーや他のより効率的なデータ構造としてディクショナリを実装するとよいでしょう。ツリーは検索時間を大幅に短縮します。

+0

チップのおかげで – James

関連する問題