web-dev-qa-db-ja.com

自動修正はいつ行うべきですか?

タイプミスにもかかわらずキーワードを認識するためにレーベンシュタイン距離を使用していますが、タイプミスがまだタイプミスであるか、別の単語と見なす必要がある値まで疑問に思っています。入力を特定のキーワードと比較するだけなので、文法やコンテキストをまったく使用する必要はありません。

たとえば、「cat」と「bat」という単語のレーベンシュタイン距離は1ですが、これはタイプミスかもしれませんが、「cut」と「bat」の距離は2であり、おそらくユーザーが言いたいことではありません。 。

編集:ユーザーがキーワードを入力するつもりがないにもかかわらず、UXはキーワードが認識されるという問題を抱えています。たとえば、キーワード「サービス」は「サービス」または「サーブ」から認識される場合がありますが、「サーヴァント」からは認識されません。3つのタイプミスは少し多いです。しかし、どこに線を引くのですか? 「Servufe」はまだ「サービス」として認識されると予想されますか、それともユーザーがそれを認識する私のアプリケーションによってかなり混乱するでしょうか?.

単語が長くなるほどタイプミスが多くなる可能性があるため、入力を構成する4文字程度の文字ごとに1つのリーベンシュタイン「ポイント」を許可することを考えたが、それが有効な評価かどうかはわからない。

ネットでそのトピックについて何も見つけることができなかったので、Wordが認識されるためには、いくつのタイプミスを許可する必要がありますか?

5
WhiteMaple

大多数のユーザーのタイプミスに対して、編集距離は1または2で十分です(...しかし、この主題について言われるべきたくさん)

アルゴリズムについてa typo は、入力した単語がローカルディクショナリ内のどの単語にも対応しない場合、または現在の 文法コンテキスト に適合しない場合の誤植にすぎません。あなたの質問は次のとおりです。「自動修正はいつ行うべきですか?」これは 自然言語処理 の活発な研究分野です=明確な答えは1つもありません。 これ のように、この件に関する良い記事があります。著者は最初のアプローチを提案しています:

初歩的な、しかし強力に見えるスペル修正プログラムを作成することから始めます。これがアルゴリズムです。

  1. エラーWordが有効な英語かどうかを確認し、有効な場合はそれを返します。それ以外の場合は続行します。
  2. エラーワードから1編集距離離れたところにあるワードを見つけます。これは、コーパスで最も多く発生し、それを返します。何も見つからない場合は、次に進みます。
  3. エラーワードから2の編集距離内で有効なワードを見つけます。これは、コーパスで最も多く発生し、それを返します。見つからない場合は、続行します。
  4. スペル修正に失敗しました。Wordというエラーを返します。

いくつかの仮定を行っています。 最初に、単語がコーパスにある場合、それはエラーではないと仮定します。次に、編集距離がエラーモデルに影響を与える唯一の要因であると仮定します最後に、エラーが1または2の編集距離内でのみ発生すると想定しています。これはエラーの約75%が1つの編集距離内にあり、それらのほぼすべてが2つの編集距離内にあるため、悪い仮定です(後で説明するエラーのトレーニングデータに基づく)。

この場合、著者は距離2より上のすべてのエラーを真のエラーと見なします。 2回目の試行では、結果を改善するために確率論的エンジンを追加します(3回目の試行ではさらに改善されました)。彼の方法論は広範囲にわたっているのでここでは書きませんが、読む価値は十分あります。


この主題に関するいくつかの一般的な解説

構築しようとしているUIまたはソフトウェアのタイプを指定していません。ただし、 文字列メトリック の一般的な用途は次のとおりです。

これは文字列メトリックではなく、ユーザーに不明な単語やコンテキストを通知するために作成されたUIです。このUIは目的によって異なります。たとえば、 コマンドライン補完 (タブ補完とも呼ばれます)は、ユーザーが既に入力した内容と「現在のフォルダー」内のすべてのファイルに関するすべての互換性のある選択肢をループする単一のキーの非常に便利な使用法です。 (コマンドラインの典型的な「ローカル辞書」)。

enter image description here

ワープロ 単語を修正するために、はるかに複雑な辞書(例 Hunspell を参照)に依存します。彼らは通常、ユーザーが新しいWordでソフトウェアを更新できるようにするシステムも備えています(そのため、次回使用するときにエラーが発生しません)。たとえば、次のウィキペディアの説明を参照してください 辞書の使用(または使用しない)

Eatoniは辞書なしの曖昧性除去システムを提供していますが、従来の曖昧性除去は一般的に使用される単語の辞書を参照することで機能します。

辞書ベースのシステムでは、ユーザーが数字ボタンを押すと、アルゴリズムが辞書を検索して、キープレスの組み合わせに一致する可能性のある単語のリストを検索し、が最も可能性が高いchoiceユーザーは選択を確認して次に進むか、キーを使用して可能な組み合わせを循環できます

非辞書システムは、Word部分の統計から単語やその他の一連の文字を構成します。まだ入力されていないキーストロークの意図された結果の予測を試みるために、曖昧性除去をワード補完機能と組み合わせることができます。

どちらかのシステム(曖昧さ回避または予測)には、ユーザーデータベースを含めることができます。これは、「学習」としてさらに分類できます。システムwhen単語またはフレーズが直接userなしでユーザーデータベースに入力された介入。ユーザーデータベースは、事前に提供されたデータベースによって明確にされていない単語やフレーズを格納するためのものです。一部の曖昧性除去システムは、スペルの修正、テキストのフォーマット、またはその他の自動書き換えの実行をさらに試み、テキストを入力するユーザーの努力を強化またはイライラさせるリスクを伴います。

そうは言っても、私はあなたがありそうな選択肢のリストを作成し( Levenshtein distance でランク付け)、Wordがローカル辞書に存在しない場合にのみ修正することをお勧めします。ローカル辞書をユーザーの単語で更新するオプションを提供します(例 Office Wordでの方法 、または Android長押し を参照)。

辞書学習機能は、ユーザーの意図的なアクションによってアクティブにする必要がないことに注意してください。 この件に関する興味深い記事 を引用させてください。

最も基本的な形式では、キーボード予測は、時間をかけて入力したテキストを使用して、繰り返し入力した単語やフレーズのカスタムのローカル「辞書」を作成します。次に、それらの単語を、使用する確率または再び必要になる確率で「スコアリング」します。たとえば、「lifehacker」と入力し、キーボードでこれまでに使用したことがない場合は、可能性が高いと思われる別のフレーズに修正することを提案します(いいえ、「ライフジャケット」ではありません)。次の3つのオプションがあります。修正の1つを受け入れるか、Wordを無視してそのままにするか、または単語を個人用辞書に追加して、もう一度入力するときに邪魔にならないようにします。

修正を受け入れると、キーボードは明らかにWordが間違っていると想定し続け、将来的に修正を提供します。辞書に追加すると、キーボードはすぐに単語を「学習」し、次にそれらのキーに近いスペルパターンを入力したり、フレーズの前後に同様の単語を使用したり、「lifehacker。 」 Wordを無視すると、物事は面白くなります。優れた予測型キーボードは、行動の欠如を利用して入力習慣から学ぶことさえできます。 最初または2回目に単語を無視した場合、スペルミスではないが単語ではないと想定しますあなたは頻繁に使用します同様の使用パターンで提示されるのに十分です。無視する場合3回目または4回目(回数は特定のに依存します)keyboard)、キーボードはそれを将来の可能性のある選択肢としてマークし、同様の単語または文を入力すると、それを提示し始めます。

2
armatita

直接的な回答ではありませんが、この洞察がお役に立てば幸いです。

キーボードのレイアウトを検討することを検討します。文字ごとに、周囲のキーに基づいて発生する可能性のあるエラーまたはタイプミスの可能性があります。タイプミスは一般に、ユーザーが誤って周囲のキーを押したときに発生します。それ以外の場合は、スペルミスです。

ユーザーにいくつかの選択肢(携帯電話など)を与えることで、異常に遭遇する可能性があるため、システムによる誤った提案を排除できます。たとえば、cheeseと入力したかったのですが、タイプミスをしてchesseと入力しました。システムはこれをchessまたはcheeseに自動修正しますか?これは、システムが文のコンテキストを理解できない場合に役立ちます。

0
sclarke