对于很多人来说背单词是一个很痛苦的经历,但是学习英语又是一件非做不可的事情。其中有一个痛点是,你用托福,GRE等词库记忆会遇到很多你已经会的单词或者由于你平时很难遇到因此背了就忘的单词。这篇文章专门针对这个问题分享一个我用了很久的词库私人订制方案,同时还可以治疗懒癌。
有道词典
有道词典的屏幕取词比较方便,词库和社区功能也比较全面,所以平时使用比较多。日常遇到的生单词可以随时放到有道自带的单词本中,收集记忆。虽然有道单词本提供背单词的功能,但是非常单一,没有艾宾浩斯遗忘曲线,所以非常不适合用来复习单词。
墨墨背单词
再说说墨墨(添加个Link以免有人想多)。墨墨是我用过的背单词app中最推荐的一个。原因有以下:
1. 根据艾宾浩斯遗忘曲线给你需要复习的单词;
2. 可以自己创建词库(在网页中操作),不用按照托福、雅思、专四专八的词库去记很多你已经记住了的或者你平时基本遇不到的单词;
3. 可以每日签到,签到的时候还会‘Peng’一下,细致的给你成就感;
4. 你有必要每日签到!一是因为如果连续几天不签到会累积很多你需要复习的单词,二是自建词库的单词数不是无限的,你需要通过签到来挣,或者花钱买(虽然不贵但是挣不到数量靠买获取是不是很伤自尊);
5. 此外,每天至少记忆单词数累积到10个你才能签到;
6. 例句和助记非常丰富,而且你可以自己创建自己喜欢的助记方式;
7. 例句或助记中的生单词可以直接添加到记忆清单中;
8. app内部链接五大在线词典;
9. 可以查看自己记忆单词的很多统计指标和未来复习单词数的预测;
10. 暂时就想到这些了。
词库私人订制
那么,问题来了。一个是平时使用和收集生单词的有道词典,一个是可以方便记忆和复习自建词库的墨墨背单词,怎么快速有效的把有道词典单词本收集的生单词导入到自己创建的墨墨词库中?
在这里,我肯定不会允许你耗时费力地一个一个复制!而如果把有道单词本导出来再放入墨墨词库,你会发现导出的单词本包括序号,音标,词性标识和汉语意思等,把这些全部直接复制到自建词库中将会引起很大的麻烦(试试你就知道了)。我的solution是这样的:
1. 从有道词典单词本中导出你想加入记忆的单词到一个.txt文件;
2. 把.txt文件的编码改为 utf-8 (直接另存为,有选项);
3. 使用本文后面的附加的python程序可以提取出你需要记忆的单词;
4. 程序将会生成一个.txt文件,打开之后会发现里面只剩英语单词了,将他们复制到你的墨墨自建词库中,记下词库编号;
5. 用墨墨记忆单词的时候通过词库编号链接到你的词库,你就可以开始学习你的私人订制的词库了。
程序代码
此程序完成将text文件中这样的记录:
350, incarnation [ɪnkɑː'neɪʃ(ə)n] n. 化身;道成肉身;典型 incarnation: 化身 |
道成肉身 | 道成肉身
转化为这样的词条:
incarnation
程序是用python写的,我不常做文本处理,本程序只为满足简单的基础需要,所以应该有很多可以改进的地方(欢迎分享你的更好的方案)。你只需要用自己的有道词典导出的utf-8编码的记事本文件路径和名称替换第19行的E:\voc.txt
# -*- coding: utf-8 -*-
"""
Created on Apr 28 2016
Extracting vocabulary from Youdao dictionary
The vocabulary text file should be code as utf-8
<INPUT>
file_in: the exported vocabulary from Youdao
</INPUT>
<OUTPUT>
file_out: the file to save the English words. Default file name is
new_words_'time'.txt ('time' is the local date)
<OUTPUT>
@author: sinit
"""
import codecs,time
file_in = r'E:\voc.txt'
outname = 'new_words'+'_'+time.strftime("%Y-%m-%d",time.localtime())+".txt"
file_out = r'E:\\'+outname
fs = codecs.open(file_in, 'r','utf-8')
vocabulary = fs.readlines()
fs.close()
word = []
word.append(vocabulary[0].split()[1])
def is_chinese(uchar):
#Judge if a unicode is Chinese
if (uchar >=u'/u4e00')&(uchar<=u'/u9fa5'):
return True
else:
return False
def is_zh (c):
x = ord (c)
# Punct & Radicals
if x >= 0x2e80 and x <= 0x33ff:
return True
# Fullwidth Latin Characters
elif x >= 0xff00 and x <= 0xffef:
return True
# CJK Unified Ideographs &
# CJK Unified Ideographs Extension A
elif x >= 0x4e00 and x <= 0x9fbb:
return True
# CJK Compatibility Ideographs
elif x >= 0xf900 and x <= 0xfad9:
return True
# CJK Unified Ideographs Extension B
elif x >= 0x20000 and x <= 0x2a6d6:
return True
# CJK Compatibility Supplement
elif x >= 0x2f800 and x <= 0x2fa1d:
return True
else:
return False
for i in range(1,len(vocabulary)):
line = vocabulary[i].split()
if vocabulary[i].split()[0][:-1].isdigit():
newword = vocabulary[i].split()[1]
if is_zh(newword[0]):
continue
else:
word.append(vocabulary[i].split()[1])
fs = open(file_out, 'w+')
for line in word:
fs.write(line)
fs.write('\n')
fs.close()
print('Assignment Done!')