To historier om hvordan ANKI kan hjelpe deg med å lære et fremmedspråk og forberede deg til intervjuer

Jeg har alltid trodd at en lat programmerer er en god programmerer. Hvorfor? Fordi spør en hard arbeider om å gjøre noe, han vil gå og gjøre det. Og en lat programmerer vil bruke 2-3 ganger mer tid, men vil skrive et manus som vil gjøre det for ham. Det kan ta urimelig lang tid å gjøre dette første gang, men med gjentatte oppgaver vil denne tilnærmingen lønne seg veldig raskt. Jeg anser meg selv som en lat programmerer. Det var ingressen, la oss nå komme i gang.

Historie en

For noen år siden lurte jeg på hvordan jeg kunne forbedre engelsken min. Ingenting kom til å tenke bedre enn å lese litteratur. Jeg kjøpte en elektronisk leser, lastet ned bøker og begynte å lese. Mens jeg leste kom jeg stadig over ukjente ord. Jeg oversatte dem umiddelbart ved hjelp av ordbøkene innebygd i leseren, men jeg la merke til en funksjon: ordene ønsket ikke å bli husket. Da jeg kom over dette ordet igjen noen sider senere, med 90 % sannsynlighet, trengte jeg igjen oversettelse, og dette skjedde hver gang. Konklusjonen var at det ikke var nok å bare oversette ukjente ord mens du leser, du må gjøre noe annet. Det ideelle alternativet ville være å introdusere det i hverdagen og begynne å bruke det, men jeg bor ikke i et engelsktalende land, og dette er usannsynlig. Så husket jeg at jeg en gang leste om Mellomrom repetisjon.

Hva er det og hva spises det med? Kort sagt, det er dette glemmekurve, ytterligere sitat fra Wikipedia:

Allerede i løpet av den første timen blir opptil 60 % av all informasjon mottatt glemt; 10 timer etter memorering forblir 35 % av det lærte i minnet. Deretter fortsetter prosessen med å glemme sakte, og etter 6 dager forblir omtrent 20% av det totale antallet opprinnelig lærte stavelser i minnet, og samme mengde forblir i minnet etter en måned.

Og konklusjonen herfra

Konklusjonene som kan trekkes basert på denne kurven er at for effektiv memorering er det nødvendig å gjenta det lagrede materialet.

Så vi kom opp med en idé repetisjon med mellomrom.

ANKI er et helt gratis og åpen kildekode-program som implementerer ideen om repetisjon med mellomrom. Enkelt sagt har datastyrte flash-kort et spørsmål på den ene siden og et svar på den andre. Siden du kan gjøre spørsmål/svar ved å bruke vanlig html/css/javascript, så kan vi si at den har virkelig ubegrensede muligheter. I tillegg kan den utvides med spesial plugins, og en av dem vil være svært nyttig for oss i fremtiden.

Å lage kort manuelt er langt, kjedelig, og med stor sannsynlighet vil du etter en stund glemme denne oppgaven, og så på et tidspunkt stilte jeg meg selv spørsmålet om det er mulig å automatisere denne oppgaven. Svaret er ja, det kan du. Og jeg gjorde det. Jeg vil si med en gang, det er mer POC (Proof of concept), men som kan brukes. Hvis det er interesse fra brukere og andre utviklere engasjerer seg, så kan det bringes til et ferdig produkt som selv teknisk analfabeter kan bruke. Nå krever det litt kunnskap om programmering å bruke verktøyet mitt.

Jeg leser bøker ved hjelp av programmet Luftleser. Den har muligheten til å koble til eksterne ordbøker, og når du oversetter et ord, lagrer den ordet du kalte for oversettelse til en tekstfil. Alt som gjenstår er å oversette disse ordene og lage ANKI-kort.

Først prøvde jeg å bruke til oversettelse Google Trans, Lingvo API etc. Men ting fungerte ikke med gratistjenester. Jeg brukte frigrensen under utviklingsprosessen, i tillegg, i henhold til lisensvilkårene, hadde jeg ikke rett til å bufre ord. På et tidspunkt innså jeg at jeg trengte å oversette ordene selv. Som et resultat ble det skrevet en modul dsl2html som du kan koble til DSL-ordbøker og hvem vet hvordan man konverterer dem til HTML format.

Slik ser en ordbokoppføring ut i *. Html, mitt alternativ sammenlignet med alternativet GoldenDict

To historier om hvordan ANKI kan hjelpe deg med å lære et fremmedspråk og forberede deg til intervjuer

Før jeg leter etter et ord i tilkoblede ordbøker, tar jeg det til ordbokform (lemma) ved hjelp av biblioteket Stanford CoreNLP. Faktisk, på grunn av dette biblioteket, begynte jeg å skrive i Java og den opprinnelige planen var å skrive alt i Java, men i prosessen fant jeg biblioteket node-java som du relativt enkelt kan kjøre Java-kode med fra nodejs og noe av koden er skrevet i JavaScript. Hvis jeg hadde funnet dette biblioteket tidligere, ville ikke en eneste linje blitt skrevet i Java. Et annet sideprosjekt som ble født i prosessen er skapelsen repository med DSL-dokumentasjon som ble funnet på nettverket i formatet *.chm, konvertert og brakt inn i guddommelig form. Hvis forfatteren av den opprinnelige filen er en bruker med kallenavn yozhic Når han ser denne artikkelen, takker jeg ham veldig for arbeidet han har gjort, uten hans dokumentasjon hadde jeg mest sannsynlig ikke lykkes.

Så jeg har et ord på engelsk, dets ordbokoppføring i formatet *. Html, alt som gjenstår er å sette alt sammen, lage ANKI-artikler fra listen over ord og legge dem inn i ANKI-databasen. For dette formålet ble følgende prosjekt opprettet data2anki. Det kan ta en liste med ord som input, oversettelse, opprette ANKI *. Html artikler og registrere dem i ANKI-databasen. På slutten av artikkelen er det instruksjoner om hvordan du bruker den. I mellomtiden er den andre historien der repetisjoner med mellomrom kan være nyttige.

Den andre historien.

Alle mennesker på jakt etter en mer/mindre kvalifisert spesialitet, inkludert programmerere, står overfor behovet for å forberede seg til et intervju. Mange av begrepene som spørres i intervjuer bruker du ikke i praksishverdagen og de blir glemt. Når jeg forberedte meg til et intervju, bladde i notater, en bok, en oppslagsbok, ble jeg møtt med det faktum at det tar mye tid og oppmerksomhet å sile ut informasjon som du allerede vet fordi den ikke alltid er åpenbar og du må les den nøye for å forstå hva den er irrelevant. Når du kommer til et tema som virkelig må gjentas, hender det ofte at du allerede er sliten og kvaliteten på forberedelsene blir dårligere. På et tidspunkt tenkte jeg, hvorfor ikke bruke ANKI-kort til dette også? For eksempel, når du tar notater om et emne, lag umiddelbart et notat i form av et spørsmål og svar, og når du gjentar det, vil du umiddelbart vite om du vet svaret på dette spørsmålet eller ikke.

Det eneste problemet som oppsto var at det var veldig langt og kjedelig å skrive ut spørsmål. For å gjøre prosessen enklere, data2anki prosjekt Jeg la til konverteringsfunksjonalitet Markdown tekst i ANKI-kort. Alt du trenger er å skrive en stor fil der spørsmål og svar vil bli merket med en forhåndsbestemt sekvens av tegn, slik at parseren vil forstå hvor spørsmålet er og hvor svaret er.

Når denne filen er opprettet, kjører du data2anki og den lager ANKI-kort. Den originale filen er enkel å redigere og dele, du trenger bare å slette det eller de tilsvarende kortene og kjøre programmet på nytt, og en ny versjon vil bli opprettet.

Installasjon og bruk

  1. Installerer ANKI + AnkiConnect

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

  2. Installasjon data2anki

    1. nedlasting data2anki fra github-depotet
      git clone https://github.com/anatoly314/data2anki
    2. Installer avhengigheter
      cd data2anki && npm install
    3. Last ned java-avhengigheter https://github.com/anatoly314/data2anki/releases/download/0.1.0/jar-dependencies.zip
    4. Pakker ut jar-dependencies.zip og plasser innholdet i data2anki/java/jars

  3. Bruk til å oversette ord:

    1. I fil data2anki/config.json:

      • i nøkkelen modus angi verdien dsl2anki

      • i nøkkelen modules.dsl.anki.deckName и modules.dsl.anki.modelName skriv deretter Dekk navn и Modellnavn (må allerede være opprettet før du oppretter kort). Foreløpig støttes bare modelltypen grunn~~POS=TRUNC:

        Har for- og bakfelt, og vil lage ett kort. Tekst du skriver inn foran vil vises på forsiden av kortet, og tekst du skriver inn på baksiden vil vises på baksiden av kortet.

        hvor er det opprinnelige ordet? Fremre felt, og oversettelsen vil være i Bakfelt.

        Det er ikke noe problem å legge til støtte Grunnleggende (og omvendt kort), hvor det opprettes et omvendt kort for ordet og oversettelsen, hvor du basert på oversettelsen må huske det originale ordet. Alt du trenger er tid og lyst.

      • i nøkkelen modules.dsl.dictionariesPath registrere en matrise med tilkoblet *.dsl ordbøker. Hver tilkoblede ordbok er en katalog der ordbokfilene er plassert i samsvar med formatet: DSL-ordbokstruktur

      • i nøkkelen modules.dsl.wordToTranslatePath skriv inn banen til listen over ord du vil oversette.

    2. Start med ANKI-applikasjonen kjørende
      node data2ankiindex.js
    3. PROFITT!!!

  4. Brukes for å lage kort fra markdown

    1. I fil data2anki/config.json:

      • i nøkkelen modus angi verdien markdown2anki
      • i nøkkelen modules.markdown.anki.deckName и modules.dsl.anki.modelName skriv deretter Dekk navn и Modellnavn (må allerede være opprettet før du oppretter kort). Til markdown2anki Bare modelltypen støttes i modus grunn~~POS=TRUNC.
      • i nøkkelen modules.markdown.selectors.startQuestionSelectors и modules.markdown.selectors.startAnswerSelectors du skriver velgere som du markerer begynnelsen av henholdsvis spørsmål og svar med. Linjen med selve velgeren vil ikke bli analysert og vil ikke ende opp på kortet; parseren vil begynne å jobbe fra neste linje.

        For eksempel dette spørsmål/svar-kortet:

        To historier om hvordan ANKI kan hjelpe deg med å lære et fremmedspråk og forberede deg til intervjuer

        Det vil se slik ut i markdown:
        #SPØRSMÅL# ## Spørsmål 5. Skriv en mul-funksjon som vil fungere riktig når den startes 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 etterfulgt av forklaringen på hvordan det fungerer: ```javascript function mul (x) { return function (y) { // anonymous function return function (z) { // anonym funksjon returner x * y * z; }; }; } ``` Her aksepterer `mul`-funksjonen det første argumentet og returnerer den anonyme funksjonen som tar den andre parameteren og returnerer den anonyme funksjonen som tar den tredje parameteren og returnerer multiplikasjonen av argumenter som sendes i rekkefølge. I Javascript-funksjonen definert inne har tilgang til ytre funksjonsvariabel og funksjon er det første klasseobjektet slik at det kan returneres av funksjonen også og sendes som et argument i en annen funksjon. - En funksjon er en instans av objekttypen - En funksjon kan ha egenskaper og har en lenke tilbake til sin konstruktørmetode - En funksjon kan lagres som variabel - En funksjon kan overføres som en parameter til en annen funksjon - En funksjon kan være returnert fra en annen funksjon
        

        Eksempel hentet herfra: 123-JavaScript-intervju-spørsmål

        Det er også en fil med eksempler i prosjektmappen examples/markdown2anki-example.md

      • i nøkkelen modules.markdown.pathToFile
        skriv ned banen til filen der *.md spørsmål/svar-fil

    2. Start med ANKI-applikasjonen kjørende
      node data2ankiindex.js
    3. PROFITT!!!

Slik ser det ut på en mobiltelefon:

Resultat

Kort mottatt på skrivebordsversjonen av ANKI synkroniseres uten problemer med ANKI-skyen (gratis opp til 100mb), og da kan du bruke dem overalt. Det finnes klienter for Android og iPhone, og du kan også bruke den i en nettleser. Som et resultat, hvis du har tid som du ikke har noe å bruke på, kan du i stedet for å bla gjennom Facebook eller katter på Instagram uten mål, lære noe nytt.

Epilog

Som jeg nevnte, er dette mer en fungerende POC som du kan bruke enn et ferdig produkt. Omtrent 30 % av DSL-parserstandarden er ikke implementert, og derfor for eksempel kan ikke alle ordbokoppføringer som er i ordbøker finnes, er det også en idé å skrive den om i Javascript, fordi jeg vil ha "konsistens", og dessuten er det nå ikke skrevet særlig optimalt. Nå bygger parseren et tre, men etter min mening er dette unødvendig og trenger ikke komplisere koden. I markdown2anki modus, blir bildene ikke analysert. Jeg skal prøve å kutte litt etter litt, men siden jeg skriver for meg selv skal jeg først og fremst løse problemene som jeg selv skal tråkke på, men hvis noen vil hjelpe, så er dere velkommen. Har du spørsmål om programmet hjelper jeg gjerne gjennom åpne problemstillinger i de aktuelle prosjektene. Skriv annen kritikk og forslag her. Jeg håper dette prosjektet vil være nyttig for noen.

PS Hvis du oppdager noen feil (og dessverre er det noen), skriv til meg i en personlig melding, jeg retter alt.

Kilde: www.habr.com

Legg til en kommentar