1

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

例如

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

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

如果用户需要,程序可以通过获取他们的输入并将其添加到适当的列表中来附加这些列表。

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

任何人都可以帮助我如何标记拼写吗?我想我需要 list 函数来分解单词,但是我有点不确定从那里做什么,因为系统需要标记可以更改的单词(因为用户可以从列表中添加/删除它们)。

4

3 回答 3

2

也许 Peter Norvig 的Python 拼写检查器可以帮助你。

我不知道人们能给你什么建议,因为“大部分正确,有小错误”的规则取决于你。

但看看 Norvig 的统计方法可能会有所启发。

于 2014-01-08T13:36:49.413 回答
1

您需要计算的是学生输入的单词与正确单词之间的Levenshtein 距离。在链接之后,您将找到对该主题的充分说明,包括指向派生算法的指针,例如Damerau-Levenshtein 距离

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

于 2014-01-08T13:38:54.483 回答
0

要比较两个序列(字符串是字符序列)并了解它们彼此之间的接近程度,您可以使用difflib 中的 SequenceMatcher及其 ratio() 函数。您可能需要进行一些测试以查看该比率是否对您的用例具有足够的代表性,并为您的每个分数确定一个阈值(例如,在 0.99 和 0.75 之间他们获得 2 分,低于 0.75 他们没有得分)。

于 2014-01-08T13:37:58.747 回答