2

Peter Norvigの有名なspellchecker(Java 8バージョンhere)は、その単語に近いものがトレーニング・データに含まれていると、単一の単語を訂正することができます。しかし、フレーズ全体を扱うためには、どうすればそれを適用できますか?例えば、私は、各フレーズが改行で区切られたファイルがある場合:私は'Platic'を修正するためのアルゴリズムを伝える場合ピーター・ノービッヒのマルチ・マッチのスペル・チェッカー

Plastic box 
Pencils and sketch 
Romeo and Juliet 
. 
. 
. 

を、それが'Plastic box'を返す必要があります。同様に、'Pencils'を修正するように指示すると、'Pencils and sketch'が返されます。

は、私は(Javaバージョン)上記のコードの次の行を変更しようとしました:

Stream.of(new String(Files.readAllBytes(dictionaryFile)).toLowerCase().replaceAll("[^a-z ]","").split(" ")).forEach((word) ->{ 
      dict.compute(word, (k,v) -> v == null ? 1 : v + 1 ); 
     }); 

Stream.of(new String(Files.readAllBytes(dictionaryFile)).toLowerCase().split("\n")).forEach((word) ->{ 
      dict.compute(word, (k,v) -> v == null ? 1 : v + 1 ); 
     }); 

に動作していないようでした。

+0

スペルチェックやオートコンプリートの後にいますか? –

答えて

0

あなたは慎重にNorvigのspellcheckerを通過する場合は、error modelとして、彼はスペルミスの単語からedit distance 1と2で単語を使用していることがわかります。したがって、ファイルbig.textを辞書として使用してPlaticを修正したい場合は、修正の候補の単語として編集距離2にある単語Elasticを見つけることができます。

修正されたコードでは、フレーズPlastic boxは単語Platicから2編集距離以内でさえありません。エラーモデルでは候補にはならないため、動作しません。

例えば、それらの間の編集距離は5で、その後、あなたは言葉の何百万人を考慮する必要がありますし、非常に非効率的になりますedit3edit4edit5はそれを動作させるための機能を実装する必要があります。

は代わりに、私はあなたが、あなたがlanguage model P(Plastic box)=と、辞書でprobability of occurrenceに応じて、最も可能性の高いbigram phraseを返すことができbigramlanguage modelを考慮し、スペルミスの単語のための単一の可能な候補語を返すにもかかわらず、ことができると思いますP(Plastic)* P(box | Plastic)と候補語句の確率はP(Plastic box)* P(Platic | Plastic Box)with Bayes formula, if you have anエラーモデルです。