2017-01-11 10 views
5

私は、ユーザーが特定のフレーズ/文/単語/単語をどれだけ正確に入力したかを検出する関数を作成しようとしています。私の目的は、特定のフレーズのユーザーの入力精度を訓練するためのアプリを構築することです。タイピング精度を測定するのにどの文字列距離アルゴリズムが最適ですか?

私の最初の本能は、(それは私が私の頭の上をオフに知っていただけアルゴだ主な理由は)基本的なレーベンシュタイン距離アルゴリズムを使用することです。

しかし、もう少し研究の後、私はJaro-Winklerが原因で転位のためにその対価のもう少し面白いなアルゴリズムであることがわかりました。

が、私もこれらのアルゴリズムの違いについて語っリンクが見つかりました:それぞれのWikipediaの記事に加えて、

Difference between Jaro-Winkler and Levenshtein distance?

はすべてのことを読んだが、私は、アルゴリズムに、わずか無知はまだしています私の目的は最高です。

答えて

4

あなたがタイピングの品質をグレーディングしている、とあなたはゼロ間違いを犯すために学生を訓練したいので、それはあまり寛容であるので、あなたは、レーベンシュタイン距離を使用する必要があります。

さらに、レーベンシュタインスコアがJARO-ウィンクラーの結果よりも、グラフィカルに表現するために、より直感的に理解すること、そして簡単です。 Levenshteinアルゴリズムを変更して、挿入、削除、ミスタイプを個別に報告し、エンドユーザーに修正リストを表示することができます。一方、Jaro-Winklerは、途中でのスペルミスのペナルティが最後のペナルティよりも低くなるため、エンドユーザーには表示しにくいスコアを与えます。

3

ちょっと舌であるが、ほんのわずかである:右の文字を打つ確率が高い(前の)タイプを生成するための生成モデルを構築し、隣接する2つのキーを一度に打つ確率を配分する。誤った順序の異なる手、間違った順序の同じ手からの2つの鍵、正しいものの近くの鍵、正しいものから遠い鍵など。あるいは、あまりアドホックではありません。あなたのモデルに与えられた確率通行を続けるために必要な現在のキーの対が与えられたときのキー押下のシーケンス。あなたはそのようなモデルで多くのことをすることができます。たとえば、学習者の実際のパフォーマンスの可能性スコアを与えることによって、「距離」のような指標を得ることができます。しかし、何よりも多くのエラーが発生したときに、そのエラーをどのように単一の数値に沸騰させるのがよいのかをまとめたレポートを提供することがさらに効果的です。実際のタイピストの仕事の大きなコーパスからのさまざまな種類のエラーの可能性を学ぶならば、ボーナスポイント。

+0

オープンソースプロジェクトの素晴らしいアイデアのようです。あなたはレポを開始します、私は貢献します。 – adrianmc

+0

私はエラー報告のアイデアの概要が好きです。私の入力のために私はエラーがあると推測するでしょう: 1)別々の手から間違った文字の順序。 "近い言葉" に 2)スペルミス、 'ロン' - '実行'> '' RUN」 3)サフィックスの追加は - > 'を実行' –

1

私はほとんどがdasblinkenlightの答えに同意しますが、転位を含むLevenshteinだけでなくDamerau-Levenshtein distanceを使用することをお勧めします。トランスポーズは入力中にかなり頻繁に起こりやすく、他の可能なエラー(挿入、削除、置換)に関して倍長ペナルティが発生する理由はありません。

関連する問題