QWERTY レイアウトで単語を入力するのがどれほど難しいかを判断するための、かなり単純なアルゴリズムを探しています。
単語は必ずしも辞書の単語であるとは限らないため、よくタイプミスする単語などのリストはオプションではありません。十分にテストされた既存のアルゴリズムがあるはずですが、何も見つかりません。
誰でも助けやアドバイスを提供できますか? 私は Python でアルゴリズムをコーディングしていますが、他の言語や疑似コードは大歓迎です。
QWERTY、Colemak、および Dvorak レイアウト間のこの比較では、Java のソース コードを使用して、入力されたキー間の距離、同じ手のキーの割合などを計算します。これらの測定基準を組み合わせることで、単語の「タイプ可能性」を非常に適切に見積もることができます。
提案するアルゴリズムはありませんが、いくつかのヒントがあります。
私は両手を使ってタイプします。つまり、キーボードは大まかに 2 つに分かれています。両手の調整に問題があることがよくあります。つまり、それぞれが「正しい」順序で文字を入力しているのに、インターリーブが間違っているということです。これは、一方の手でタイプする文字が他方よりも多い場合に特に当てはまります。典型的な例は、左手でタイプt
しe
、右手でタイプするため、「the」h
です。
「スリップ」は頻繁に発生します。つまり、多くの場合、キーを逃して別のキーを押すことになります。「追加」/「削除」も頻繁に行われます。つまり、補助キーを入力したり、十分に強く押さなかったりします --> これは、(明らかに) 文字が多いほど、単語を正しく理解するのが難しくなることを意味します。
大文字と小文字を混在させると難しくなります。CAPS を押してキーを押す間に同期が必要になるため、近くのキーの大文字/小文字が正しくない可能性があります。
お役に立てれば...
スクラブル セットを取り出し、各文字のスコアを書き留め、単語のスコアを合計します。これで、アルゴリズムが完成しました。要件を完全に満たすかどうかはわかりませんが、役立つ方向性を示している可能性があります。たとえば、個々の文字だけでなく、ダイグラムやトライグラムにもスコアを割り当てたい場合があります。
必要な情報の既存の情報源を知りません。おそらく、キーボードを調べて、より難しい文字に高いスコアを割り当てることで、独自の文字スコアを思いつくことができます。したがって、「a」は 1、「q」は 8 です。 '、'm' の場合は 2 など。
編集:SOに返信すると、通常よりも多くの人を混乱させたようです。私の提案の要点は次のとおりです。
a) 英語 (またはあなたの言語) で出現するトライグラムとディグラムをすべて挙げてください。それらのそれぞれに、タイピングの難易度スコアを割り当てます。個々の文字についても同じことを行います (結局のところ、4 文字の単語は、2 つのダイグラムではなく、トライグラムと 1 つの文字で構成されている可能性があります)。
b) 単語をタイプする難しさを、その構成要素をタイプする難しさの合計として採点します。
難易度のスコアについては、私にはわかりませんが、キーボードのホーム キーの文字の場合は 1、人差し指を使用するがホーム キーではない文字の場合は 2、文字の場合は 3 から始めることができます。手の 2 番目または 3 番目の指などを使用します。次に対字記号の場合、左右 (または右と左) の順番に簡単な文字の場合はスコアが低く、一方の手の難しい文字の場合はスコアが高くなります (たとえば、qz。ただし、これはおそらく英語には当てはまりません)。そして、あなたが行く。
マンハッタン距離アルゴリズムは、あなたが見ているものに最も近いと思います。このアルゴリズムは、ソースからターゲットまでの距離を四角形で考慮します。
Pythonでの実装に関しては、QWERTYでの特定の難しさの必要性のために、自分で作成する必要があります。そうしないと、「Pythonでnパズルソルバー」をグーグルで検索すると、マンハッタン距離の実装がほとんど見つかりません。