ANKI 如何幫助您學習外語和準備面試的兩個故事

我一直相信,懶惰的程式設計師就是好程式設計師。 為什麼? 因為讓一個努力的人去做一件事,他就會去做。 一個懶惰的程式設計師會花費 2-3 倍的時間,但會寫一個腳本來為他做這件事。 第一次執行此操作可能需要花費非常長的時間,但對於重複的任務,這種方法將很快獲得回報。 我認為自己是個懶惰的程式設計師。 這是序言,現在讓我們進入正題。

故事一

幾年前,我想知道如何提升我的英語能力。 沒有什麼比閱讀文學更好的了。 我購買了電子閱讀器,下載了書籍,然後開始閱讀。 在閱讀的過程中,我不斷地遇到不熟悉的單字。 我立即使用閱讀器內建的字典翻譯它們,但我注意到一個特點:這些單字不想被記住。 幾頁後,當我再次遇到這個詞時,90%的可能性我再次需要翻譯,而且每次都會發生這種情況。 結論是,在閱讀時僅僅翻譯不熟悉的單字是不夠的,你需要做其他事情。 理想的選擇是將其引入日常生活並開始使用它,但我不住在英語國家,這不太可能。 然後我想起我曾經讀過 間隔重複.

它是什麼以及和什麼一起吃? 簡而言之,有這個 遺忘曲線,進一步引用維基百科:

在第一個小時內,所有收到的訊息中多達 60% 被遺忘;記憶後 10 小時,所學的 35% 仍留在記憶中。 然後遺忘過程緩慢進行,6天后,最初學習的音節總數的大約20%保留在記憶中,一個月後,同樣數量的保留在記憶中。

從這裡得出的結論

根據這條曲線可以得出的結論是,為了有效記憶,有必要重複所記憶的材料。

所以我們想出了一個主意 間隔重複.

安基 是一個完全免費的開源程序,實現了間隔重複的想法。 簡而言之,電腦化的閃存卡一側有問題,另一側有答案。 因為您可以使用常規方法進行提問/回答 html/css/javascript,那麼我們可以說它確實具有無限的可能性。 此外,它還可以透過特殊的方式進行擴展 外掛,其中之一對我們將來非常有用。

手動建立卡片是漫長、乏味的,而且很可能在一段時間後你會忘記這個任務,所以在某個時候我問自己一個問題,是否有可能自動化這個任務。 答案是肯定的,可以。 我做到了。 我馬上就說,還有更多 POC(概念證明),但是可以使用。 如果用戶有興趣並且其他開發人員參與其中,那麼就可以將其製成即使是技術上不懂的用戶也可以使用的成品。 現在,使用我的實用程式需要一些程式設計知識。

我使用該程式讀書 人工智能閱讀器。 它具有連接外部詞典的能力,當您翻譯單字時,它會將您調用翻譯的單字保存到文字檔案中。 剩下的就是翻譯這些單字並創建 ANKI 卡片。

起初我嘗試使用翻譯 Google Translate, 靈沃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如果您發現任何錯誤(不幸的是,確實有一些錯誤),請在個人訊息中給我寫信,我會糾正所有內容。

來源: www.habr.com

添加評論