[2015.3.25]自制遗忘曲线单词复习工具(自知非常简陋,求别喷),求交流,求改进建议,意见和思路

由本社区发起的开源项目
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

[2015.3.25]自制遗忘曲线单词复习工具(自知非常简陋,求别喷),求交流,求改进建议,意见和思路

#1

帖子 科学之子 » 2014-06-01 1:25

设计这个小程序的目的是因为我英文太差了,但又想折腾linux系,所以设计了这个单词复习工具.
因为水平有限,整个程序非常简单,功能也很简陋,目前只能进行"看释义拼写单词"复习,"看单词回想释义"复习.
连发音都没有.

也不知道自己是不是造轮子,是否存在这样的免费工具呢?
网上搜索到的都是收费的.
而且我感觉我的工具和他们还有一些区别,我的工具的特点就是遗忘曲线并不是由程序统计生成,而是直接让用户估计自己能记忆多久时间.
main.h中定义了一些宏,是用来处理相关文件的命令,这些命令是用来查看"cat ",编辑"leafpad ",删除"rm "文件用的
main.c中硬编码了工作路径和相关文件(为了尽可能简单,所有配置文件都是尽可能硬编码的,但硬编码可以方便的转变为软编码)
主要原理就是遗忘曲线,用户输入期望记忆的时长,到了时间后就推荐给用户复习,如果没到时间就推荐一个最接近复习时间的单词.

就说这么多了,下面就请各位积极讨论,交流,多谢各位.
(为方便阅读,补充变为逆序(最后边的补充是最早的.))
Wed Mar 25 21:06:37 CST 2015:
最主要的更新是增加了单词发音(调用系统中的音频播放器).
另一个就是增加了"自动轻松复习",可以闲着没事就听,加强印象.
其余修改详见附件中的更新日志.
Sat Oct 25 17:15:22 CST 2014补充:
主要更新:
增加单词统计功能
修复了一些错误.
Sat Oct 25 16:58:45 CST 2014:
结构(内部流程)改进:
如果用户选择忘记,则期望时长会被重置为1,就像新增单词的默认值一样.
以前则是0,导致总是立即复习该被遗忘单词.
Fri Oct 17 22:28:45 CST 2014:
功能改进:
增加单词统计功能,可以统计数值上的遗忘和记住状态
功能修正:
综合复习时最佳单词判断修正.
被修复的错误:
原来把"小于等于"写成了"大于等于",导致综合复习推荐的单词异常.
该错误不影响单纯的"辨认"和"拼写"推荐
其余更新信息详见附件更新日志.
Thu Sep 25 19:26:54 CST 2014补充:
主要更新:增加了综合复习(拼写和辨认放在一起混合进行)
其余更新信息详见附件更新日志.
Fri Sep 12 01:50:08 CST 2014补充:
若干的代码重构
当复习到没有单词被遗忘时会提示用户(目的是让用户进行其它有意义的事情,比如增加一些新单词之类)
详细更新日志见附件的文本文件
也不写第几次更新了,感觉都乱了...直接写出更新时间就是了
Sun Jul 27 03:24:10 CST 2014:
改进1:
改进复习方式.
复习时不再要求用户直接输入估算时间,而是自动统计和累计用户的记忆保持时长.
如果用户认为自己记住某单词,该单词的本次记忆时长(上次复习到现在的时间),会被自动累计到下次的期望记忆时长.
改进2:
give_user_review.c中的模块被用宏替换的方式重构
清屏代码也被重构
本次发布没有经过充分测试,为了方便交流,提前发布.
但我自己使用时没发现什么问题
Fri Jul 4 19:48:52 CST 2014补充:
第17次修改
改进单词推荐方式.
改进1:
在计算距离遗忘临界点的距离时,采用按比例的方式进行计算.
比如A单词期望记忆100秒,B单词期望记忆1000秒.
B已经过去500秒(距离忘记剩余500秒),A刚刚添加,剩余100秒(距离遗忘剩余时间大于50秒)
这时B会被优先推荐给用户,因为B遗忘的比例更大.
改进2:
在有单词被忘记时,会先复习那些(数值计算上认为)被忘记且按比例最接近遗忘临界点的单词.
已经记住的单词要等到超过遗忘临界点(数值计算上认为被遗忘)时,会被推荐给用户.
如果所有单词都是被记住的,则选取一个按比例最接近遗忘临界点的被记住的单词.
改进3:
如果某单词期望的辨认(或拼写)记忆时长为0,则该单词总是会被立即推荐给用户.

改进1主要是目的是避免无意义的过度复习,使复习时间得到有效的利用.
改进2主要是目的是迫使那些被记住的单词更加接近遗忘临界点,同时避免改进1导致被遗忘单词遗忘程度(距离遗忘临界点)超过100%时,不论被记住单词记忆多么牢固,都不去复习被忘记的单词.
Fri Jun 20 16:04:17 CST 2014补充:
为了节省论坛服务器的存储空间,本帖附件只上传最新版本.
需要老版本的可以联系我以其它方式获取.
Wed Jun 18 21:13:29 CST 2014补充:
上传了第15次修改,修复了一些BUG,已经使用方式上的改变.(详见附件中的更新日志)
附件
遗忘曲线单词复习源码_实时备份.7z
(20.59 KiB) 已下载 435 次
上次由 科学之子 在 2015-03-25 21:10,总共编辑 13 次。
头像
realrealjerry
帖子: 876
注册时间: 2010-04-26 11:29
来自: 北落师门

Re: 自制单词复习工具(自知非常简陋,求别喷),求交流,求改进建议,意见和思路

#2

帖子 realrealjerry » 2014-06-01 11:49

记得胡正好像写过一个“黑客背单词”什么的
头像
只是说
帖子: 1140
注册时间: 2012-03-12 22:44
系统: 贱兔
来自: 株洲

Re: 自制单词复习工具(自知非常简陋,求别喷),求交流,求改进建议,意见和思路

#3

帖子 只是说 » 2014-06-01 20:58

mark...
我的博客
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

Re: 自制单词复习工具(自知非常简陋,求别喷),求交流,求改进建议,意见和思路

#4

帖子 科学之子 » 2014-06-18 21:24

realrealjerry 写了:记得胡正好像写过一个“黑客背单词”什么的
我写这个工具的主要目的是为了能继续折腾linux.
貌似那个"黑客背单词"没有"遗忘曲线".

我写这个程序的目的是为了避免"过度无用复习"和"彻底遗忘之后完全重新复习".
和常见的按照遗忘曲线复习程序不同,我的程序完全由用户"自己估计自己能记忆多久".
程序会选择一个最接近遗忘临界点的单词给用户复习.
"选择一个最接近遗忘的单词进行复习",这个和许多单词复习软件相同.
只是细节不同,我见过的都是通过询问用户是否记得,统计用户的记忆能保持多久.
再有就是直接基于"熟悉程度"的选择,而不是基于时间.
比如单词A能记忆1小时,单词B只能记忆5分钟.
再次复习时,A正好接近遗忘时间(B因为复习频率高,5分钟总是被重复计算,结果会导致A在有些时候保持时间小于B),如果不复习A,则A会被遗忘,复习之后A得到巩固.
但如果这时候按照"熟悉程度最低"进行选择,B被推荐给用户复习,结果是B没有在近似最佳时间(遗忘临界点)复习,A的遗忘程度加深.
当然,这只是举个例子,意思是只挑选最接近遗忘临界点的单词进行复习.
Fri Jun 20 14:51:55 CST 2014补充:
"但如果这时候按照"熟悉程度最低"进行选择,B被推荐给用户复习,结果是B没有在近似最佳时间(遗忘临界点)复习,A的遗忘程度加深."
表述的可能不是很准确,我的意思是B距离遗忘临界点比A更远,同样的复习,A,取得的效果要比B更好.
也就是目标是尽可能记住那些能记住的,那些记不住的,要么等其它单词记忆的更牢,轮到它,要么用户就要重新添加该单词了.
上次由 科学之子 在 2014-06-20 15:17,总共编辑 1 次。
muhowch
帖子: 37
注册时间: 2014-05-18 21:25
系统: Ubuntu 14.04 LTS

Re: [第15次修改]自制遗忘曲线单词复习工具(自知非常简陋,求别喷),求交流,求改进建议,意见和思路

#5

帖子 muhowch » 2014-06-19 9:10

如果能用有道的单词本就好了
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

Re: [第15次修改]自制遗忘曲线单词复习工具(自知非常简陋,求别喷),求交流,求改进建议,意见和思路

#7

帖子 科学之子 » 2014-06-19 18:29

Lavande 写了:建议放在语境里记忆
放在语境里记忆?什么意思?
可否举例?
Thu Jun 19 18:51:01 CST 2014补充:
意思是结合实践?嗯,针对单词的学习只是基础和辅助.
头像
Lavande
论坛版主
帖子: 5352
注册时间: 2008-12-21 15:27
来自: TARDIS

Re: [第15次修改]自制遗忘曲线单词复习工具(自知非常简陋,求别喷),求交流,求改进建议,意见和思路

#8

帖子 Lavande » 2014-06-20 10:46

我说的语境是指单词出现的上下文,比如例句、段落、文章,甚至是使用的场合
“单词--释义”这种方式很多情况下虽然记住了但还是白搭,等真正碰到这个词时候很可能想不起来,更不用说自己使用了
一个人的词汇量有两种,一种是看到了能认识但是自己说话写作时不会用的,一种是不仅认识而且自己还能用上的,lz可以考虑一下这个问题
另外,不太能理解“自己估计能记忆的时间”这个说法。。。比如我看了一个单词,我哪里能知道我能记住多久啊,当然希望记得越久越好……
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

Re: [第15次修改]自制遗忘曲线单词复习工具(自知非常简陋,求别喷),求交流,求改进建议,意见和思路

#9

帖子 科学之子 » 2014-06-20 15:24

Lavande 写了:我说的语境是指单词出现的上下文,比如例句、段落、文章,甚至是使用的场合
“单词--释义”这种方式很多情况下虽然记住了但还是白搭,等真正碰到这个词时候很可能想不起来,更不用说自己使用了
一个人的词汇量有两种,一种是看到了能认识但是自己说话写作时不会用的,一种是不仅认识而且自己还能用上的,lz可以考虑一下这个问题
另外,不太能理解“自己估计能记忆的时间”这个说法。。。比如我看了一个单词,我哪里能知道我能记住多久啊,当然希望记得越久越好……
“单词--释义”里面可以写上语境和上下文,例句(当然考虑阅读方便,释义不应该太长),最好的方法还是简单释义(释义可以是灵活的,比如简单写明语境用法,而不是死板的词对词转换),配合实践,不然感觉就像"纸上谈兵".
感觉我的这个程序就是加强基础,真正的理解力不去语境中(比如多看英文资料)努力锻炼,也是不行的.

"自己估计能记忆的时间",这个感觉就是个人感觉,不能欺骗自己,要实事求是的用直觉估计自己能记忆多长时间.
如果非要套用一些量化标准,就参考通用的遗忘曲线(搜索遗忘曲线即可了解更多)啦,不过这个通用遗忘曲线并非适合每一个人.
其实我感觉量化标准是没有必要的,时间长了,就知道自己大约能记忆多久了.
如果这次忘记了,就估计少一点时间,如果记住了,就正常估计,如果感觉记忆很清晰,就进行乐观估计.
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

Re: [第17次修改]自制遗忘曲线单词复习工具(自知非常简陋,求别喷),求交流,求改进建议,意见和思路

#10

帖子 科学之子 » 2014-07-05 2:01

:em11 更新了一下,感觉效果应该明显一些.
自顶一下,避免更新了还没人知道,看有没有人反馈一下效果.
buntutu
帖子: 65
注册时间: 2009-11-25 1:38

Re: [第15次修改]自制遗忘曲线单词复习工具(自知非常简陋,求别喷),求交流,求改进建议,意见和思路

#11

帖子 buntutu » 2014-07-05 8:46

科学之子 写了: “单词--释义”里面可以写上语境和上下文,例句(当然考虑阅读方便,释义不应该太长),最好的方法还是简单释义(释义可以是灵活的,比如简单写明语境用法,而不是死板的词对词转换),配合实践,不然感觉就像"纸上谈兵".
感觉我的这个程序就是加强基础,真正的理解力不去语境中(比如多看英文资料)努力锻炼,也是不行的.
所谓语境,就是你到搜索网站搜索单词,然后保存这些单词在实际应用中的例句(搜索结果),在显示单词的时候显示相应的结果,所谓联想记忆是也。

其实步骤很直接:下载单词搜索结果,下载搜索结果网页,在结果网页中,把单词所在句子提取出来,取消重复的句子,选取5 - 10个句子保存下来作为例句。

当然这种文本操作使用 C 编写还是比较痛苦的,python,ruby之类的工具,也就是七八十行代码的工作。
ubunbates
帖子: 120
注册时间: 2014-04-30 15:44
系统: linux

Re: [第17次修改]自制遗忘曲线单词复习工具(自知非常简陋,求别喷),求交流,求改进建议,意见和思路

#12

帖子 ubunbates » 2014-07-05 9:40

遗忘曲线, 有个开源的库可以用.
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

Re: [第15次修改]自制遗忘曲线单词复习工具(自知非常简陋,求别喷),求交流,求改进建议,意见和思路

#13

帖子 科学之子 » 2014-07-05 18:37

buntutu 写了:
科学之子 写了: “单词--释义”里面可以写上语境和上下文,例句(当然考虑阅读方便,释义不应该太长),最好的方法还是简单释义(释义可以是灵活的,比如简单写明语境用法,而不是死板的词对词转换),配合实践,不然感觉就像"纸上谈兵".
感觉我的这个程序就是加强基础,真正的理解力不去语境中(比如多看英文资料)努力锻炼,也是不行的.
所谓语境,就是你到搜索网站搜索单词,然后保存这些单词在实际应用中的例句(搜索结果),在显示单词的时候显示相应的结果,所谓联想记忆是也。

其实步骤很直接:下载单词搜索结果,下载搜索结果网页,在结果网页中,把单词所在句子提取出来,取消重复的句子,选取5 - 10个句子保存下来作为例句。

当然这种文本操作使用 C 编写还是比较痛苦的,python,ruby之类的工具,也就是七八十行代码的工作。
直接在释义当中手工添加例句好了.
不过我在编写这个工具以前(包括现在),查单词都是从来不看例句的,因为根本就看不懂,感觉毫无意义的样子.
如果是找语言的感觉,我觉得去看英文文档之类的实践更有效过,毕竟例句中的语境我不一定能碰到.
联想记忆时个人还认为要注意避免"假记忆",假记忆就是在学习环境中看起来效果很好,但实际应用起来就因为各种原因导致无法回忆.
下面我搜到的"假记忆"的相关介绍
非正式关联效应:这种现象常见于运用“分组减负记忆法”的朋友,由于把单词分成10至50个一批的小组进行记忆,形成了一个特殊的词汇组合环境,在这个环境中,只要见到一个词,就很容易想起组内的另一些词,因而形成一种实际应用中不存在的非正式关联效应,使得记忆变得似乎很容易,但这种非正式的关联效应在实际应用中,却并不存在,因而不再起作用,所以似乎已经熟记的记忆并不能有效的得到唤醒。

顺序记忆效应:这种现象常见于按固定的顺序背单词的朋友,由于总是把单词按固定的顺序进行记忆,便形成前后单词的非正式相互关联,当见到一个单词时,很容易就会想起排在下一个的单词,但这种顺序关联在实际应用中也是不存在的,因而在实际应用中便无法回想起已经“熟记”的单词。

单向记忆效应:这种现象常见于只记忆单词拼写和读法,没有反过来记忆单词词义的朋友,尽管对单词的中译英很熟,但常常见到已经“熟记”的英文单词而不知其含意,因而无法在实际环境或考试环境中运用。
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

Re: [第17次修改]自制遗忘曲线单词复习工具(自知非常简陋,求别喷),求交流,求改进建议,意见和思路

#14

帖子 科学之子 » 2014-07-05 18:43

ubunbates 写了:遗忘曲线, 有个开源的库可以用.
库名是什么?
搜索了一下"开源 遗忘曲线",是"语言岛"这个开源软件吗?
buntutu
帖子: 65
注册时间: 2009-11-25 1:38

Re: [第15次修改]自制遗忘曲线单词复习工具(自知非常简陋,求别喷),求交流,求改进建议,意见和思路

#15

帖子 buntutu » 2014-07-06 10:04

科学之子 写了: 不过我在编写这个工具以前(包括现在),查单词都是从来不看例句的,因为根本就看不懂,感觉毫无意义的样子.
那是因为初期词汇量不够丰富,而且使用单词的能力不够。实际上,当然拥有简单阅读能力后,学习英语最重要的能力就是连蒙带猜,因为日常的使用环境中,开始三五句中就会夹杂六七个生词,以后十句八句中夹杂一两个生词的情况大概会持续一辈子,所以必须习惯根据上下文连蒙带猜。而例句中关键词的翻译有了,猜起来大多还是容易的。

碰到生词立刻查字典是一个非常恶劣的学习外语的方法。查字典是必须的,但是一定要有节制。否则学习英语困难无比。这也是为什么在英语环境下(生活在英美澳新)学习英语的速度很快,因为他不可能每分钟都查字典,而是必须不断猜测别人在说什么,写的是什么。当你大概知道一个词是什么意思后,再记忆他的准确意思,那基本上就不用太花心思了。而习惯猜测后,越猜会越顺,更懒得查字典了,这是良性循环。

如果是找语言的感觉,我觉得去看英文文档之类的实践更有效过,毕竟例句中的语境我不一定能碰到.
联想记忆时个人还认为要注意避免"假记忆",假记忆就是在学习环境中看起来效果很好,但实际应用起来就因为各种原因导致无法回忆.
下面我搜到的"假记忆"的相关介绍
非正式关联效应:这种现象常见于运用“分组减负记忆法”的朋友,由于把单词分成10至50个一批的小组进行记忆,形成了一个特殊的词汇组合环境,在这个环境中,只要见到一个词,就很容易想起组内的另一些词,因而形成一种实际应用中不存在的非正式关联效应,使得记忆变得似乎很容易,但这种非正式的关联效应在实际应用中,却并不存在,因而不再起作用,所以似乎已经熟记的记忆并不能有效的得到唤醒。

顺序记忆效应:这种现象常见于按固定的顺序背单词的朋友,由于总是把单词按固定的顺序进行记忆,便形成前后单词的非正式相互关联,当见到一个单词时,很容易就会想起排在下一个的单词,但这种顺序关联在实际应用中也是不存在的,因而在实际应用中便无法回想起已经“熟记”的单词。

单向记忆效应:这种现象常见于只记忆单词拼写和读法,没有反过来记忆单词词义的朋友,尽管对单词的中译英很熟,但常常见到已经“熟记”的英文单词而不知其含意,因而无法在实际环境或考试环境中运用。
我觉得例句就是打破这些假记忆的有效工具。告诉你单词的实际使用方式,例句的关联很明显是一种正式关联,是一个单词在大多数场合下的实际用法,实际上大多数单词的用法是固定的,越复杂的单词,使用的方式越固定。英语单词的复杂,就是字母多。更是打破单向记忆效应的直接方法。

也许立即的效果不明显,但是每个生词都看一眼例句的话,长期潜移默化的效果会很明显的。
回复