Anki系列-用Anki准备GRE

Anki系列-用Anki准备GRE

背景

其实我从2010年就开始接触Anki了。但那个时候,由于自身非常懒惰,对Anki的使用也是形式大于内容。而且那个时候并不会Python,也不知道正则表达式,所以在制作卡片方面进展缓慢。久而久之也就不了了之。

2014年,出于对机器学习的兴趣,我自学了Python,为大规模制作卡片打下了编程基础。2015年,闲暇时我用IOS上的Pythonista写了个简单的背单词软件。那个时候面临没有高质量词库的尴尬。我印象中,最有挑战性的单词书就是琦叔的《再要你命3000》了。于是从网上找到PDF版本,摸索着如何将PDF里的内容整理为软件可用的数据格式。这一过程伴随着对正则表达式的大量使用。但由于网上流传版本自身内容的缺陷,这一工作也无疾而终。直到最近,我发现Amazon上开始出售一系列词汇书的Kindle版本,于是相继购买了《GRE核心词汇考法精析》《GRE核心词汇助记与精炼》《GRE高分必备短语搭配》的Kindle版,然后用calibre转换成txt格式,最后再用python来将txt处理成Anki可用的导入文件。Kindle版的书籍格式是AZW3,每个章节其实就是一个网页(HTML),处理起来要比PDF容易太多。而且书籍内容也有专业的校对人员把过关,所以内容质量上不用担心。我设计的词库的主体结构来自于《GRE核心词汇考法精析》,整个制作过程轻松愉快。后来又加入了《GRE核心词汇助记与精炼》和“不择手段背单词”的内容,以及单词的发音。

在这里,我想提醒读者注意版权问题。我们购买的电子版书籍,严格来说只是购买了在指定阅读平台上阅读该书籍的权利。对于书籍电子文件的一切修改行为,都算侵犯了版权,更遑论破解之后放到各大论坛上的共享行为了。所以,在这里,我并不会提供制作好的Anki词库。但我会分享制作词库的脚本文件。这样,你只需购买了相关书籍,便可以参照我写的程序制作自己的Anki词库了。如果你觉得太麻烦,可以去下载这个共享Deck,相信能满足你的大部分需求。最后,我希望大家能在力所能及的范围内去支持书籍作者。

另外,琦叔团队放出的电子版可以通过关注琦叔的微信公众号获得。或者直接访问这个百度网盘链接。不过,既然免费,就不完美。且不说水印,内容上也会有很多错误。所以并不适合提取数据。相信之前提到的共享Deck也是根据这个免费版本制作的。

工具箱

  • Kindle for PC
    必备。买过的Kindle电子书都会出现在这个软件中。下载到本地后,可以到C:\Users\你的用户名\Documents\My Kindle Content中找到源文件,文件名为*******.azw。这个文件就是所有数据的最终来源。

  • calibre
    转换工具。将*******.azw拖入calibre后,自动完成去版权保护的操作。然后右键书籍封面,选择convert books,convert individually,输出格式output format选txt即可。见下图。

    anki-gre-1.png

anki2.png

calibre有非常丰富的转换选项,这里请将Formatting从
txt改为markdown。其他不变。

anki-gre-3.png

转换完成后,右键书籍封面,选择open containing folder,txt所在的文件夹会被自动打开。以《GRE核心词汇考法精析》为例,其文件名为GREHe Xin Ci Hui Kao Fa Jing Xi - Chen Qi.txt。这个文件就是我们要通过程序处理的文件。给大家看一眼它的内容。

anki-gre-4.png

Note的结构

学习讲求循序渐进。琦叔的单词书,一个单词下面有太多内容,不可能一次性全部识记。最简单的想法,如果一个单词有n个释义,那么就拆成n个Note。每个Note都有如下字段。

  • word_uid
    单词的唯一标识。由单词拼写加上用法序号构成。具体解释见下。另外,Anki中,我选择了“sort by this field in browser”,即所有的Note也以这个字段的值为自己的唯一标识。

  • word
    单词的拼写。比如单词abandon,拼写就是abandon。-_-

  • usage_index
    单词的用法序号。很多人初看起来,觉得这个设计不合理。这不是加重记忆负担么?原本我只需要背有哪些用法即可,现在还需要被对应的序号。我想说,是你打开的方式不对。仔细想来,当一个卡片的正面问你,abandon的第一个用法是什么时,你直接想到的一定是abandon的所有已知用法,按熟悉程度排序。都回忆起来后,你只需看看背面的答案在不在这个脑中的用法列表即可。不在,相当于答错;在,相当于答对。而这样做的好处是,如果你对abandon的“放纵”用法非常不熟悉,总是答错,那么软件可以在尽量短的时间间隔内只让该用法再次出现,以加固你的记忆。而且能强迫你将精力集中到这一种用法。我使用别的记忆软件,在用到一词多义时都会非常困惑和犹疑。如果我回忆起了abandon的四种用法,但忘记了“放纵”的意思,那究竟算答对还是答错了呢?使用usage_index,这种困惑迎刃而解。

  • phonetic_symbol
    单词音标

  • word Audio
    单词的发音文件所在位置

  • part_of_speech
    单词词性

  • mynotes
    自己添加的笔记。比如如何记忆单词的心得

  • explanation_en
    单词解释的英文

  • explanation_cn
    单词解释的中文

  • explanation_encn
    内容完美再现原书格式

  • explanations_other
    其他释义,同时包括中英文。Anki不支持多Note间共享Field,而我将多义单词按释义拆分,这就会引发一个问题。在你第一次碰到某单词的新释义的卡片时,你可能已背过该单词的某些其他释义,如“停止做某事”。那么查看答案时,你常常会想确认下其他释义有没有背错,所以最好把单词书中的其他释义都展示出来。另一个目的在于,多义单词都有一个基本义,其他释义基于基本义引申出来。所以呈现其他释义,可以辅助你对当前出现的释义的理解。

  • example_en
    例句英文。将例句的英文部分拆分出来,可以方便卡片设计。比如,你可以设计中译英或者英译中的卡片。

  • example_cn
    例句中文。

  • example_encn
    例句中英文。之所以要有这个字段,是因为有的单词可能有多个例句。那么这多个例句的中英文该如何匹配?正常来说,例句的英文后面应该跟着翻译,然后再开始下一个例句。Anki没办法在程序层面上支持这种匹配。所以,需要单独的字段存储匹配好的内容。

  • examples_other
    其他例句。自己找的可以添加到这里。还是那个中英文匹配的问题。这个字段里的内容,不区分中英文。

  • ants_en
    反义词的英文

  • ants_cn
    反义词的中文释义

  • ants_encn
    反义词的中英文。这一字段的存在理由同example_encn

  • syns
    同义词

  • der_zynm3000
    《GRE核心词汇考法精析》中的派生词

  • how_to_mem_bzsdbdc
    提取于不择手段背单词的txt文档

  • how_to_mem_zhuji3000
    提取于《GRE核心词汇助记与精炼》。单词的词根词源分析。

  • etyma_group
    《GRE核心词汇助记与精炼》中,单词所属的词根。

  • etyma_group_explanation
    《GRE核心词汇助记与精炼》中,关于单词所属词根的解释。

  • etyma_cognates
    《GRE核心词汇助记与精炼》中,该单词的所有同根词。

  • position_in_zynm3000
    《GRE核心词汇考法精析》中,单词所在的List和Unit。

  • tags
    单词的标签。比如,来自于哪本单词书,是不是词组等。

Anki中NoteType的完整截图:

anki-gre-5-2.png

Card的设计

我希望第一遍背诵时,只关注简单的中英文释义,同时由于GRE单词普遍很难,还应该加入额外内容,辅助理解。额外内容以及出现顺序为,explanations_other、example_encn、examples_other、mynotes、how_to_mem_zhuji3000、etyma_group、etyma_group_explanation、etyma_cognates、how_to_mem_bzsdbdc。额外内容不要求识记。综上所述,设计模板Usage:正面,单词×××的第×个意思;背面,中英文释义加上额外内容。

第二遍背诵时,应该关注单词的同反义。所以设计两个模板,syns和ants。syns正面问,单词×××第×个意思的同义词,反面呈现同义词。模板ants类似。

有些单词可能发音也很重要,所以第四个模板命名为pronounce,正面是单词拼写,背面是单词音标以及发音。

Anki的配合使用

设计导入文件

Anki支持导入txt格式的文件,文件中的一行即一个note,字段以TAB符\t分隔。txt文档中字段从左到右的写入顺序应该与NoteType里Fields由上到下的顺序一致。见下图(右侧为整理好的txt文档,箭头即TAB符)

anki-gre-5.png

下文称这个生成的导入文件为AnkiImport.txt。有关如何用Python制作该文件,请参见后文。

导入文件到Anki

必须在Anki桌面版进行。以Windows为例。Anki主界面,左上角,单击File,单击Import,切换到AnkiImport.txt所在路径,选中文件,点击open。弹出的对话框如下。

anki-gre-6.png

左上角,Type即所谓的NoteType,这里我选择提前设计好的GreWord,其具体结构参见“Note的结构”一节。Deck,我选择提前建好的GRE。Fields seperated by,保持默认即可(默认是Tab)。注意,一定要在Allow HTML in fields那里打勾。如果导入文件的制作过程没有问题,那么Field mapping那里,左右数量应该一致,

使用Anki

Anki主界面,中间靠上,选择Browse,弹出如下界面。

anki-gre-7.png

因为我之前选择导入到名为GRE的Deck中,所以这里左侧会有一个GRE选项。选中以后,即可浏览所有的单词卡片了。或者可以直接在上方的地址栏输入deck:GRE,效果相同。之后,该界面的空白区域大致变成下图这样。

anki-gre-8.png

这里,根据Anki设置的不同,以及是否安装Anki插件Advanced Browser,你看到的界面可能与上图展示的不完全一致。不过大致结构应该相似。注意到,abandon的第一个释义,对应的Sort Field(即word_uid)的值为"abandon1"。Card有3张,对应3个模板,ants不在其中因为书里没有给出该释义的反义词。这个表中的每一行都是一张卡片,而非一个Note。按照之前的设计,一个单词的一个释义,会自动生成4张卡片,对应表中的4行。那些被黄色标记的行(卡片),标识着这些卡片被Suspend。这是我手动设定的结果。原因如下。

Anki并不原生支持所谓的循序渐进的学习模式,它同等对待所有的卡片。即背单词时,这4类卡片出现的顺序是混合且随机的。第一遍学习时,我不希望类别为syns、ants、pronounce的卡片出现,所以在Anki中Suspend它们。Suspend的含义是,除非我手动激活(unsuspend)这些卡片,它们不会在我的学习过程中出现。具体实现方法如下。

在地址栏中,键入deck:GRE card:syns,回车,Browser会列出模板syns产生的所有卡片。CTRL+A选中所有卡片,单击地址栏上方的suspend即可。对ants、pronounce作相同操作。等单词的所有Usage卡片都进入复习阶段后,如果想激活这些卡片进行进一步学习,再次执行一遍上述操作即可。

当然,还有一种不借助Suspend的方法:filtered deck。Anki主界面,上方,单击Tools,单击Create Filtered Deck,弹出如下对话框。

anki-gre-9.png

在Search那里键入,deck:"GRE" card:"Usage"。另外,你还可以在"Limit to"中设置每天学习的卡片的数量上限,在"cards selected by"设置卡片出现的顺序。关于更多Search方面的语法,参见Searching。设置好后,单击Build即可。

最后,附上完整的卡片背面预览。

anki-gre-10.png

用Python制作导入文件

我只谈谈大致思路,技术细节方面,我会共享我写的几个ipython notebook。懂python的自然可以看得懂我写的代码,不懂编程的,我也没能力在一个小节内解释清楚所有东西。

以《GRE核心词汇考法精析》为例。将GREHe Xin Ci Hui Kao Fa Jing Xi - Chen Qi.txt整体读入Python后,得到一个非常长的字符串。每一步处理都是在切块。第一步,先按照List来切大块,再按Unit切中块,最后按单词切小块。第二步,所有切割出的单词块构成了一个列表。对于列表中的每一个单词,按考法切大块,每个考法按照释义、例句、近义词、反义词等切小块,最后再把这些小块放入到对应的字段中。如何识别一个块的起始和终止位置?这就需要观察文本规律了。比如,如何识别一个List块?通过观察txt文档,发现每个List的起始行字符串都有如下特征,行首是英文单词List,之后接一个空格字符再加上一个或两个数字。至于终止位置,似乎没有统一的特征,但考虑到一个List的结尾即另一个List的开始,所以两个List起始位置之间的内容即一个List块。也就是说,只要找到起始位置的规律即可。其他的块都以类似的思路切割。不过,对于最小的单位,即一个释义下面的各个条目,通常是一个条目即一行,那么只需辨别这一行字符串是属于哪个条目即可。原文档中模式一目了然。例句条目以中文“例”开头,近义词条目以中文“近”开头,如此等等。

相关文件共享

最近ipython notebook迁移到了jupyter notebooek,我直接分享notebook可能会出现版本不对打不开的情形。所以只分享notebook的HTML的文档。代码和程序运行的结果都在里面,而且也详细说了写代码的思路。

my_helpers.py
一些辅助函数

sync_to_file_magic_command.py
我自己写的一个magic command,自动生成脚本用的。

convert_new3000.py
处理GREHe Xin Ci Hui Kao Fa Jing Xi - Chen Qi.txt,生成new3000_base_d.txt

convert_zhuji.py
处理GREHe Xin Ci Hui Zhu Ji Yu Jing - Cao Tian Cheng.txt,生成zhuji_base_d.txt

convert_duanyu.py
处理GREGao Fen Bi Bei Duan Yu Da Pe - Yan Yu Zhen ,Gao Yu ,Chen Qi.txt,生成duanyu_base_d.txt

bzsdbdc_dic.txt
网上找到的buzeshouduanbeidanci.txt整理过的版本

anki_import.ipynb
读入
new3000_base_d.txtzhuji_base_d.txtbzsdbdc_dic.txtduanyu_base_d.txt
生成
AnkiImportData_GreWord.txtAnkiImportData_GrePhrase.txt

或者分别运行
CreateAnkiImport_GrePhrase.pyCreateAnkiImport_GreWord.py
也能得到上述文件

example_usage.apkg
词库预览版,只有abandon一个单词。用以展示Note结构、卡片模板。

以上文件分享在Github
以后的bug修复和更新也会发布在这里

其实我知道,这种文章写出来就注定小众,所以阅读量不会很高。不过,如果你读到这里,那至少证明你便是那小众中的一个。如果这篇文章帮到了你,或者你觉得哪里可以改进,欢饮反馈给我。可以评论,也可以喜欢这篇文章。最近每隔几天,我便发现有人关注我,可已有的三篇文章却不见多一个喜欢或者评论,这让我很困惑。如果我写的不好,干嘛关注我?如果我写的好,为何一点反馈都舍不得给?好吧,也许是这些朋友比较傲娇,觉得这种水文偷偷看过就好,点个喜欢多掉身价啊~其实吧,我理解他们的。有时我也会出于好奇偷偷看看首页投稿里里的姑娘文,然后默默离开~毕竟,人人都有无聊的时候。虽然技术文不同于鸡汤文,还是感谢这些朋友赏脸阅读。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容