在拼写测试中用Python标记不同等级的给定拼写

时间:2014-01-08 13:24:27

标签: python testing spelling

我目前正在开发一个程序,为学生提供简单的拼写测试。它使用两个列表分别保存拼写和定义

e.g。

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

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

如果用户希望通过输入并将其添加到适当的列表中,可以将这些列表附加到程序中。

我对如何编写大部分程序感到满意,但我需要能够通过输入标记学生输入的答案,与列表中存储的单词相比较。学生在屏幕上显示定义(从列表中随机显示 - 总共显示20个问题的测试),然后期望为该匹配单词键入适当的拼写。然而,我所坚持的部分是标记需要与它们与正确拼写的接近程度有所不同。如果学生得到正确的拼写正确,它应该给他们5分,如果他们得到它大多是正确的一个小错误他们得到2分。如果他们收到重大错误,他们会获得0分。

有人可以帮我解决拼写标记吗?我想我需要list函数来打破这个词然后我有点不确定该怎么做,因为系统需要标记可以改变的单词(因为用户可以在列表中添加/删除它们)。

3 个答案:

答案 0 :(得分:2)

也许Python中的Peter Norvig spell checker可以帮助你。

我不知道人们可以给你什么建议,因为“大多数纠正错误”的规则由你决定。

但是看看Norvig的统计方法可能具有指导意义。

答案 1 :(得分:1)

您需要计算的内容称为学生输入的单词与正确单词之间的Levenshtein distance。在链接之后,您将找到对该主题的充分阐述,包括指向派生算法的指针,例如Damerau-Levenshtein distance

除了这些标准算法之外,您可能还需要考虑是否要在应用程序中为所有字符插入,删除和更改或交换分配相同的惩罚。例如,使用-ize而不是-ise可以被视为次要或空错误等。

答案 2 :(得分:0)

要比较两个序列(字符串是字符序列)并获得它们彼此之间的距离,您可以使用SequenceMatcher from difflib及其ratio()函数。您可能需要进行一些测试,以确定该比率是否足以代表您的用例并确定每个标记的阈值(例如,在0.99和0.75之间,它们得到2个标记,低于0.75,它们没有标记)。