1

ユーザーが個人的なクイズを設定できるようにするプログラムを書いています (ノートカード型システムのようなものです)。クイズを受けるとき、ユーザーは各質問の時間を計られます。ただし、回答は多肢選択式ではなく、ユーザーが入力します。

彼らが最初にクイズを設定したときに入力した入力の完全な回答ではない回答を十分に受け入れることができる方法はありますか?

Q:「ソクラテスとは?」

A: 「ギリシャの哲学者です。」


私は次のようなものを使用することを考えました:

if input in answer:
    print "That's correct."

しかし、それはまったく機能しません。

これを行う方法はありますか?またはそれに近い何か。

- -アップデート - -

私は最近、これを行うのに優れたPythonモジュールに出くわしました。それはFuzzyWuzzyと呼ばれ、ここにその説明へのリンクがあります。マッチングインパイソン

4

1 に答える 1

5

それはあなたがやろうとしていることによって異なります。あなたの試みは、「ギリシャの哲学者」の部分文字列と一致させようとしているように聞こえるので、「ee」が正しい答えになります。それは正しく聞こえません。

各質問に対して可能な正解のセット (またはリスト) を作成できます。あなたの例では、「哲学者」だけを受け入れるかもしれません。

スペルミスを無視したい場合は、入力されたものが既知の正解に「近い」かどうかをテストできます。これには、一致がどれだけ近いかを計算する関数が必要です。一般的なアプローチは、レーベンシュタイン距離を使用することです。見る:

http://en.wikipedia.org/wiki/Levenshtein_distance
http://en.wikibooks.org/wiki/Algorithm_implementation/Strings/Levenshtein_distance
http://code.activestate.com/recipes/576874-levenshtein-distance/
http: //pypi.python.org/pypi/python-Levenshtein/

アップデート

不正確なスペルを許可したい場合は、Levenshtein Distance が適しています。しかし、「古代ギリシャの哲学者」など、別のフレーズを許可したい場合は、別のアプローチが必要です。本当にやる気がある場合は、NLTK (Python 用の自然言語ツールキット)を使用して、提供された正確なフレーズではなく、品詞を一致させるタイプのファジー フレーズ マッチングを実装してみてください。これは些細なことではないことに注意してください。

于 2013-02-03T01:48:43.623 に答える