1

私は現在、学生向けの簡単なスペルテストを作成するプログラムを開発しています。2 つのリストを使用して、スペルと定義を別々に保持します。

例えば

spelling = [(‘pen’, ‘chair’)] 

definitions = [(‘a writing instrument’, ‘something you can sit on’)]

これらのリストは、ユーザーが入力を取得して適切なリストに追加することによって、必要に応じてプログラムによって追加できます。

プログラムの大部分をコーディングする方法には問題ありませんが、リストに保存されている単語と比較して、学生が入力を介して入力した回答をマークできる必要があります。生徒は画面に定義を表示され (リストからランダムに - 合計 20 の質問のテストが表示されます)、一致する単語の適切なスペルを入力することが求められます。しかし、私が立ち往生している部分は、マークが正しいスペルにどれだけ近いかを比較して、マークが異なる必要があるということです. 学生が正確なスペルを正しく理解できた場合、5 点が与えられます。軽微なエラーでほぼ正しい場合、2 点が与えられます。重大なエラーが発生した場合、0 点が与えられます。

スペルをマークする方法を手伝ってくれる人はいますか? 単語を分解するにはリスト機能が必要だと思いますが、システムが変更可能な単語をマークする必要があるため(ユーザーがリストから追加/削除できるため)、そこから何をすべきか少しわかりません。

4

3 に答える 3

2

Python での Peter Norvig のスペル チェッカーが役立つかもしれません。

「マイナーなエラーでほとんど正しい」というルールはあなた次第なので、人々があなたにどのようなアドバイスを与えることができるかはわかりません。

しかし、ノーヴィグの統計的アプローチを見ることは有益かもしれません。

于 2014-01-08T13:36:49.413 に答える
1

計算する必要があるのは、生徒が入力した単語と正しい単語の間のレーベンシュタイン距離と呼ばれます。リンクをたどると、 Damerau-Levenshtein 距離などの派生アルゴリズムへのポインタを含む、トピックの十分な解説が見つかります。

これらの標準アルゴリズムに加えて、アプリケーションですべての文字の挿入、削除、および変更または交換に同じペナルティを割り当てるかどうかを検討する必要がある場合があります。たとえば、-ise の代わりに -ize を使用すると、マイナー エラーまたは null エラーなどと見なされる可能性があります。

于 2014-01-08T13:38:54.483 に答える
0

2 つのシーケンス (文字列は文字のシーケンス) を比較し、それらが互いにどの程度近いかを取得するには、difflib の SequenceMatcherとその ratio() 関数を使用できます。おそらく、比率がユース ケースに十分に適しているかどうかを確認し、各評価点のしきい値を決定するためにいくつかのテストを行う必要があります (たとえば、0.99 ~ 0.75 の場合は 2 点、0.75 未満の場合は評価点がありません)。

于 2014-01-08T13:37:58.747 に答える