之前想做一个利用艾宾浩斯遗忘曲线规律来背单词的小程序,但是不太知道这么做,参考查阅了很多文章,这里整理一下思路。
一、艾宾浩斯遗忘曲线
艾宾浩斯遗忘曲线的具体应用是利<复习点>来重复学习单词。
百度百科里面写的<复习点>分为八个周期,如下图:
其中,人的记忆周期分为短期记忆和长期记忆。
故,短期记忆周期:5分钟、30分钟、12小时。
长期记忆周期:1天、2天、4天、7天、15天。
在这里采用长期记忆这个周期来复习单词。
二、每个单词应该有两个重要的字段/属性,分别为<时间戳>、<学习次数>。
单词名称 | 单词释义 | ... | 时间戳 | 学习次数 |
---|---|---|---|---|
abandon | 放弃 | ... | 2023-2-10 | 0 |
时间戳:时间戳代表最近一次学习该单词的日期时间。(上次学习该单词的时间)
学习次数:用来表示对该单词的熟练程度。如下表。
0次 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
未学习 | 已学习1次 | 已学习2次 | 已学习3次 | 已学习4次 | 已学习5次 | 已掌握 |
三、艾宾浩斯实现的过程(一些思路)
所有单词初始的时间戳为空,学习次数为零。
1.用户选择单词本后,根据单词本的单词生成一个该用户的<单词列表>;
2.用户设置学习计划(例如,每日学习10个新单词,复习20个单词(复习的单词可不设置数量,即复习所有应复习单词))
3.用户每日学习时,应该根据<单词列表>生成<今日单词列表>、<需复习单词列表>。
<今日单词列表>应该随机从<单词列表>中抽取10个新单词(学习次数为0次),再从需复习单词(学习次数为1~5次)中随机抽取20个单词。
需复习单词的判断(重要!体现艾宾浩斯遗忘曲线的地方):
用户学习过单词后,学习次数+1,最高为6。根据时间戳、学习次数、当前日期来判断需复习单词。复习时间点( 1天、2天、4天、7天、15天 )
单词学习次数为1,当前日期 - 时间戳 > 1 天,该单词放入<需复习单词列表>。
单词学习次数为2,当前日期 - 时间戳 > 2 天,该单词放入<需复习单词列表>。
单词学习次数为3,当前日期 - 时间戳 > 4 天,该单词放入<需复习单词列表>。
单词学习次数为4,当前日期 - 时间戳 > 7 天,该单词放入<需复习单词列表>。
单词学习次数为5,当前日期 - 时间戳 > 15 天,该单词放入<需复习单词列表>。
考虑到用户不太可能都按规律学习,所以应该给单词熟练程度降级。(学习次数为1时,代表单词已学过,不再降级。学习次数为6时,代表已掌握,不再降级)
单词学习次数为1,当前日期 - 时间戳 > 1 天,该单词放入<需复习单词列表>。
单词学习次数为2,当前日期 - 时间戳 > 4 天,该单词学习次数 - 1 ,放入<需复习单词列表>。
当前日期 - 时间戳 > 2 天,该单词放入<需复习单词列表>。
单词学习次数为3,当前日期 - 时间戳 > 7 天,该单词学习次数 - 1 ,放入<需复习单词列表>。
当前日期 - 时间戳 > 4 天,该单词放入<需复习单词列表>。
单词学习次数为4,当前日期 - 时间戳 > 15 天,该单词学习次数 - 1 ,放入<需复习单词列表>。
当前日期 - 时间戳 > 7 天,该单词放入<需复习单词列表>。
单词学习次数为5,当前日期 - 时间戳 > 30 天,该单词学习次数 - 1 ,放入<需复习单词列表>。
当前日期 - 时间戳 > 15 天,该单词放入<需复习单词列表>。
四、用户学习进度以及单词的存储(一些想法)
用户的学习进度用单词的<时间戳>和<学习次数>来体现。
一开始我打算把用户单词数据保存在MySQL数据库中,但考虑到多个用户的单词数据保存,思路有些混乱,不知道数据库怎么设计比较好,所以采用一种其他的方式。
采用JSON格式或txt文本格式等来保存用户单词数据。个人认为JSON格式是一个比较好的方式。JSON(JavaScriptObject Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
1.这种文本数据可以存储在小程序的缓存文件中;也可以存储在服务器中,然后把该文件的路径添加到MySQL数据库的用户表中。
2.数据库中只保存单词本的单词,用户选择单词本后,就给他生成一个专属的单词数据文本文件。
3.用户每天学习时,先读取这些文本数据,结束后再写入新的文本数据。
其他:单词语音可以调用有道或扇贝的语音API。单词数据可以从这个链接获得GitHub - kajweb/dict: 英语字典 英语词库 字典词库 四级单词 六级单词 考研单词 雅思 托福 SAT GMAT TOEFL GRE
以上,就是我的一些思路和想法,如果有什么错误,欢迎大家指出。如果大家有其他的方式或思路来实现,欢迎大家指教。