2

[編集] 要するに: どのように自動スペル チェッカーを書きますか? これは、チェッカーが既知の適切な情報源 (辞書) から単語のリストを作成し、十分に頻繁に使用される新しい単語を自動的に追加するというものです。しばらく使われていない言葉は、段階的に廃止されるべきです。そのため、"Mungrohyperofier" を含むシーンの一部を削除すると、チェッカーはしばらくそれを記憶し、別のシーンで "Mung<Ctrl+Space>" と入力すると、再び提供されるはずです。私がその言葉を数日間使わなければ、忘れてしまうはずです。

同時に、辞書にタイプミスを追加することは避けたい.[/EDIT]

SF ストーリー用のテキスト エディターを書きたいと思っています。エディターは、現在のストーリーのどこかで使用されている単語の単語補完を提供する必要があります。編集用にストーリーの 1 つのシーンのみを提供します (そのため、シーンを簡単に移動できます)。

これは、次の 3 つのセットがあることを意味します。

  1. 他のすべてのシーンのすべての単語のセット
  2. 編集を開始する前の現在のシーンの単語のセット
  3. 現在のエディタ内の単語のセット

毎回最初からリストを作成するにはコストがかかりすぎるため、セットをどこかに保存する必要があります。そのためには、1行に1語の単純なプレーンテキストファイルで十分だと思います。

ユーザーがシーンを編集すると、次のような状況になります。

  1. 彼女は単語を削除します。この単語は、現在のシーンの他の場所では使用されていません。
  2. 彼女は新しい単語をタイプする
  3. 彼女はすでに存在する単語を入力します
  4. 彼女はすでに存在する単語を入力するが、タイプミスをする
  5. 彼女はセット #2 にある単語のタイプミスを修正します。
  6. 彼女はセット #1 にある単語のタイプミスを修正します (つまり、タイプミスは他の場所にもあります)。
  7. 彼女は、もう一度使う予定の単語を削除します。ただし、削除後、その単語はセット #1 と #3 にはありません。

明らかな戦略は、シーンを保存するときに単語セットを再構築し、シーンごとの単語リスト ファイルからセット #1 を構築することです。

私の質問は次のとおりです。もはやどこでも使用されていないが、タイプミスを段階的に減らすことができる単語を保持するための巧妙な戦略はありますか? 可能であれば、この戦略は、ユーザーが何が起こっているかに気付かずにバックグラウンドで機能する必要があります (つまり、マウスをつかんでメニューから「単語を辞書に追加」を選択する必要がないようにしたい)。

[編集]悲しみからのコメントに基づく

4

3 に答える 3

2

したがって、スペル チェックを書きたいとします。これは、スペル修正子の作成に関する Peter Norvig の論文です。シンプルで堅牢なスペル修正プログラムについて説明します。本の既読部分に加えて、言語モデルの参照リスト (無料の辞書など) を使用できます。また、 aspellhunspellなどの既存のオープンソースのスペル チェッカーにアクセスして、アイデアを得ることもありました。

于 2008-12-03T08:49:53.150 に答える
0

現代のLISP実装でのガベージコレクションについて私が言われたことを思い出させます:

作成時のデータは「プール1」に入れられ、

ガベージコレクターをガベージコレクションする必要がある場合は、プール1で未使用のエントリを探し、それらを削除します。

次に、残りのエントリはプール2に移動されます。

プール2は、プール1が解放できるよりも多くのメモリが必要な場合にのみ検査されます。

ガベージコレクションを生き残ったプール2からのデータは、プール3などに配置されます。

アイデアは、その存続期間に対応するプールにデータを動的に配置することです...

于 2008-12-02T21:20:52.463 に答える
0

使用すべき構造はトライです。テール/サフィックスの圧縮はメモリに役立ちます。使用状況を追跡するために、疑似参照カウント GC を使用できます。

実際のノードについては、おそらく 32 ビット整数、Unicode 用に 21 ビット、その他のさまざまなタグや情報用に残りを必要とします。

于 2008-12-02T16:00:31.363 に答える