4

私は言語辞書 (つまり、英語、イタリア語など) を持っています。これは基本的に、各行に 1 つの単語を含むファイルです。

今、その文字列がその辞書に存在するかどうかを入力チェックで指定するメソッドでクラスを作成したいと思います。

私の考えは、メソッドがブール値を返すということです。擬似コード:

boolean checkWord(String s){
    if(StringIsInDictionary) return true;
    return false
}

その機能を実装する最良の方法は何ですか?

ファイルには最大 65000 語が含まれることを考慮してください。

4

4 に答える 4

7

ディクショナリをSet<String>(たとえば、HashSet<String>) に読み込んでから、 を使用しますset.contains(word)

于 2013-03-02T15:33:23.527 に答える
2

スペースと時間の効率的なソリューション (スマートフォンで使用するような) については、ブルーム フィルターを検討してください。そうすれば、電話に辞書を保存する必要がなくなり、文字列が辞書にあることを確認するのが非常に高速になります。ブルーム フィルターは誤検出を返す可能性がありますが、そのリスクを軽減するように調整できることに注意してください。

ブルーム フィルターのオープン ソース Java 実装がいくつかあります。1 つはこちらhttps://github.com/magnuss/java-bloomfilterです。

于 2013-03-02T16:05:34.483 に答える
1

おそらく、単語を 1 行に 1 単語として保存したくないでしょう。より良いアプローチは、ファイルをディスクから 1 回だけ読み取り、その単語を HashSet (検索に非常に効率的な HashMap に基づくセット) に格納してから、set.contains("mystring"). ただし、これにはマップ全体がメモリ内にある必要がありますが、複数の単語をチェックする必要がある場合は非常に効率的です。

その後、戻ってセットをより効率的な方法でディスクにシリアライズし、初期ロードを高速化することもできます。

于 2013-03-02T15:35:34.370 に答える
1

この質問を見てください、私はそれがあなたを助けることができると思います. Java を使用してテキスト ファイル内の文字列を検索する最速の方法

于 2013-03-02T15:43:34.083 に答える