Anki

Kindle生词本导入Anki

不翻历史记录我都快忘记自己居然还写过关于 Anki 的文章,2021年这篇日常轻松制作Anki卡片。最近两年几乎没怎么长期使用 Anki,讽刺的是制作卡片轻松后导致卡片数量剧增,一段时间没有复习就积攒太多,再也无法跟上了。

最近重新拾起 Anki 是看到这篇文章,Augmenting Long-term Memory ,其实这篇文章在几年前也看过,这次重新阅读已然可以唤起对 Anki 的热情,重新出发首先删除了积攒的 500+待复习,(即使这样还有700+待学习)。接着根据文章建议,将所有需要背诵的内容整合到一个 deck 中,这也符合当初纸质笔记本的 All in One 原则,为此整理了散落在日常笔记中所有的 word 和 anki 标签内容,对了推荐 Obsidian + Anki 用户使用这个插件 https://github.com/Pseudonium/Obsidian_to_Anki,具体细节这里不赘述。

今天的主题当然是将 Kindle 的生词本导入 Anki 中,没想到宝藏博主 @wzyboy 在多年前的博客中早就提到了,Anki —— 高效的间隔重复记忆软件,根据对应的仓库 https://github.com/wzyboy/kindle_vocab_anki 完成基本没有问题,需要注意的有以下几点:

  1. vocab.db 文件所在的 system 文件夹是隐藏的,显示隐藏文件夹即可,或者直接输入地址;
  2. kindleunpack 可以处理 azw 文件,我使用 Calibre 将 azw 词典转换为 mobi 格式后,html 标记语言完全错乱,无法使用后续脚本,所以使用 DeDRM 后的 azw 格式词典即可;
  3. 添加卡片格式,导入卡片完全按照 Readme 即可,效果完美。

日常轻松制作 Anki 卡片

Anki 是一款能让记忆事物变得简单的程序。Anki 比传统的学习方法更为有效,因此你可以大幅减少花在学习上的时间,或是大幅提升学习量。(来自 anki 官方中文介绍)。

我个人很早就耳闻 anki 的大名,2019 年 10月份够买了 iOS 上的官方 APP。但是日常使用仅限于背诵单词,有一搭没一答的在使用。2020 年底学习了 Youtuber Ali 关于 Anki 的课程 Learn Anything With Flashcards The Ultimate Guide To Anki,了解到很多之前不知道的 anki 的强大功能。新的一年开始,希望能坚持 anki 打卡,背诵单词。下面简单介绍一下使用 anki 的 workflow。

我一直不太习惯背诵单词书,一来没有备考的压力,动力不足,其次没有语境的背诵单词,对我来说印象不够深刻。这么多年的英语学习经历,我几乎没有背诵过单词书。高中积累单词的方法是,在日常考试中遇到的生词,记录到生词本,之后有空没空多翻翻。这样的效果是十分显著的,在后期英语阅读理解速度比较同龄人提高了很多,个人积累的单词量也显著进步。这样的习惯一直断断续续保持着,这么多年使用过有道的单词本,欧陆词典的生词本,用来记录在互联网上浏览遇到的生词,但是效果不佳。原因主要是,互联网上遇到的生词数量太多(有些难度较大的文章可能一篇就会积累数十个),没有了应试压力后很难经常性地回顾,这就导致生词本中不熟悉的单词越来越多,定期背诵带来的沮丧感大增,很难坚持下去。

Anki 通过自己的算法可以完美的解决这个问题。所以要解决的问题是,如何将生词本迁移到 Anki 词库?

最直观的办法是,直接将生词本导出,简单处理下格式,并导入 Anki。这样当然是可行的,但是日常积累遇到的新词如何处理?定期从生词本导入到 Anki 当然是可以的,不过毕竟增加了额外的步骤。永远不要低估自己的惰性,时间长了可能就这多的一步阻碍你继续背诵单词。我们需要的方案是,能够将遇到的生词直接添加到 anki 中,非常幸运的是,现在有很多这样的工具。本文主要介绍我个人经常遇到的两种场景。

在浏览器中添加生词到 Anki #

幸运的是,有现成方案可以完美解决这个场景需求。大力推荐 在线词典助手 (含Anki制卡功能) 这个 Chrome 扩展,插件安装地址。项目的是开源的,代码托管在 Github

安装完毕,简单配置后,可以直接在浏览器进行划词翻译,一键添加到预先配置好的 Anki 词库。个人使用一年多,偶尔遇到不能制卡多是配置失效,重新配置即可。

查单词的同时添加到 Anki #

在非浏览器页面遇到生词,查单词后希望添加到 anki,如何解决这个需求呢?具体来说,我查单词的地方默认是命令行,感谢 ydcv,能够在命令行迅速方便的查询单词。但是该工具只是一个非常简单的查词工具,没有更复杂的,例如单词本这样的功能。 最初我是这样解决这个问题的,手动添加了生词本功能。实现的非常简单,就是在查单词的同时,将单词保存到一个文本文件。通过 shell 函数实现:

# youdao  
function s() {
    local spath="${HOME}/sh/ydcv.py"
    $spath $*
    echo $* >> ${HOME}/Dropbox/Dat/words.txt
}

在决定使用 Anki 之后,这个实现当然不够,如何能够让在 ydcv 中查询的单词保存到 Anki 词库呢?前段时间特地抽时间搜索了一下,找到了一个在命令行中与 anki 词库交互的工具 apy,该工具没有采用 Ankiconnect 等接口,可以在 Anki 没有运行的情况下,通过读取 Anki 数据库的方式,直接添加新卡片。那么问题就简单了,我们可以用该工具将使用 ydcv 查询的单词和返回的意思直接添加到 Anki 词库,简单升级下上面的 shell 函数:

...