1

我正在编写一个允许用户设置个人测验的程序(如记事卡类型的系统)。参加测验时,用户会在每个问题上计时。答案不会是多项选择,它们将由用户输入。

有没有一种方法可以让我充分接受他们第一次设置测验时输入的不完整答案的答案?

例子

问:“谁是苏格拉底。”

A:“一位希腊哲学家。”


我考虑过使用类似的东西:

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

但这根本行不通。

有没有办法做到这一点?或者接近它的东西。

- -更新 - -

我最近刚刚遇到了一个在这方面表现出色的 Python 模块,它被称为 FuzzyWuzzy,这里有一个链接到它的描述以及它可以做什么http://seatgeek.com/blog/dev/fuzzywuzzy-fuzzy-string-在 python 中匹配

4

1 回答 1

5

这完全取决于您要做什么。您的尝试听起来像是在尝试匹配“希腊哲学家”的任何子字符串,因此“ee”将是正确答案。这听起来不对。

您可以为每个问题提供一组(或列表)可能的正确答案。对于您的示例,也许您也只会接受“哲学家”。

如果您想忽略拼写错误,您可以测试输入的内容是否与任何已知正确答案“接近”。这需要一个函数来计算匹配的接近程度。一种流行的方法是使用 Levenshtein Distance。看:

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 回答