ANKI 如何帮助您学习外语和准备面试的两个故事

我一直相信,懒惰的程序员就是好程序员。 为什么? 因为让一个努力的人去做一件事,他就会去做。 一个懒惰的程序员会花费 2-3 倍的时间,但会编写一个脚本来为他做这件事。 第一次执行此操作可能需要花费非常长的时间,但对于重复的任务,这种方法将很快获得回报。 我认为自己是一个懒惰的程序员。 这是序言,现在让我们进入正题。

第一个故事

几年前,我想知道如何提高我的英语水平。 没有什么比阅读文学更好的了。 我购买了电子阅读器,下载了书籍,然后开始阅读。 在阅读的过程中,我不断地遇到不熟悉的单词。 我立即使用阅读器内置的词典翻译它们,但我注意到一个特点:这些单词不想被记住。 几页后,当我再次遇到这个词时,90%的可能性我再次需要翻译,而且每次都会发生这种情况。 结论是,在阅读时仅仅翻译不熟悉的单词是不够的,你需要做其他事情。 理想的选择是将其引入日常生活并开始使用它,但我不住在英语国家,这不太可能。 然后我想起我曾经读过 间隔重复.

它是什么以及和什么一起吃? 简而言之,有这个 遗忘曲线,进一步引用维基百科:

在第一个小时内,所有收到的信息中多达 60% 被遗忘;记忆后 10 小时,所学内容的 35% 仍留在记忆中。 然后遗忘过程缓慢进行,6天后,最初学习的音节总数的大约20%保留在记忆中,一个月后,同样数量的保留在记忆中。

从这里得出的结论

根据这条曲线可以得出的结论是,为了有效记忆,有必要重复所记忆的材料。

所以我们想出了一个主意 间隔重复.

安基 是一个完全免费的开源程序,实现了间隔重复的思想。 简而言之,计算机化的闪存卡一侧有问题,另一侧有答案。 因为您可以使用常规方法进行提问/回答 html/css/javascript,那么我们可以说它确实具有无限的可能性。 此外,它还可以通过特殊的方式进行扩展 插件,其中之一对我们将来非常有用。

手动创建卡片是漫长、乏味的,而且很可能在一段时间后你会忘记这个任务,所以在某个时候我问自己一个问题,是否有可能自动化这个任务。 答案是肯定的,可以。 我做到了。 我马上就说,还有更多 POC(概念证明),但是可以使用。 如果用户有兴趣并且其他开发人员参与其中,那么就可以将其制成即使是技术上不懂的用户也可以使用的成品。 现在,使用我的实用程序需要一些编程知识。

我使用该程序读书 人工智能阅读器。 它具有连接外部词典的能力,当您翻译单词时,它会将您调用翻译的单词保存到文本文件中。 剩下的就是翻译这些单词并创建 ANKI 卡片。

起初我尝试使用翻译 谷歌翻译, 灵沃API ETC。 但免费服务的效果并不理想。 我在开发过程中用尽了免费限制,此外,根据许可条款,我没有缓存单词的权利。 在某个时刻,我意识到我需要自己翻译这些词。 结果写了一个模块 DSL2HTML 您可以连接到的 DSL 词典 谁知道如何将它们转换成 HTML 格式。

这就是 * 中的字典条目的样子的.html,我的选择与选项相比 黄金字典

ANKI 如何帮助您学习外语和准备面试的两个故事

在关联词典中查找单词之前,我会将其带到 字典形式(引理) 使用图书馆 斯坦福大学CoreNLP。 其实就是因为这个库,我开始用Java来写,原本的计划是全部用Java来写,但是在这个过程中我发现了这个库 节点java 使用它,您可以相对轻松地从 Nodejs 执行 Java 代码,并且某些代码是用 JavaScript 编写的。 如果我早点找到这个库,就不会用 Java 编写任何一行代码了。 在此过程中诞生的另一个副项目是创作 包含 DSL 文档的存储库 在网络上找到的格式为 *.chm,转变并进入神圣形态。 如果原始文件的作者是昵称用户 约日奇 当他看到这篇文章时,我非常感谢他所做的工作;没有他的文档,我很可能不会成功。

所以,我有一个英语单词,其字典条目的格式为 *的.html,剩下的就是将所有内容放在一起,从单词列表中创建 ANKI 文章并将其输入 ANKI 数据库。 为此,创建了以下项目 数据2anki。 它可以将单词列表作为输入、翻译、创建 ANKI *的.html 文章并记录在ANKI数据库中。 文章末尾有关于如何使用它的说明。 与此同时,第二个故事是间隔重复可以发挥作用的地方。

第二个故事。

所有寻找或多或少合格专业的人,包括程序员,都面临着准备面试的需要。 面试中提出的许多概念您在日常实践中不会使用,并且会被遗忘。 当准备面试、翻阅笔记、书籍、参考书时,我面临这样一个事实:需要花费大量时间和精力来筛选你已经知道的信息,因为它并不总是显而易见的,你必须仔细阅读以了解它是什么。无关紧要。 当你谈到一个确实需要重复的话题时,通常你已经很累了,你的准备质量也会受到影响。 有时候我想,为什么不使用 ANKI 卡来做这个呢? 例如,在做某个主题的笔记时,立即以问题和答案的形式创建一个笔记,然后当你重复它时,你会立即知道你是否知道这个问题的答案。

出现的唯一问题是输入问题非常漫长且乏味。 为了使过程更容易, 数据2anki 我添加了转换功能的项目 降价 ANKI 卡片中的文字。 您所需要的只是编写一个大文件,其中问题和答案将用预定的字符序列进行标记,解析器将通过该文件了解问题在哪里以及答案在哪里。

创建此文件后,您可以运行 data2anki 并创建 ANKI 卡。 原始文件易于编辑和共享,您只需擦除相应的卡并再次运行程序,就会创建一个新版本。

安装与使用

  1. 安装 ANKI + AnkiConnect

    1. 从这里下载 ANKI: https://apps.ankiweb.net/
    2. 安装 AnkiConnect 插件: https://ankiweb.net/shared/info/2055492159

  2. 安装 数据2anki

    1. 下载中 数据2anki 来自 github 存储库
      git clone https://github.com/anatoly314/data2anki
    2. 安装依赖项
      cd data2anki && npm install
    3. 下载java依赖项 https://github.com/anatoly314/data2anki/releases/download/0.1.0/jar-dependencies.zip
    4. 开箱 jar 依赖项.zip 并将其内容放入 data2anki/java/jars

  3. 用于翻译单词:

    1. 在文件中 data2anki/config.json:

      • 在关键 模式 输入值 DSL2ANKI

      • 在关键 module.dsl.anki.deckName и module.dsl.anki.modelName 相应地写 卡组名称 и 型号名称 (必须在创建卡片之前已经创建)。 目前仅支持模型类型 基础:

        有正面和背面字段,并将创建一张卡。 您在“正面”中输入的文本将显示在卡的正面,您在“背面”中输入的文本将显示在卡的背面。

        原词在哪里? 前场,翻译将在 后场.

        添加支持没有问题 基本卡(和反转卡),其中将为单词和翻译创建反向卡,根据翻译,您需要记住原始单词。 你所需要的只是时间和愿望。

      • 在关键 module.dsl.dictionariesPath 注册一个已连接的数组 *.dsl 字典。 每个连接的字典都是一个目录,字典文件所在的位置符合以下格式: DSL字典结构

      • 在关键 module.dsl.wordToTranslatePath 输入您要翻译的单词列表的路径。

    2. 启动并运行 ANKI 应用程序
      node data2ankiindex.js
    3. 利润!!!

  4. 用于从 Markdown 创建卡片

    1. 在文件中 data2anki/config.json:

      • 在关键 模式 输入值 markdown2anki
      • 在关键 module.markdown.anki.deckName и module.dsl.anki.modelName 相应地写 卡组名称 и 型号名称 (必须在创建卡片之前已经创建)。 为了 markdown2anki mode 仅支持模型类型 基础.
      • 在关键 module.markdown.selectors.startQuestionSelectors и module.markdown.selectors.startAnswerSelectors 您编写选择器,分别标记问题和答案的开头。 带有选择器本身的行不会被解析,也不会出现在卡片中;解析器将从下一行开始工作。

        例如,这个问题/答案卡:

        ANKI 如何帮助您学习外语和准备面试的两个故事

        在 Markdown 中它看起来像这样:
        #QUESTION# ## 问题 5. 编写一个 mul 函数,当使用以下语法调用时,该函数将正常工作。 ```javascript console.log(mul(2)(3)(4)); // 输出:24 console.log(mul(4)(3)(4)); // 输出 : 48 ``` #ANSWER# 下面是代码,并解释其工作原理: ```javascript function mul (x) { return function (y) { // 匿名函数 return function (z) { // 匿名函数 return x * y * z; }; }; } ``` 这里 `mul` 函数接受第一个参数并返回匿名函数,该匿名函数接受第二个参数并返回匿名函数,该匿名函数接受第三个参数并返回连续传递的参数的乘法在定义的 Javascript 函数中inside 可以访问外部函数变量,并且 function 是第一个类对象,因此它也可以由函数返回并作为另一个函数中的参数传递。 - 函数是对象类型的实例 - 函数可以具有属性并具有返回其构造函数方法的链接 - 函数可以存储为变量 - 函数可以作为参数传递给另一个函数 - 函数可以是从另一个函数返回
        

        示例取自此处: 123-JavaScript-面试问题

        项目文件夹中还有一个包含示例的文件 examples/markdown2anki-example.md

      • 在关键 module.markdown.pathToFile
        写下文件所在的路径 *.MD 问题/答案文件

    2. 启动并运行 ANKI 应用程序
      node data2ankiindex.js
    3. 利润!!!

这是在手机上的样子:

导致

在 ANKI 桌面版上收到的卡片可以毫无问题地与 ANKI 云同步(免费最多 100mb),然后您可以在任何地方使用它们。 有适用于 Android 和 iPhone 的客户端,您也可以在浏览器中使用它。 因此,如果你有闲暇时间,那么你可以学习一些新东西,而不是漫无目的地浏览 Facebook 或 Instagram 上的猫。

结语

正如我提到的,这更像是一个可以使用的工作 POC,而不是成品。 大约 30% 的 DSL 解析器标准没有实现,因此, 例如,并非字典中的所有字典条目都可以找到,还有一个想法将其重写为 JavaScript的,因为我想要“一致性”,而且现在写得不是很优化。 现在解析器正在构建一棵树,但在我看来这是不必要的,也不需要使代码复杂化。 在 markdown2anki 模式下,图像不会被解析。 我会尝试一点一点地删减,但由于我是为自己写作,所以我会首先解决我自己会遇到的问题,但如果有人愿意提供帮助,那么不客气。 如果您对该计划有疑问,我将很乐意帮助解决相关项目中的未决问题。 在此写下其他批评和建议。 我希望这个项目对某人有用。

PS如果您发现任何错误(不幸的是,确实有一些错误),请通过个人消息给我写信,我会纠正所有内容。

来源: habr.com

添加评论