Due storie su come ANKI può aiutarti a imparare una lingua straniera e a prepararti per i colloqui

Ho sempre creduto che un programmatore pigro sia un buon programmatore. Perché? Perché chiedi a un gran lavoratore di fare qualcosa, lui andrà a farlo. E un programmatore pigro impiegherà 2-3 volte più tempo, ma scriverà uno script che lo farà per lui. Potrebbe volerci un tempo irragionevolmente lungo per eseguire questa operazione la prima volta, ma con attività ripetute questo approccio ripagherà molto rapidamente. Mi considero un programmatore pigro. Questo era il preambolo, ora passiamo al sodo.

Prima storia

Qualche anno fa mi chiedevo come avrei potuto migliorare il mio inglese. Non mi è venuto in mente niente di meglio che leggere letteratura. Ho acquistato un lettore elettronico, ho scaricato libri e ho iniziato a leggere. Durante la lettura continuavo a imbattermi in parole sconosciute. Li ho subito tradotti utilizzando i dizionari integrati nel lettore, ma ho notato una caratteristica: le parole non volevano essere ricordate. Quando mi sono imbattuto di nuovo in questa parola qualche pagina dopo, con una probabilità del 90% avevo di nuovo bisogno di una traduzione, e questo è successo ogni volta. La conclusione è stata che non basta semplicemente tradurre parole sconosciute durante la lettura, bisogna fare qualcos'altro. L’ideale sarebbe introdurlo nella vita di tutti i giorni e iniziare ad usarlo, ma non vivo in un paese anglofono e questo è improbabile. Poi mi sono ricordato di ciò che avevo letto una volta Ripetizione distanziata.

Cos'è e con cosa si mangia? In breve, c'è questo curva da dimenticare, ulteriore citazione da Wikipedia:

Già entro la prima ora si dimentica fino al 60% di tutte le informazioni ricevute; 10 ore dopo la memorizzazione, rimane in memoria il 35% di quanto appreso. Quindi il processo di dimenticanza procede lentamente e dopo 6 giorni circa il 20% del numero totale di sillabe inizialmente apprese rimane in memoria, e la stessa quantità rimane in memoria dopo un mese.

E da qui la conclusione

Le conclusioni che si possono trarre sulla base di questa curva sono che per una memorizzazione efficace è necessario ripetere il materiale memorizzato.

Quindi ci è venuta un'idea ripetizione spaziata.

АNKI è un programma completamente gratuito e open source che implementa l'idea della ripetizione spaziata. In poche parole, le flashcard computerizzate hanno una domanda da un lato e una risposta dall'altro. Dal momento che puoi fare domande/risposte usando normal html/css/javascript, allora possiamo dire che ha possibilità davvero illimitate. Inoltre, è espandibile con special plugin, e uno di questi ci sarà molto utile in futuro.

Creare manualmente le carte è lungo, noioso e con un'alta probabilità che dopo un po' ti dimenticherai di questo compito, quindi ad un certo punto mi sono posto la domanda se è possibile automatizzare questo compito. La risposta è sì, puoi. E l'ho fatto. Lo dirò subito, è di più POC (prova di concetto), ma che può essere utilizzato. Se c'è interesse da parte degli utenti e altri sviluppatori vengono coinvolti, allora si può arrivare a un prodotto finito che può essere utilizzato anche da utenti tecnicamente analfabeti. Ora, l'utilizzo della mia utility richiede una certa conoscenza della programmazione.

Leggo libri utilizzando il programma Lettore di intelligenza artificiale. Ha la capacità di connettere dizionari esterni e, quando traduci una parola, salva la parola che hai chiamato per la traduzione in un file di testo. Non resta che tradurre queste parole e creare carte ANKI.

All'inizio ho provato a usarlo per la traduzione Google Traduttore, API di Lingvo eccetera. Ma le cose non hanno funzionato con i servizi gratuiti. Ho esaurito il limite gratuito durante il processo di sviluppo, inoltre, secondo i termini della licenza, non avevo il diritto di memorizzare nella cache le parole. Ad un certo punto ho capito che dovevo tradurre io stesso le parole. Di conseguenza, è stato scritto un modulo dsl2html a cui puoi connetterti Dizionari DSL e chissà come trasformarli in HTML formato.

Ecco come appare una voce del dizionario in *.html, la mia opzione rispetto all'opzione D'oro Dict

Due storie su come ANKI può aiutarti a imparare una lingua straniera e a prepararti per i colloqui

Prima di cercare una parola nei dizionari collegati, la porto a forma del dizionario (lemma) utilizzando la libreria Stanford CorePNL. Infatti, grazie a questa libreria, ho iniziato a scrivere in Java e il piano originale era di scrivere tutto in Java, ma nel frattempo ho trovato la libreria nodo-java con cui puoi eseguire con relativa facilità codice Java da nodejs e parte del codice è scritto in JavaScript. Se avessi trovato questa libreria prima, non sarebbe stata scritta una sola riga in Java. Un altro progetto parallelo nato nel processo è la creazione repository con la documentazione DSL che è stato trovato in rete nel formato *.chm, convertito e portato in forma divina. Se l'autore del file originale è un utente tramite nickname yozhic Quando vede questo articolo lo ringrazio moltissimo per il lavoro svolto; senza la sua documentazione molto probabilmente non ci sarei riuscito.

Quindi, ho una parola in inglese, la sua voce nel dizionario nel formato *.html, non resta che mettere tutto insieme, creare articoli ANKI dall'elenco di parole e inserirli nel database ANKI. A questo scopo è stato realizzato il seguente progetto data2anki. Può richiedere un elenco di parole come input, tradurre, creare ANKI *.html articoli e registrarli nel database ANKI. Alla fine dell’articolo ci sono le istruzioni su come usarlo. Nel frattempo, la seconda storia è quella in cui le ripetizioni distanziate possono essere utili.

La seconda storia

Tutte le persone alla ricerca di una specialità più o meno qualificata, compresi i programmatori, si trovano ad affrontare la necessità di prepararsi per un colloquio. Molti dei concetti che vengono chiesti nelle interviste non vengono utilizzati nella pratica quotidiana e vengono dimenticati. Mentre mi preparavo per un'intervista, sfogliando appunti, un libro, un libro di consultazione, mi sono trovato di fronte al fatto che ci vuole molto tempo e attenzione per vagliare le informazioni che già conosci perché non sono sempre ovvie e devi leggetelo attentamente per capire di cosa si tratta.. irrilevante. Quando arrivi a un argomento che ha davvero bisogno di essere ripetuto, capita spesso che sei già stanco e la qualità della tua preparazione ne risente. Ad un certo punto ho pensato, perché non usare le carte ANKI anche per questo? Ad esempio, quando prendi appunti su un argomento, crea immediatamente una nota sotto forma di domanda e risposta, e poi quando la ripeti, saprai immediatamente se conosci o meno la risposta a questa domanda.

L'unico problema che si presentava era che scrivere le domande era molto lungo e noioso. Per rendere il processo più semplice, data2anki progetto ho aggiunto la funzionalità di conversione riduione di prezzo testo nelle carte ANKI. Tutto ciò che serve è scrivere un file di grandi dimensioni in cui le domande e le risposte saranno contrassegnate con una sequenza predeterminata di caratteri, grazie alla quale il parser capirà dov'è la domanda e dov'è la risposta.

Una volta creato questo file, esegui data2anki e crea carte ANKI. Il file originale è facile da modificare e condividere, devi solo cancellare le carte corrispondenti ed eseguire nuovamente il programma e verrà creata una nuova versione.

Installazione e utilizzo

  1. Installazione di ANKI + AnkiConnect

    1. Scarica ANKI da qui: https://apps.ankiweb.net/
    2. Installa il plugin AnkiConnect: https://ankiweb.net/shared/info/2055492159

  2. Installazione data2anki

    1. Download data2anki dal repository github
      git clone https://github.com/anatoly314/data2anki
    2. Installa le dipendenze
      cd data2anki && npm install
    3. Scarica le dipendenze Java https://github.com/anatoly314/data2anki/releases/download/0.1.0/jar-dependencies.zip
    4. Disimballaggio jar-dipendenze.zip e inserire il suo contenuto data2anki/java/jars

  3. Utilizzare per tradurre le parole:

    1. In archivio data2anki/config.json:

      • nella chiave modo inserire il valore dsl2anki

      • nella chiave module.dsl.anki.deckName и moduli.dsl.anki.nomemodello scrivi di conseguenza Nome del mazzo и Nome del modello (deve essere già creato prima di creare le carte). Attualmente è supportato solo il tipo di modello Standard:

        Ha i campi Fronte e Retro e creerà una carta. Il testo inserito in Fronte apparirà sul fronte della carta, mentre il testo inserito in Retro apparirà sul retro della carta.

        dov'è la parola originale? Campo anteriore, e la traduzione sarà disponibile Campo posteriore.

        Non ci sono problemi per aggiungere il supporto Base (e carta invertita), dove verrà creata una scheda inversa per la parola e la traduzione, dove in base alla traduzione dovrai ricordare la parola originale. Tutto ciò di cui hai bisogno è tempo e desiderio.

      • nella chiave module.dsl.dictionariesPath registrare un array con connesso *.dsl dizionari. Ogni dizionario connesso è una directory in cui si trovano i file del dizionario secondo il formato: Struttura del dizionario DSL

      • nella chiave moduli.dsl.wordToTranslatePath inserisci il percorso dell'elenco di parole che desideri tradurre.

    2. Avvia con l'applicazione ANKI in esecuzione
      node data2ankiindex.js
    3. PROFITTO!!!

  4. Utilizza per creare carte dal ribasso

    1. In archivio data2anki/config.json:

      • nella chiave modo inserire il valore markdown2anki
      • nella chiave moduli.markdown.anki.deckName и moduli.dsl.anki.nomemodello scrivi di conseguenza Nome del mazzo и Nome del modello (deve essere già creato prima di creare le carte). Per markdown2anki è supportata solo la modalità modello Standard.
      • nella chiave moduli.markdown.selectors.startQuestionSelectors и moduli.markdown.selectors.startAnswerSelectors scrivi selettori con i quali contrassegni rispettivamente l'inizio della domanda e della risposta. La riga con il selettore stesso non verrà analizzata e non finirà nella scheda; il parser inizierà a funzionare dalla riga successiva.

        Ad esempio, questa scheda di domanda/risposta:

        Due storie su come ANKI può aiutarti a imparare una lingua straniera e a prepararti per i colloqui

        Apparirà così nel markdown:
        #QUESTION# ## Domanda 5. Scrivi una funzione mul che funzionerà correttamente se invocata con la seguente sintassi. ```javascript console.log(mul(2)(3)(4)); // output: 24 console.log(mul(4)(3)(4)); // output : 48 ``` #ANSWER# Di seguito è riportato il codice seguito dalla spiegazione di come funziona: ```javascript function mul (x) { return function (y) { // funzione anonima return function (z) { // la funzione anonima restituisce x * y * z; }; }; } ``` Qui la funzione `mul` accetta il primo argomento e restituisce la funzione anonima che accetta il secondo parametro e restituisce la funzione anonima che accetta il terzo parametro e restituisce la moltiplicazione degli argomenti che viene passata in successione In Javascript funzione definita inside ha accesso alla variabile della funzione esterna e la funzione è l'oggetto di prima classe, quindi può essere restituito anche dalla funzione e passato come argomento in un'altra funzione. - Una funzione è un'istanza del tipo Oggetto - Una funzione può avere proprietà e ha un collegamento al suo metodo di costruzione - Una funzione può essere memorizzata come variabile - Una funzione può essere passata come parametro a un'altra funzione - Una funzione può essere restituito da un'altra funzione
        

        Esempio tratto da qui: 123-JavaScript-Domande-Intervista

        C'è anche un file con esempi nella cartella del progetto examples/markdown2anki-example.md

      • nella chiave moduli.markdown.percorsoToFile
        annotare il percorso del file dove *.md file di domande/risposte

    2. Avvia con l'applicazione ANKI in esecuzione
      node data2ankiindex.js
    3. PROFITTO!!!

Ecco come appare su un telefono cellulare:

risultato

Le carte ricevute sulla versione desktop di ANKI vengono sincronizzate senza problemi con il cloud ANKI (gratuito fino a 100mb), e quindi puoi utilizzarle ovunque. Esistono client per Android e iPhone e puoi anche utilizzarlo in un browser. Di conseguenza, se hai tempo a cui non hai nulla da dedicare, invece di scorrere senza meta Facebook o gatti su Instagram, puoi imparare qualcosa di nuovo.

Finale

Come ho già detto, questo è più un POC funzionante che puoi utilizzare che un prodotto finito. Circa il 30% dello standard del parser DSL non è implementato e quindi ad esempio, non è possibile trovare tutte le voci del dizionario presenti nei dizionari, c'è anche un'idea per riscriverlo JavaScript, perché voglio "coerenza" e inoltre ora non è scritto in modo molto ottimale. Ora il parser sta costruendo un albero, ma secondo me questo non è necessario e non complica il codice. IN markdown2anki modalità, le immagini non vengono analizzate. Cercherò di tagliare a poco a poco, ma poiché scrivo per me stesso, risolverò prima di tutto i problemi che io stesso metterò in piedi, ma se qualcuno vuole aiutare, allora sei il benvenuto. Se hai domande sul programma, sarò felice di aiutarti con le questioni aperte nei progetti pertinenti. Scrivi qui altre critiche e suggerimenti. Spero che questo progetto possa essere utile a qualcuno.

PS Se notate qualche errore (e purtroppo ce ne sono), scrivetemi in un messaggio personale, correggerò tutto.

Fonte: habr.com

Aggiungi un commento