2

非常に単純なスペル チェッカーを書きたいと思います。スペル チェッカーは、入力された単語を辞書にある同等の単語と照合しようとします。

それらの「同等の単語」を見つけるにはどうすればよいでしょうか? 2 つの単語が同等であることを示すには、どのような分析を行うことができますか?

4

5 に答える 5

5

あまりにも多くの投資をして解明しようとする前に、主に 2 つの理由から、Aspellnetspellなどの既存の実装に目を向けます。

  1. 車輪の再発明にはあまり意味がありません。スペル チェックは、最初に表示されるよりもはるかにトリッキーであり、既に行われた作業に基づいて構築することは理にかなっています
  2. その方法を知りたい場合は、ソース コードとコミュニティが非常に役立ちます。
于 2009-04-30T13:25:53.647 に答える
3

ユースケースに大きく依存します。例えば:

  • あなたの辞書は非常に小さい (約 20 語) ですか? この場合、近くにある可能性のあるすべての間違った単語を事前に計算し、テーブル/ハッシュ ルックアップを使用することをお勧めします。
  • あなたのエラーモデルは何ですか?Aspell には少なくとも 2 つの機能があります (1 つはキーボード上の近くの文字によるスペル ミス用で、もう 1 つは単語の発音によるスペル ミス用です)。
  • あなたの辞書はどれくらい動的ですか?効率的な回収を行うために大がかりな準備をする余裕はありますか?
  • 編集距離に加えて、Double Metaphoneのような「単語の同等性」の尺度が必要になる場合があります。
  • Peter Norvig のスペル修正に関する優れた説明を読むと、ある程度の感覚をつかむことができます。
  • そしてもちろん、可能な限りコードを盗みます。理由なしに車輪を再発明しないでください。理由は、非常に特殊なドメイン、ユーザーがスペルミスを犯す特殊な方法、または単にその方法を学ぶためである可能性があります。
于 2009-04-30T13:47:48.167 に答える
1

スペルチェッカーの実装を終えたばかりで、次の組み合わせを使用して「推奨される」単語のリストを取得しました

  • 「つづりが間違っている」単語の音声ハッシュを使用して、実際の単語をハッシュした同一の辞書のハッシュを検索します (適切なライブラリについては、Apache Commons Codec を参照してください)。辞書ファイルの音声ハッシュは事前に計算できます。
  • 入力とポテンシャルの間の距離を編集します (これはかなりコストがかかるため、より高いボリューム負荷を想定して、音声ハッシュのようなもので最初にリストを減らす必要があります - 私の場合は、サーバーベースのスペルチェック)
  • receive と receive など、よくあるスペルミスの既知のリスト。
  • 英語で最も一般的な単語の順序付きリスト

基本的に、主に編集距離と共通性に基づいて、各潜在的な単語に重みを付けました。たとえば、単語の確率がパーセンテージの場合、

weight = edit-distance *  100 / probability

(重量は低い方が良い)

ただし、既知の一般的なスペルミスのある結果も上書きします (つまり、これらは常に提案された結果の一番上に表示されます)。

もっと良い方法があるかもしれませんが、これはかなりうまくいきました。

また、すべて大文字の単語やイニシャルなどを無視したい場合もあるため、無視するものを選択することも検討する必要があります.

于 2009-04-30T13:50:08.987 に答える
1

Edit Distanceは、スペル チェッカーを作成するために必要な理論です。辞書も必要です。ほとんどの UNIX システムには、使用しているロケール用の辞書が既にインストールされています。

于 2009-04-30T13:27:02.850 に答える
0

linux / unixの下には、ispellがあります。なぜ地獄を再発明するのか。

于 2009-04-30T13:43:31.873 に答える