Cでスペルチェッカーを実装する必要があります。基本的に、すべての標準操作が必要です...テキストのブロックをスペルチェックし、単語の提案を行い、新しい単語を動的にインデックスに追加できる必要があります。
自分で書きたいのですが、どこから始めたらいいのかわからないです。
Cでスペルチェッカーを実装する必要があります。基本的に、すべての標準操作が必要です...テキストのブロックをスペルチェックし、単語の提案を行い、新しい単語を動的にインデックスに追加できる必要があります。
自分で書きたいのですが、どこから始めたらいいのかわからないです。
Tree Traversalを読んでください。基本的なコンセプトは次のとおりです。
非常に短い例:
辞書:
apex apple 任命 任命
ツリー: (*
単語の有効な末尾を示します)
更新:このデータ構造がパトリシア ツリーと呼ばれることを指摘してくれた Curt Sampson に感謝します
A -> P -> E -> X*
\\-> P -> L -> E*
\\-> O -> I -> N -> T* -> E -> D*
書類:
りんご appint サル
結果:
A -> P -> P
が、2 番目には子ノードP
がないI
ため、検索は失敗します。
E
のノードにA -> P -> E
は「有効な単語の終わり」フラグが設定されていない
ため、「ape」も失敗します。編集:スペル候補の詳細については、レーベンシュタイン距離を調べてください。これは、ある文字列を別の文字列に変換するために必要な変更の最小数を測定します。最適な提案は、スペルが間違っている単語までのレーベンシュタイン距離が最も小さい辞書の単語です。
どこから始めればよいかわからない場合は、既存のソリューションを使用することをお勧めします。たとえば、aspell (GLPLライセンス)を参照してください。本当に自分で実装する必要がある場合は、その理由を教えてください。
接頭辞と接尾辞に注目する必要があります。
突然=突然+ly。
ly を削除すると、ルート ワードだけを保存する必要がなくなります。
同様に、事前割り当て = 事前 + 割り当て。
そして、愛情を込めて = love + ing + lyは、英語のing のルールが適用されるため、もう少し複雑になります。
また、ルート ワードの綴りが正しいかどうかを判断する一定時間の方法として、ルート ワードを特定のビット マップにマッピングするために何らかのハッシュ関数を使用する可能性もあります。
スペルミスのある単語に、可能な正しいスペルの代替リストを提供しようとすると、さらに複雑になる可能性があります。いくつかのアイデアを得るために、soundex アルゴリズムを調査することができます。
小さな単語セットでプロトタイピングすることをお勧めします。多くのテストを行ってから、スケールアップします。素晴らしい教育問題です。
単語を語根と接尾辞に分割することは、「Porter Stemming Algorithm」として知られています。これは、英語の辞書を驚くほど小さなメモリに収める良い方法です。
「スペルチェック」も「スペルチェック」や「スペルチェック」もしてくれるので検索にも便利です
Open Office スペル チェッカー Hunspell は、出発点として適しています。ホームページはこちら: Hunspell at Sourceforge