[解決済み] スペルチェッカーで候補を出すアルゴリズムとは?
質問
単語候補を含むスペルチェッカーを実装する場合、一般的にどのようなアルゴリズムが使用されますか?
最初は、入力されたそれぞれの新しい単語を (辞書にない場合) その単語の レーベンシュタイン距離 に対してチェックし、上位の結果を返すという方法がいいのではないかと考えました。 しかし、これは、辞書全体を繰り返し評価する必要があり、非常に非効率的であるように思われます。
これは一般的にどのように行われるのでしょうか。
どのように解決するのですか?
あるのは Peter Norvig による良いエッセイがあります。 による、スペルチェックの実装方法に関する良いエッセイがあります。基本的には、与えられた編集距離を持つ候補文字列を試すブルートフォースアプローチです。( ここで を使用してスペルチェックのパフォーマンスを向上させる方法をいくつか紹介します。 ブルームフィルタ と より高速な候補ハッシュ .)
スペルチェッカーの要件はより弱いものです。ある単語が辞書に載っていないことがわかればよいのです。このため ブルームフィルタ を使って、より少ないメモリ消費でスペルチェッカーを構築することができます。古代のバージョンは プログラミングの真珠 Jon Bentley による、英語辞書に 64kb を使用したものです。
A BK-ツリー は別のアプローチです。素敵な記事は ここで .
Levenshstein 距離はスペルチェッカーに適した編集距離ではありません。それは、挿入、削除、および置換のみを知っています。転置は欠落しており、1 文字の転置に対して 2 を生成します (これは 1 削除と 1 挿入です)。 Damerau-Levenshtein 距離 が正しい編集距離です。
関連
-
[解決済み】パックマン:主にどのようなヒューリスティックが使われているのですか?
-
[解決済み] アルゴリズムAの実行時間は少なくともO(n²)である - なぜ無意味なのか?
-
[解決済み] 2進数が3で割れているかどうかを知るには?
-
[解決済み] グラフの隣接リスト表現の空間複雑性
-
[解決済み] 解いてみてください。T(n) = T(n-1) + n [重複] とする。
-
[解決済み] O(log n)とは具体的にどのような意味ですか?
-
[解決済み] ゲーム「2048」の最適なアルゴリズムとは?
-
[解決済み] 末尾再帰とは何ですか?
-
[解決済み] 抽象メソッドと仮想メソッドの違いは何ですか?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】whileループの時間複雑性とは?
-
[解決済み] どのようにすれば、ほとんどすべてのアルゴリズムを修正して、最良の場合の実行時間を持つようにできるか?
-
[解決済み] 素朴な」アルゴリズムとは何か、「閉じた」解とは何か?
-
[解決済み] 決定論的クイックソートとは何ですか?
-
[解決済み] 2つのNFAの交点の求め方
-
[解決済み] 放物線を点の集合にフィットさせる最速の方法?
-
[解決済み] 解いてみてください。T(n) = T(n-1) + n [重複] とする。
-
[解決済み] クロスワードを生成するアルゴリズム[クローズド]について
-
[解決済み] リストの並べ換えをすべて生成するアルゴリズム?
-
[解決済み] クイックソートとマージソートの比較 [重複]。