To historier om, hvordan ANKI kan hjælpe dig med at lære et fremmedsprog og forberede dig til et interview

Jeg har altid troet, at en doven programmør er en god programmør. Hvorfor? Fordi bed en hårdtarbejdende om at gøre noget, han vil gå hen og gøre det. Og en doven programmør vil bruge 2-3 gange mere tid, men vil skrive et script, der vil gøre det for ham. Det kan tage urimelig lang tid at gøre dette første gang, men med gentagne opgaver vil denne tilgang betale sig meget hurtigt. Jeg betragter mig selv som en doven programmør. Det var præamblen, lad os nu gå i gang.

Historie en

For et par år siden spekulerede jeg på, hvordan jeg kunne forbedre mit engelsk. Der kom ikke noget bedre til at tænke på end at læse litteratur. Jeg købte en elektronisk læser, downloadede bøger og begyndte at læse. Mens jeg læste, stødte jeg hele tiden på ukendte ord. Jeg oversatte dem straks ved hjælp af de indbyggede ordbøger i læseren, men jeg lagde mærke til én funktion: ordene ønskede ikke at blive husket. Da jeg stødte på dette ord igen et par sider senere, havde jeg med 90 % sandsynlighed igen brug for oversættelse, og det skete hver gang. Konklusionen var, at det ikke var nok blot at oversætte ukendte ord, mens du læser, du skal gøre noget andet. Den ideelle mulighed ville være at introducere det i hverdagen og begynde at bruge det, men jeg bor ikke i et engelsktalende land, og det er usandsynligt. Så kom jeg i tanke om, at jeg engang læste om Mellemrum gentagelse.

Hvad er det og hvad spises det med? Kort sagt, der er dette glemmekurve, yderligere citat fra Wikipedia:

Allerede inden for den første time er op til 60 % af al modtaget information glemt; 10 timer efter memorering forbliver 35 % af det lærte i hukommelsen. Derefter fortsætter processen med at glemme langsomt, og efter 6 dage forbliver omkring 20% ​​af det samlede antal oprindeligt lærte stavelser i hukommelsen, og den samme mængde forbliver i hukommelsen efter en måned.

Og konklusionen herfra

De konklusioner, der kan drages på baggrund af denne kurve, er, at for effektiv memorering er det nødvendigt at gentage det lagrede materiale.

Så vi fik en idé mellemrum gentagelse.

ANKI er et helt gratis og open source-program, der implementerer ideen om afstandsgentagelse. Kort sagt har computeriserede flash-kort et spørgsmål på den ene side og et svar på den anden. Da du kan stille spørgsmål/svar ved hjælp af almindelig html/css/javascript, så kan vi sige, at det har virkelig ubegrænsede muligheder. Derudover kan den udvides med special plugins, og en af ​​dem vil være meget nyttig for os i fremtiden.

Manuel oprettelse af kort er langt, kedeligt, og med stor sandsynlighed vil du efter et stykke tid glemme denne opgave, og så på et tidspunkt stillede jeg mig selv spørgsmålet, er det muligt at automatisere denne opgave. Svaret er ja, det kan du. Og jeg gjorde det. Jeg vil sige med det samme, det er mere POC (Proof of concept), men som kan bruges. Hvis der er interesse fra brugere og andre udviklere bliver involveret, så kan det bringes til et færdigt produkt, som selv teknisk analfabeter kan bruge. Nu kræver det en vis viden om programmering at bruge mit hjælpeprogram.

Jeg læser bøger ved hjælp af programmet LUFTLEDER. Den har mulighed for at forbinde eksterne ordbøger, og når du oversætter et ord, gemmer den det ord, du kaldte til oversættelse, til en tekstfil. Det eneste, der er tilbage, er at oversætte disse ord og skabe ANKI-kort.

Først prøvede jeg at bruge til oversættelse Google Translate, Lingvo API etc. Men tingene fungerede ikke med gratis tjenester. Jeg opbrugte den frie grænse under udviklingsprocessen, desuden havde jeg i henhold til licensbetingelserne ikke ret til at cache ord. På et tidspunkt indså jeg, at jeg selv skulle oversætte ordene. Som et resultat blev der skrevet et modul dsl2html som du kan forbinde til DSL ordbøger og hvem ved, hvordan man konverterer dem til HTML format.

Sådan ser en ordbogspost ud i *. Html, min mulighed i forhold til muligheden GoldenDict

To historier om, hvordan ANKI kan hjælpe dig med at lære et fremmedsprog og forberede dig til et interview

Før jeg leder efter et ord i forbundne ordbøger, bringer jeg det til ordbogsform (lemma) ved at bruge biblioteket Stanford CoreNLP. Faktisk begyndte jeg på grund af dette bibliotek at skrive i Java, og den oprindelige plan var at skrive alt på Java, men i processen fandt jeg biblioteket node-java hvormed du relativt nemt kan eksekvere Java-kode fra nodejs og noget af koden er skrevet i JavaScript. Hvis jeg havde fundet dette bibliotek tidligere, ville der ikke være skrevet en eneste linje i Java. Et andet sideprojekt, der blev født i processen, er skabelsen repository med DSL-dokumentation som blev fundet på netværket i formatet *.chm, konverteret og bragt i guddommelig form. Hvis forfatteren af ​​den originale fil er en bruger med kaldenavn yozhic Når han ser denne artikel, takker jeg ham meget for det arbejde, han har udført, uden hans dokumentation ville det højst sandsynligt ikke være lykkedes mig.

Så jeg har et ord på engelsk, dets ordbogsindgang i formatet *. Html, det eneste, der er tilbage, er at sætte alt sammen, oprette ANKI-artikler fra listen over ord og indtaste dem i ANKI-databasen. Til dette formål blev følgende projekt oprettet data2anki. Det kan tage en liste over ord som input, oversættelse, oprettelse af ANKI *. Html artikler og registrere dem i ANKI-databasen. I slutningen af ​​artiklen er der instruktioner om, hvordan du bruger det. I mellemtiden er den anden historie, hvor gentagelser med mellemrum kan være nyttige.

Den anden historie.

Alle mennesker på jagt efter et mere/mindre kvalificeret speciale, inklusive programmører, står over for behovet for at forberede sig til et interview. Mange af de begreber, der bliver spurgt til i interviews, bruger du ikke i hverdagens praksis, og de bliver glemt. Når jeg forberedte mig til et interview, bladrede notater, en bog, en opslagsbog, stod jeg over for, at det kræver meget tid og opmærksomhed at bortfiltrere information, som du allerede kender, fordi det ikke altid er indlysende, og du skal læs det omhyggeligt for at forstå, hvad det er irrelevant. Når du kommer til et emne, der virkelig trænger til at blive gentaget, sker det ofte, at du allerede er træt, og kvaliteten af ​​din forberedelse lider. På et tidspunkt tænkte jeg, hvorfor ikke også bruge ANKI-kort til dette? For eksempel, når du tager noter om et emne, skal du straks oprette en note i form af et spørgsmål og svar, og når du så gentager det, vil du straks vide, om du kender svaret på dette spørgsmål eller ej.

Det eneste problem, der opstod, var, at det var meget langt og kedeligt at skrive spørgsmål. For at gøre processen lettere, data2anki projekt Jeg tilføjede konverteringsfunktionalitet markdown tekst i ANKI-kort. Alt du behøver er at skrive en stor fil, hvor spørgsmål og svar vil blive markeret med en forudbestemt rækkefølge af tegn, hvorved parseren vil forstå, hvor spørgsmålet er, og hvor svaret er.

Når denne fil er oprettet, kører du data2anki, og den opretter ANKI-kort. Den originale fil er nem at redigere og dele, du skal blot slette det eller de tilsvarende kort og køre programmet igen, og en ny version vil blive oprettet.

Installation og brug

  1. Installation af ANKI + AnkiConnect

    1. Download ANKI herfra: https://apps.ankiweb.net/
    2. Installer AnkiConnect plugin: https://ankiweb.net/shared/info/2055492159

  2. Installation data2anki

    1. Hent data2anki fra github repository
      git clone https://github.com/anatoly314/data2anki
    2. Installer afhængigheder
      cd data2anki && npm install
    3. Download java-afhængigheder https://github.com/anatoly314/data2anki/releases/download/0.1.0/jar-dependencies.zip
    4. Udpakning jar-dependencies.zip og læg dens indhold i data2anki/java/jars

  3. Brug til at oversætte ord:

    1. I fil data2anki/config.json:

      • i nøglen tilstand indtast værdien dsl2anki

      • i nøglen modules.dsl.anki.deckName и modules.dsl.anki.modelName skriv derefter Dæks navn и Modelnavn (skal allerede være oprettet, før du opretter kort). I øjeblikket understøttes kun modeltypen Grundlæggende:

        Har for- og bagfelter, og vil oprette ét kort. Tekst, du indtaster foran, vises på forsiden af ​​kortet, og tekst, du indtaster på bagsiden, vises på bagsiden af ​​kortet.

        hvor er det oprindelige ord? Forreste felt, og oversættelsen vil være i Bagerste felt.

        Der er ikke noget problem at tilføje support Grundlæggende (og omvendt kort), hvor der vil blive oprettet et omvendt kort for ordet og oversættelsen, hvor du ud fra oversættelsen skal huske det originale ord. Alt du behøver er tid og lyst.

      • i nøglen modules.dsl.dictionariesPath registrer et array med tilsluttet *.dsl ordbøger. Hver tilsluttet ordbog er en mappe, hvori ordbogsfilerne er placeret i overensstemmelse med formatet: DSL ordbog struktur

      • i nøglen modules.dsl.wordToTranslatePath indtast stien til listen over ord, du vil oversætte.

    2. Start med ANKI-applikationen kørende
      node data2ankiindex.js
    3. PROFIT!!!

  4. Bruges til at oprette kort fra markdown

    1. I fil data2anki/config.json:

      • i nøglen tilstand indtast værdien markdown2anki
      • i nøglen modules.markdown.anki.deckName и modules.dsl.anki.modelName skriv derefter Dæks navn и Modelnavn (skal allerede være oprettet, før du opretter kort). Til markdown2anki Kun modeltype understøttes Grundlæggende.
      • i nøglen modules.markdown.selectors.startQuestionSelectors и modules.markdown.selectors.startAnswerSelectors du skriver vælgere, som du markerer begyndelsen af ​​henholdsvis spørgsmål og svar med. Linjen med selve vælgeren vil ikke blive parset og vil ikke ende på kortet; parseren vil begynde at arbejde fra næste linje.

        For eksempel dette spørgsmål/svar-kort:

        To historier om, hvordan ANKI kan hjælpe dig med at lære et fremmedsprog og forberede dig til et interview

        Det vil se sådan ud i markdown:
        #QUESTION# ## Spørgsmål 5. Skriv en mul-funktion, som vil fungere korrekt, når den aktiveres med følgende syntaks. ```javascript console.log(mul(2)(3)(4)); // output : 24 console.log(mul(4)(3)(4)); // output : 48 ``` #ANSWER# Nedenfor er koden efterfulgt af en forklaring på hvordan det virker: ```javascript function mul (x) { return function (y) { // anonymous function return function (z) { // anonym funktion returnerer x * y * z; }; }; } ``` Her accepterer `mul`-funktionen det første argument og returnerer den anonyme funktion, som tager den anden parameter og returnerer den anonyme funktion, som tager den tredje parameter og returnerer multiplikationen af ​​argumenter, som sendes i successiv. I Javascript-funktion defineret inde har adgang til ydre funktionsvariabel og funktion er det første klasseobjekt, så det kan returneres af funktionen også og sendes som et argument i en anden funktion. - En funktion er en instans af objekttypen - En funktion kan have egenskaber og har et link tilbage til dens konstruktørmetode - En funktion kan lagres som variabel - En funktion kan overføres som en parameter til en anden funktion - En funktion kan være returneret fra en anden funktion
        

        Eksempel taget herfra: 123-JavaScript-interview-spørgsmål

        Der er også en fil med eksempler i projektmappen examples/markdown2anki-example.md

      • i nøglen modules.markdown.pathToFile
        skriv stien til filen ned hvor *.md spørgsmål/svar fil

    2. Start med ANKI-applikationen kørende
      node data2ankiindex.js
    3. PROFIT!!!

Sådan ser det ud på en mobiltelefon:

Outcome

Kort modtaget på desktopversionen af ​​ANKI synkroniseres uden problemer med ANKI-skyen (gratis op til 100mb), og så kan du bruge dem overalt. Der er klienter til Android og iPhone, og du kan også bruge det i en browser. Som et resultat, hvis du har tid, som du ikke har noget at bruge på, kan du i stedet for formålsløst at scrolle gennem Facebook eller katte på Instagram lære noget nyt.

Epilog

Som jeg nævnte, er dette mere en fungerende POC, som du kan bruge, end et færdigt produkt. Omkring 30 % af DSL-parserstandarden er ikke implementeret, og derfor for eksempel kan ikke alle ordbogsposter, der er i ordbøger, findes, er der også en idé at omskrive den i JavaScript, fordi jeg vil have “konsistens”, og desuden er det nu ikke skrevet særlig optimalt. Nu bygger parseren et træ, men efter min mening er dette unødvendigt og behøver ikke at komplicere koden. I markdown2anki tilstand, parses billederne ikke. Jeg vil forsøge at skære lidt efter lidt, men da jeg skriver for mig selv, vil jeg først og fremmest løse de problemer, som jeg selv vil træde på, men hvis nogen vil hjælpe, så er du velkommen. Har du spørgsmål til programmet, hjælper jeg gerne igennem åbne problemstillinger i de relevante projekter. Skriv anden kritik og forslag her. Jeg håber, at dette projekt vil være nyttigt for nogen.

PS Hvis du bemærker nogen fejl (og desværre er der nogle), så skriv til mig i en personlig besked, jeg retter alt.

Kilde: www.habr.com

Tilføj en kommentar