Zwei Geschichten, wie ANKI Ihnen helfen kann, eine Fremdsprache zu lernen und sich auf ein Vorstellungsgespräch vorzubereiten

Ich habe immer geglaubt, dass ein fauler Programmierer ein guter Programmierer ist. Warum? Weil, wenn man einen fleißigen bittet, etwas zu tun, er einfach hingeht und es macht. Ein fauler Programmierer hingegen wird 2-3 Mal so viel Zeit aufwenden, aber ein Skript schreiben, das das für ihn erledigt. Vielleicht wird beim ersten Mal unverhältnismäßig viel Zeit dafür aufgewendet, aber bei wiederholten Aufgaben amortisiert sich dieser Ansatz sehr schnell. Ich betrachte mich als faulen Programmierer. Das war die Einleitung, jetzt kommen wir zur Sache.

Geschichte eins

Vor ein paar Jahren habe ich darüber nachgedacht, wie ich mein Englisch verbessern könnte. Mir fiel nichts Besseres ein, als Literatur zu lesen. Ich kaufte einen E-Reader, lud Bücher herunter und begann zu lesen. Während des Lesens stieß ich ständig auf unbekannte Wörter. Ich übersetzte sie sofort mit den integrierten Wörterbüchern des Readers, aber ich bemerkte eine Eigenheit: Die Wörter wollten nicht im Gedächtnis bleiben. Wenn ich nach ein paar Seiten wieder auf dieses Wort traf, benötigte ich mit 90% Wahrscheinlichkeit erneut die Übersetzung, und so ging es jedes Mal. Es lag nahe zu schließen, dass es nicht genügt, unbekannte Wörter während des Lesens zu übersetzen; man muss etwas anderes tun. Ideal wäre es, sie in den Sprachgebrauch einzuführen und damit zu arbeiten, aber ich lebe nicht in einem englischsprachigen Land, was schwierig ist. Da fiel mir ein, dass ich einmal über intervallartige Wiederholungen.

Nach dem, was ich verstanden habe, handelt es sich dabei um eine Vergessenskurve, hier ein Zitat aus Wikipedia:

Bereits innerhalb der ersten Stunde vergisst man bis zu 60 % aller aufgenommenen Informationen. Nach 10 Stunden bleibt in Erinnerung, was 35 % des Gelernten ausmacht. Danach verläuft der Vergessensprozess langsam, und nach 6 Tagen bleiben etwa 20 % der ursprünglich gelernten Silben im Gedächtnis, ebenso viel bleibt auch nach einem Monat.

Und hieraus ergibt sich

Die Schlussfolgerungen, die man aus dieser Kurve ziehen kann, sind, dass für ein effektives Behalten Wiederholungen des gelernten Stoffes notwendig sind.

Damit sind wir bei der Idee angekommen der intervallartigen Wiederholung.

ANKI Dies ist ein absolut kostenloses und Open-Source-Programm, das die Idee des intervallbasierten Lernens umsetzt. Einfach ausgedrückt sind es computerisierte Karteikarten, auf der einen Seite die Frage, auf der anderen die Antwort. Da Sie Fragen/Antworten mit ganz gewöhnlichem html/css/javascript, kann man sagen, dass sie wirklich unbegrenzte Möglichkeiten bietet. Außerdem ist sie erweiterbar durch spezielle Plugins, und eines davon wird uns später sehr nützlich sein.

Karteikarten manuell zu erstellen, ist langwierig, langweilig und mit großer Wahrscheinlichkeit werden Sie irgendwann aufhören. Daher habe ich mir zu einem bestimmten Zeitpunkt die Frage gestellt, ob ich diesen Prozess automatisieren kann. Die Antwort ist ja, das kann man. Und ich habe es getan. Ich muss gleich sagen, es ist mehr POC (Proof of Concept), aber man kann es nutzen. Wenn es Interesse von Nutzern gibt und andere Entwickler dazustoßen, kann es zu einem fertigen Produkt weiterentwickelt werden, das auch technisch weniger versierten Nutzern zugänglich ist. Derzeit erfordert die Nutzung meines Tools jedoch einige Programmierkenntnisse.

Ich lese Bücher mit Hilfe des Programms AIReader. Dieses bietet die Möglichkeit, externe Wörterbücher anzuschließen, und beim Übersetzen eines Wortes speichert es das Wort, das Sie zum Übersetzen aufgerufen haben, in einer Textdatei. Jetzt bleibt nur noch die große Aufgabe, diese Wörter zu übersetzen und ANKI-Karten zu erstellen.

Zunächst habe ich versucht, für die Übersetzung Google Translate, Lingvo API usw. zu benutzen. Aber mit kostenlosen Diensten hat es nicht geklappt. Das kostenlose Kontingent war ich bereits während der Entwicklung erschöpft, außerdem hatte ich aufgrund der Lizenzbedingungen kein Recht, Wörter zu cachen. Irgendwann erkannte ich, dass ich die Wörter selbst übersetzen musste. Schließlich wurde das Modul dsl2html geschrieben, an das man DSL-Wörterbücher anschließen kann und das in HTML das Format konvertieren kann.

So sieht ein Wörterbucheintrag in *.htmlaus, meine Version im Vergleich zur Version GoldenDict

Zwei Geschichten, wie ANKI Ihnen helfen kann, eine Fremdsprache zu lernen und sich auf ein Vorstellungsgespräch vorzubereiten

Bevor ich das Wort in den angeschlossenen Wörterbüchern suche, bringe ich es in die Wörterbuchform (Lemma) mithilfe der Bibliothek Stanford CoreNLP. Tatsächlich habe ich wegen dieser Bibliothek angefangen, Java zu schreiben, und der ursprüngliche Plan war, alles in Java zu schreiben, aber im Prozess fand ich die Bibliothek node-java mit der man Java-Code relativ einfach aus Node.js ausführen kann, wobei ein Teil des Codes in JavaScript geschrieben ist. Hätte ich diese Bibliothek früher gefunden, wäre kein Wort in Java geschrieben worden. Ein weiteres Nebenprojekt, das während dieses Prozesses entstanden ist, ist die Erstellung eines Repositories mit DSL-Dokumentation die im Internet im *-Format gefunden wurde.chm, konvertiert und in eine brauchbare Form gebracht. Wenn der Autor der Originaldatei, der Nutzer mit dem Nicknamen yozhic diese Artikel sieht, möchte ich ihm herzlich für die geleistete Arbeit danken; ohne seine Dokumentation hätte ich wahrscheinlich nichts erreicht.

Also, ich habe ein Wort auf Englisch, dessen Wörterbucheintrag im *-Format.html, und jetzt gilt es, alles zusammenzuführen, ANKI-Artikel aus der Liste von Wörtern zu erstellen und sie in die ANKI-Datenbank einzufügen. Zu diesem Zweck wurde das folgende Projekt ins Leben gerufen data2anki. Es kann eine Liste von Wörtern aufnehmen, diese übersetzen, ANKI-*.html Artikel erstellen und sie in die ANKI-Datenbank einfügen. Am Ende des Artikels gibt es eine Anleitung, wie man es benutzt. Bis jetzt ist dies die zweite Geschichte, in der intervenierende Wiederholungen nützlich sein können.

Die zweite Geschichte.

Alle Menschen, die auf der Suche nach mehr oder weniger qualifizierten Spezialisten, einschließlich Programmierern, sind, stehen vor der Notwendigkeit, sich auf Vorstellungsgespräche vorzubereiten. Viele Konzepte, die in Vorstellungsgesprächen gefragt werden, werden in der täglichen Praxis nicht verwendet und geraten in Vergessenheit. Bei der Vorbereitung auf das nächste Vorstellungsgespräch bin ich beim Durchblättern der Notizen, Bücher und Nachschlagewerke auf ein Problem gestoßen: Es kostet viel Zeit und Konzentration, bereits bekannte Informationen auszusondern, da sie nicht immer offensichtlich sind und man sich einlesen muss, um zu verstehen, dass sie nicht relevant sind. Wenn man dann auf ein Thema stößt, das wirklich wiederholt werden muss, ist man häufig schon müde, und die Qualität der Vorbereitung leidet. Irgendwann dachte ich, warum nicht ANKI-Karten auch dafür nutzen? Zum Beispiel beim Erstellen von Notizen zu einem Thema, sofort die Notizen in Form von Fragen – Antworten zu erstellen, und dann beim Wiederholen sofort zu wissen, ob man die Antwort auf diese Frage kennt.

Das Problem war nur, dass das Eingeben von Fragen sehr langwierig und mühsam ist. Um den Prozess zu erleichtern, habe ich die Funktionalität hinzugefügt, um data2anki markdown zu konvertieren markdown Text in einer ANKI-Karte. Alles, was Sie tun müssen, ist eine große Datei zu erstellen, in der Fragen und Antworten mit einer vorher festgelegten Zeichenfolge markiert sind, anhand derer der Parser versteht, wo die Frage und wo die Antwort ist.

Nachdem diese Datei erstellt wurde, starten Sie data2anki und es erstellt ANKI-Karten. Die Originaldatei lässt sich einfach bearbeiten und teilen, Sie müssen lediglich die entsprechende Karte(n) löschen und das Programm erneut starten, um eine neue Version zu erstellen.

Installation und Gebrauch

  1. Installation von ANKI + AnkiConnect

    1. Laden Sie ANKI von hier herunter: https://apps.ankiweb.net/
    2. Installieren Sie das AnkiConnect-Plugin: https://ankiweb.net/shared/info/2055492159

  2. Installation data2anki

    1. Laden Sie herunter data2anki vom GitHub-Repository
      git clone https://github.com/anatoly314/data2anki
    2. Installieren Sie die Abhängigkeiten
      cd data2anki && npm install
    3. Laden Sie die Java-Abhängigkeiten herunter https://github.com/anatoly314/data2anki/releases/download/0.1.0/jar-dependencies.zip
    4. Entpacken Sie jar-dependencies.zip und legen Sie den Inhalt in data2anki/java/jars

  3. Verwendung zur Übersetzung von Wörtern:

    1. In der Datei data2anki/config.json:

      • in den Schlüssel Modus geben Sie den Wert an dsl2anki

      • in den Schlüssel modules.dsl.anki.deckName und modules.dsl.anki.modelName geben Sie dann entsprechend an, Deck-Name und Modellname (sollten bereits vor der Erstellung der Karten erstellt werden). Momentan wird nur das Modell vom Typ Basic:

        unterstützt. Hat Front- und Back-Felder und erstellt eine Karte. Der Text, den Sie im Front-Feld eingeben, erscheint auf der Vorderseite der Karte, und der Text, den Sie im Back-Feld eingeben, erscheint auf der Rückseite der Karte.

        wobei das Ursprungswort im Front-Feld, während die Übersetzung im Back-Feld.

        liegt. Es gibt kein Problem, Unterstützung hinzuzufügen für Basic (und umgekehrte Karten), bei denen vom Wort und der Übersetzung auch eine umgekehrte Karte erstellt wird, bei der man sich das Originalwort anhand der Übersetzung merken muss. Man benötigt nur Zeit und den Willen.

      • in den Schlüssel modules.dsl.dictionariesPath geben Sie ein Array mit angeschlossenen *.dsl Wörterbüchern an. Jedes angeschlossene Wörterbuch ist ein Verzeichnis, in dem sich die Wörterbuchdateien im entsprechenden Format befinden: Aufbau des DSL-Wörterbuchs

      • in den Schlüssel modules.dsl.wordToTranslatePath geben Sie den Pfad zur Liste der Wörter an, die Sie übersetzen möchten.

    2. Starten Sie bei geöffnetem ANKI-Anwendungsprogramm
      node data2ankiindex.js
    3. PROFIT!!!

  4. Verwendung zur Erstellung von Karten aus Markdown

    1. In der Datei data2anki/config.json:

      • in den Schlüssel Modus geben Sie den Wert an markdown2anki
      • in den Schlüssel modules.markdown.anki.deckName und modules.dsl.anki.modelName geben Sie dann entsprechend an, Deck-Name und Modellname (sollten bereits vor der Erstellung der Karten erstellt werden). Für markdown2anki mode wird nur das Modell vom Typ Basic.
      • in den Schlüssel modules.markdown.selectors.startQuestionSelectors und modules.markdown.selectors.startAnswerSelectors geben Sie die Selektoren an, mit denen Sie den Beginn der Frage und der Antwort markieren. Die Zeile mit dem Selektor wird nicht geparst und kommt nicht in die Karte, der Parser beginnt mit der nächsten Zeile.

        Zum Beispiel sieht diese Frage/Antwort-Karte so aus:

        Zwei Geschichten, wie ANKI Ihnen helfen kann, eine Fremdsprache zu lernen und sich auf ein Vorstellungsgespräch vorzubereiten

        Wird im Markdown folgendermaßen aussehen:
        #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
        

        Beispiel stammt von hier: 123-JavaScript-Interview-Fragen

        Es gibt auch eine Datei mit Beispielen im Projektordner examples/markdown2anki-example.md

      • in den Schlüssel modules.markdown.pathToFile
        geben Sie den Pfad zur Datei an, wo * liegt.md Datei mit Fragen/Antworten

    2. Starten Sie bei geöffnetem ANKI-Anwendungsprogramm
      node data2ankiindex.js
    3. PROFIT!!!

So sieht es auf einem Mobiltelefon aus:

Video abspielen

Ergebnis

Die in der Desktop-Version von ANKI erstellten Karten synchronisieren problemlos mit dem ANKI-Cloud (kostenlos bis 100 MB), danach können Sie sie überall verwenden. Es gibt Clients für Android und iPhone, außerdem können Sie auch im Browser arbeiten. Wenn Sie also Zeit haben, die Sie nicht anders nutzen, anstatt ohne Ziel durch Facebook oder Katzen auf Instagram zu blättern, können Sie etwas Neues lernen.

Epilog

Wie ich bereits erwähnt habe, ist dies eher ein funktionierender POC, den man nutzen kann, als ein fertiges Produkt. Etwa 30 % des DSL-Parserstandards sind nicht implementiert, und deshalb können zum Beispiel nicht alle Wörterbuchartikel, die in den Wörterbüchern vorhanden sind, gefunden werden, außerdem gibt es den Plan, ihn in JavaScriptneu zu schreiben, da ich „Konsistenz“ möchte und außerdem ist er derzeit nicht sehr optimiert. Der Parser baut im Moment einen Baum, was meiner Meinung nach überflüssig ist und den Code kompliziert. Im markdown2anki Bildermodus werden keine Bilder geparst. Ich werde versuchen, nach und nach daran zu arbeiten, aber da ich momentan nur für mich selbst schreibe, werde ich in erster Linie die Probleme lösen, auf die ich selbst stoße. Wenn jemand helfen möchte, ist er herzlich eingeladen. Bei Fragen zu dem Programm helfe ich gerne durch offene Issues in den entsprechenden Projekten. Für andere Kritiken und Vorschläge schreiben Sie bitte hier. Ich hoffe, dass dieses Projekt einigen Leuten nützlich sein wird.

P.S. Wenn Sie Fehler bemerken (und die gibt es leider), schreiben Sie mir privat, ich werde alles korrigieren.

Quelle: habr.com

60GB SSD 8Gb DDR4