Két történet arról, hogyan segíthet az ANKI a külföldi nyelv elsajátításában és az interjúra való felkészülésben

Mindig is azt gondoltam, hogy a lusta programozó jó programozó. Miért? Mert ha megkérsz egy szorgalmas programozót, hogy csináljon valamit, akkor egyszerűen megcsinálja. A lusta programozó viszont 2-3-szor annyi időt fog eltölteni, de ír egy szkriptet, amely ezt elvégzi helyette. Lehet, hogy az első alkalommal indokolatlanul sok időt vesz igénybe, de a folyamatosan ismétlődő feladatok esetén ez a megközelítés nagyon gyorsan megtérül. Lustának tartom magam a programozásban. Ez volt a bevezetés, most térjünk a lényegre.

Első történet

Néhány évvel ezelőtt elkezdtem gondolkodni, hogyan javíthatnám az angoltudásomat. Semmi jobb nem jutott eszembe, mint az irodalom olvasása. Vásároltam egy elektronikus olvasót, feltöltöttem könyvekkel, és elkezdtem olvasni. Az olvasás során folyamatosan ismeretlen szavakba botlottam. Azonnal lefordítottam őket az olvasó beépített szótáraival, de észrevettem egy jellegzetességet: a szavak nem akartak megmaradni. Amikor néhány oldallal később újra találkoztam ezzel a szóval, 90%-os valószínűséggel újra szükségem volt a fordításra, és ez így ment minden alkalommal. Az a következtetés adódott, hogy nem elég az ismeretlen szavakat fordítani az olvasás során, valamit még tennünk kell. Az ideális lenne, ha a szavakat a mindennapi használatba bevonnánk, de nem angolul beszélő országban élek, így ez szinte lehetetlen. Ekkor eszembe jutott, hogy valaha olvastam az intervallumok ismétléséről.

Mi ez, és mivel jár? Röviden, létezik egy felejtési görbe, itt következik egy idézet a Wikipédiából:

Már az első óra elteltével a megszerzett információk 60%-át elfelejti az ember, 10 órával a tanulás után pedig a tanultak 35%-a marad meg a memóriában. A felejtés folyamata lassan halad, és 6 nap elteltével a memóriában körülbelül 20% marad a kezdetben megtanult szavakból, ugyanennyi marad meg egy hónap elteltével is.

A következtetés pedig

A következtetések, amelyeket az adattal kapcsolatban lehet levonni, az, hogy a hatékony megtartáshoz szükség van az anyag ismétlésére.

Így jutottunk el az intervallumok ismétlésének.

A NKI Ez egy teljesen ingyenes, nyílt forráskódú program, amely az intervallumos ismétlés ötletét valósítja meg. Egyszerűbben fogalmazva, számítógépes flash kártyák, az egyik oldalon a kérdés, a másikon a válasz. Mivel kérdéseket/válaszokat készíthetünk sima html/css/javascript, azt mondhatjuk, hogy valóban határtalan lehetőségekkel rendelkezik. Emellett kifejezetten bővítményekkel, és az egyik nagyon jól jön majd később.

Kézi kártyák készítése időigényes, unalmas, és nagy a valószínűsége, hogy egy idő után feladja az ember, ezért egy adott pillanatban felvetettem magamnak a kérdést, hogy lehet-e automatizálni ezt a folyamatot. A válasz: igen, lehet. És én ezt megtettem. Előre bocsátom, ez inkább POC (Proof of concept), de használható. Ha érdeklődés mutatkozik a felhasználók részéről, és más fejlesztők is csatlakoznak, akkor ez eljuthat egy kész termékhez, amelyet még technikailag nem jártas felhasználók is tudnak használni. Jelenleg a segédprogramom használata bizonyos programozási ismereteket feltételez.

Könyveket olvasok a AIReaderprogram segítségével. Van lehetőség külső szótárak csatlakoztatására, és a szavak fordításakor elmenti a fordított szót egy szövegfájlba. Most már csak az a teendő, hogy lefordítsam ezeket a szavakat, és létrehozzak ANKI kártyákat.

Először megpróbáltam a Google Translate, Lingvo API stb. használni. De a ingyenes szolgáltatásokkal nem ment a dolog. Az ingyenes limitet már a fejlesztés során kimerítettem, ráadásul a licencfeltételek értelmében nem volt jogom a szavakat cache-elni. Ekkor jöttem rá, hogy magamnak kell lefordítanom a szavakat. Végül megírtam a dsl2html modult, amelyhez csatlakoztathatóak DSL szótárak , és amely képes azokat átkonvertálni HTML formátumba.

Így néz ki a szótári cikk egy *.html, az én változatom összehasonlítva a GoldenDict

Két történet arról, hogyan segíthet az ANKI a külföldi nyelv elsajátításában és az interjúra való felkészülésben

Mielőtt keresném a szót a csatlakoztatott szótárakban, a szót szótári alakra (lemmára) hozzá igazítom a Stanford CoreNLPkönyvtár segítségével. Valójában emiatt a könyvtár miatt kezdtem el Java nyelven programozni, és kezdetben az volt a terveim között, hogy mindent Java-ban írok, de a folyamat során felfedeztem a node-java amely segítségével viszonylag egyszerűen lehet Java kódot végrehajtani nodejs-ből, és egy része JavaScript-ben íródott. Ha ezt a könyvtárat korábban felfedeztem volna, akkor valószínűleg egy sort sem írtam volna Java-ban. Egy másik mellékprojekt, ami a folyamat során született, az DSL dokumentációval rendelkező repozitórium létrehozása amely az interneten * formátumban található.chm, átkonvertálva és emberhez méltó állapotba hozva. Ha az eredeti fájl szerzője, aki a yozhic felhasználónév alatt ismert, látja ezt a cikket, akkor nagy köszönet érte a munkáért, mert a dokumentációja nélkül valószínűleg semmi sem sikerült volna.

Tehát van egy angol szóm, az annak szótári cikkje * formátumban van.html, most már mindent egybe kell gyűjteni, ANKI cikkeket kell létrehozni a szavak listájából, és be kell vinni őket az ANKI adatbázisába. E célra a következő projekt készült el data2anki. Ez képes befogadni egy szavak listáját, lefordítani, ANKI *.html cikkeket létrehozni és elmenteni őket az ANKI adatbázisába. A cikk végén utasítások találhatók arról, hogyan lehet használni. Most viszont itt a második történet, ahol az ismétlődő tanulás hasznos lehet.

Második történet.

Minden ember, aki keresi a kevésbé vagy jobban kvalifikált szakmát, beleértve a programozókat is, szembesül az interjúra való felkészülés szükségességével. Sok olyan fogalom merül fel az interjún, amelyet a napi gyakorlatban nem használsz, és ezek elfelejtődnek. Az interjúra való felkészülés során, miközben átnéztem a jegyzetem, könyvet, kézikönyvet, észrevettem, hogy nagyon sok időt és figyelmet igényel az információ kiszűrése, amit már tudsz, mivel ez nem mindig nyilvánvaló, és alaposan át kell nézni, hogy megértsd, hogy ez irreleváns-e. Amikor pedig egy olyan témához érsz, amelyet valóban át kell nézned, nagyon gyakran előfordul, hogy már fáradt vagy, és a felkészülés minősége szenved. Egy pillanatban azt gondoltam, miért ne használhatnék ANKI kártyákat is ehhez? Például egy téma jegyzetelésekor azonnal létrehozni a jegyzetet kérdés-válasz formájában, majd az ismétlés során azonnal tudni fogod, tudod-e a választ erre a kérdésre.

A probléma csak annyi volt, hogy a kérdések begépelése nagyon hosszadalmas és unalmas. A folyamat megkönnyítésére a data2anki projektbe funkciót adtam hozzá, hogy konvertálhat markdown Szöveg az ANKI kártyákban. Minden, amire szüksége van, egy nagy fájl megírása, amelyben a kérdések és válaszok előre meghatározott karakterekkel vannak jelölve, hogy a parszer megértse, hol van a kérdés és hol a válasz.

Miután ez a fájl elkészült, elindítja a data2anki-t, és az létrehozza az ANKI kártyákat. Az eredeti fájl könnyen szerkeszthető és megosztható, csak törölni kell a megfelelő kártyát(k), és újra el kell indítani a programot, és az új változat létrejön.

Telepítés és használat

  1. ANKI és AnkiConnect telepítése

    1. Az ANKI letöltése innen: https://apps.ankiweb.net/
    2. Az AnkiConnect bővítmény telepítése: https://ankiweb.net/shared/info/2055492159

  2. Telepítés data2anki

    1. Letöltés data2anki a github tárolóból
      git clone https://github.com/anatoly314/data2anki
    2. A függőségek telepítése
      cd data2anki && npm install
    3. A Java függőségek letöltése https://github.com/anatoly314/data2anki/releases/download/0.1.0/jar-dependencies.zip
    4. Kicsomagolás jar-dependencies.zip és az összes tartalom áthelyezése ide: data2anki/java/jars

  3. Szavak fordítására használva:

    1. A fájlban data2anki/config.json:

      • a kulcsban mód az értéket kell megadnia dsl2anki

      • a kulcsban modules.dsl.anki.deckName és modules.dsl.anki.modelName ügyeljen, hogy az alábbiak szerint adja meg: Deck Name és Model Name (ezeket már létre kellett hozni a kártyák elkészítése előtt). Jelenleg csak a Basic:

        típusú modell támogatott, amelynek van eleje és hátulja, és egy kártyát hoz létre. Az elülső mezőbe beírt szöveg a kártya elején fog megjelenni, a hátsó mezőbe beírt szöveg pedig a kártya hátoldalán.

        ahol az eredeti szó a Front field, míg a fordítás a Back field.

        mezőben található. Nincs probléma a támogatás hozzáadásával Basic (és fordított kártya), ahol az adott szónak és fordításának létrehozásakor egy visszafelé irányuló kártyát is létrehoznak, ahol a fordítás alapján emlékeznünk kell az eredeti szóra. Csak időre és akaratodra van szükség.

      • a kulcsban modules.dsl.dictionariesPath meg kell adnia egy tömböt a csatlakoztatott *.dsl szótárakkal. Minden csatlakoztatott szótár egy könyvtár, amely tartalmazza a szótár fájljait a következő formátumban: A DSL szótár felépítése

      • a kulcsban modules.dsl.wordToTranslatePath meg kell adnia azokat a szavakat tartalmazó lista útját, amelyeket le szeretne fordítani.

    2. Elindítja a működő ANKI alkalmazást
      node data2ankiindex.js
    3. NYERESÉG!!!

  4. Markdownból kártyák létrehozásához használat

    1. A fájlban data2anki/config.json:

      • a kulcsban mód az értéket kell megadnia markdown2anki
      • a kulcsban modules.markdown.anki.deckName és modules.dsl.anki.modelName ügyeljen, hogy az alábbiak szerint adja meg: Deck Name és Model Name (ezeket már létre kellett hozni a kártyák elkészítése előtt). A markdown2anki modul esetében csak a Basic.
      • a kulcsban modules.markdown.selectors.startQuestionSelectors és modules.markdown.selectors.startAnswerSelectors szelvények megadásával jelöli meg a kérdés és válasz kezdetét. Maga a szelvény sor nem kerül elemzésre, és a kártyába nem kerül be, a parser a következő sorral kezdi meg a munkát.

        Például ez az kérdés/válasz kártya:

        Két történet arról, hogyan segíthet az ANKI a külföldi nyelv elsajátításában és az interjúra való felkészülésben

        Markdown formátumban így fog kinézni:
        #QUESTION#
        ## Question 5. Write a mul function which will work properly when invoked with following syntax.
        
        ```javascript
        console.log(mul(2)(3)(4)); // output : 24
        console.log(mul(4)(3)(4)); // output : 48
        ```
        #ANSWER#
        Below is the code followed by the explanation of how it works:
        
        ```javascript
        function mul (x) {
          return function (y) { // anonymous function
            return function (z) { // anonymous function
              return x * y * z;
            };
          };
        }
        ```
        
        Here the `mul` function accepts the first argument and returns the anonymous function which takes the second parameter and returns the anonymous function which takes the third parameter and returns the multiplication of arguments which is being passed in successive
        
        In Javascript function defined inside has access to outer function variable and function is the first class object so it can be returned by the function as well and passed as an argument in another function.
        - A function is an instance of the Object type
        - A function can have properties and has a link back to its constructor method
        - A function can be stored as variable
        - A function can be pass as a parameter to another function
        - A function can be returned from another function
        

        Példa innen lett véve: 123-JavaScript-Interjú-Kérdések

        Még van egy példa fájl a projekt mappájában examples/markdown2anki-example.md

      • a kulcsban modules.markdown.pathToFile
        adják meg, hogy hol található a fájl *.md kérdés-válasz fájl

    2. Elindítja a működő ANKI alkalmazást
      node data2ankiindex.js
    3. NYERESÉG!!!

Így néz ki mobiltelefonon:

Videó lejátszása

Eredmény

A desktop verzióval készült ANKI kártyák probléma nélkül szinkronizálódnak az ANKI felhővel (ingyen 100mb-ig), utána már bárhol használhatók. Vannak ügyfelek Androidra és iPhone-ra, a böngészőben is használható. Ha tehát van egy kis szabadidőd, amire nem tudsz mást költeni, tanulj valami újat ahelyett, hogy céltalanul görgetnél a Facebookon vagy macskákat nézegetnél az Instagramon.

Epilógus

Ahogy már említettem, ez inkább egy munkában lévő POC, amit lehet használni, mint egy kész termék. A DSL parser szabványának körülbelül 30%-a nincs implementálva, ezért például nem minden szótári cikk, ami a szótárakban megtalálható, található meg, emellett van egy ötletem átírni JavaScript, mert szeretném a „konzisztenciát”, és különben is, jelenleg nem túl optimálisan van megírva. Jelenleg a parser fát épít, ami szerintem felesleges és bonyolítja a kódot. A markdown2anki kép üzemmódban a képek nem parszolva. Fokozatosan próbálom majd csinálni, de mivel most magamnak írom, először azokat a nehézségeket szeretném megoldani, amikbe belefutok, de ha valaki segíteni szeretne, szívesen látjuk. Ha kérdéseid vannak a programmal kapcsolatban, szívesen segítek a megfelelő projektek nyitott problémáiban. A fennmaradó kritikákat és javaslatokat itt írd. Remélem, valakinek hasznos lesz ez a projekt.

P.S. Ha hibákat észleltél (és sajnos vannak), írj nekem, mindent kijavítok.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster