Python 测验 - 如何接受大部分正确的答案
我正在写一个程序,让用户可以设置个人的测验(就像记忆卡片的系统)。在做测验的时候,用户会对每个问题进行计时。不过,答案不是选择题,而是用户自己输入的。
我想知道有没有办法可以接受那些不完整的答案,也就是用户在设置测验时输入的答案不需要完全一致。
举个例子
问:“苏格拉底是谁?”
答:“一个希腊哲学家。”
我考虑过使用一些方法:
if input in answer:
print "That's correct."
但这样根本不行。
有没有可能做到这一点?或者有什么接近的办法。
---更新---
我最近发现了一个很棒的Python模块,能很好地做到这一点,叫做FuzzyWuzzy,这里有一个链接,介绍它的功能和用法 http://seatgeek.com/blog/dev/fuzzywuzzy-fuzzy-string-matching-in-python
1 个回答
这要看你具体想做什么。你提到的尝试听起来像是想匹配“一个希腊哲学家”的任何子字符串,所以“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/
更新
莱文斯坦距离适合用来处理不准确的拼写。但如果你想接受不同的短语,比如“来自古希腊的哲学家”,那就需要另一种方法。如果你真的有兴趣,可以尝试使用NLTK,Python的自然语言工具包来实现一种模糊短语匹配的方法,试着匹配词性而不是完全匹配提供的短语。要注意,这并不简单。