我目前正在开发一个程序,为学生提供简单的拼写测试。它使用两个列表分别保存拼写和定义
e.g。
spelling = [(‘pen’, ‘chair’)]
definitions = [(‘a writing instrument’, ‘something you can sit on’)]
如果用户希望通过输入并将其添加到适当的列表中,可以将这些列表附加到程序中。
我对如何编写大部分程序感到满意,但我需要能够通过输入标记学生输入的答案,与列表中存储的单词相比较。学生在屏幕上显示定义(从列表中随机显示 - 总共显示20个问题的测试),然后期望为该匹配单词键入适当的拼写。然而,我所坚持的部分是标记需要与它们与正确拼写的接近程度有所不同。如果学生得到正确的拼写正确,它应该给他们5分,如果他们得到它大多是正确的一个小错误他们得到2分。如果他们收到重大错误,他们会获得0分。
有人可以帮我解决拼写标记吗?我想我需要list函数来打破这个词然后我有点不确定该怎么做,因为系统需要标记可以改变的单词(因为用户可以在列表中添加/删除它们)。
答案 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,它们没有标记)。