Deux histoires sur la façon dont ANKI peut vous aider à apprendre une langue étrangère et à vous préparer à un entretien

J'ai toujours pensé qu'un programmeur paresseux est un bon programmeur. Pourquoi? Parce que demander au travailleur de faire quelque chose, il ira le faire. Un programmeur paresseux passera 2-3 fois plus de temps, mais rédigera un script qui le fera - pour lui. Peut-être que pour la première fois, il passera beaucoup de temps de manière déraisonnable, mais sous réserve de tâches répétitives, cette approche porte ses fruits très rapidement. Je me considère comme un programmeur paresseux. C'était un préambule, et maintenant passons aux choses sérieuses.


Première histoire


Il y a quelques années, je me suis demandé comment améliorer mon anglais. Rien de mieux que de lire la littérature n'est venu à l'esprit. Un lecteur électronique a été acheté, des livres ont été téléchargés et j'ai commencé à lire. Dans le processus de lecture, des mots inconnus sont constamment tombés. Je les ai immédiatement traduits à l'aide des dictionnaires intégrés, mais j'ai remarqué une caractéristique: les mots ne voulaient pas être mémorisés. Quand je suis tombé sur ce mot après quelques pages, alors avec une probabilité de 90%, j'avais à nouveau besoin d'une traduction, et donc à chaque fois. La conclusion était qu'il ne suffisait pas de traduire des mots inconnus dans le processus de lecture, il fallait faire autre chose. Une option idéale serait de l'introduire dans la vie quotidienne et de commencer à l'utiliser, mais je ne vis pas dans un pays anglophone et ce n'est pas possible. Puis je me suis souvenu que j'avais lu une fois sur les répétitions d'intervalle .


Qu'est-ce que c'est et avec quoi mange-t-il? En bref, il y a une telle courbe d'oubli , puis une citation de Wikipedia:


Déjà dans la première heure, jusqu'à 60% de toutes les informations reçues sont oubliées, 10 heures après la mémorisation, 35% des informations étudiées restent en mémoire. De plus, le processus d'oubli est lent, et après 6 jours, environ 20% du nombre total de syllabes apprises à l'origine restent en mémoire, la même quantité reste en mémoire après un mois.

Et la conclusion est d'ici


Les conclusions qui peuvent être tirées sur la base de cette courbe sont que pour une mémorisation efficace, il est nécessaire de répéter le matériel appris.

Nous sommes donc arrivés à l'idée de répétition d'intervalle .


ANKI est un programme open source gratuit absolu qui met en œuvre l'idée de répétition d'intervalle. Autrement dit, les cartes flash informatisées sont d'un côté une question, de l'autre la réponse. Puisque vous pouvez faire des questions / réponses en utilisant le html / css / javascript habituel, vous pouvez dire qu'il a des possibilités vraiment illimitées. De plus, il est extensible avec des plugins spéciaux, et l'un d'entre eux nous sera très utile à l'avenir.


La création manuelle de cartes est une tâche longue et fastidieuse, et il est très probable qu'après un certain temps, vous battiez cette entreprise et, à un moment donné, je me suis donc demandé si cette entreprise pouvait être automatisée. La réponse est oui, vous le pouvez. Et je l'ai fait. Je dirai tout de suite qu'il s'agit plus de POC (Proof of concept) , mais qui peut être utilisé. S'il y a un intérêt de la part des utilisateurs et des autres développeurs, cela peut être porté à un produit fini que même les utilisateurs techniquement analphabètes peuvent utiliser. Maintenant, l'utilisation de mon utilitaire implique des connaissances en programmation.


J'ai lu des livres avec AIReader . Elle a la possibilité de connecter des dictionnaires externes et lors de la traduction d'un mot, elle enregistre le mot que vous avez appelé la traduction dans un fichier texte. Il ne reste plus qu'à traduire ces mots et créer des cartes ANKI.


Au début, j'ai essayé d'utiliser Google Translate , l' API Lingvo , etc. pour traduire. Mais cela ne fonctionnait pas avec les services gratuits. J'ai utilisé la limite de liberté pendant le processus de développement, en outre, selon les termes de la licence, je n'avais pas le droit de mettre en cache les mots. À un moment donné, j'ai réalisé que je devais traduire les mots moi-même. En conséquence, le module dsl2html a été écrit dans lequel les dictionnaires DSL peuvent être connectés et qui peuvent les convertir au format HTML .


Voici à quoi ressemble l'entrée du dictionnaire dans * .html , ma version en comparaison avec la variante GoldenDict


dsl2html vs GoldenDict


Avant de rechercher un mot dans les dictionnaires connectés, je le mets sous forme de dictionnaire (lemme) à l'aide de la bibliothèque Stanford CoreNLP . En fait, à cause de cette bibliothèque, j'ai commencé à écrire en Java et le plan initial était de tout écrire en Java, mais dans le processus, j'ai trouvé la bibliothèque node-java avec laquelle vous pouvez exécuter relativement facilement du code Java à partir de nodejs et une partie du code est écrite en JavaScript. Si j'avais trouvé cette bibliothèque auparavant, alors aucune ligne n'aurait été écrite en Java. Un autre projet parallèle qui est né dans le processus est la création d'un référentiel avec la documentation DSL qui a été trouvé sur le réseau au format * .chm , converti et mis sous une forme divine. Si l'auteur du fichier d'origine, un utilisateur du surnom yozhic, voit cet article, alors je le remercie beaucoup pour le travail accompli, sans sa documentation, j'aurais probablement échoué.


Donc, j'ai un mot en anglais, son entrée de dictionnaire au format * .html , il reste à tout rassembler, créer des articles ANKI à partir de la liste de mots et les ajouter à la base de données ANKI. Le projet data2anki suivant a été créé à cet effet. Il sait prendre une liste de mots, traduire, créer des articles ANKI * .html et les écrire dans la base de données ANKI. À la fin de l'article, il y a une instruction sur la façon de l'utiliser. En attendant, la deuxième histoire où la répétition d'intervalle peut être utile.


La deuxième histoire.


Toutes les personnes à la recherche d'une profession plus / moins qualifiée, y compris les programmeurs, sont confrontées à la nécessité de se préparer à un entretien. Vous n'utilisez pas beaucoup de concepts qui vous sont demandés lors d'un entretien dans la pratique quotidienne et ils sont oubliés. Dans la préparation suivante de l'entretien, en parcourant le recueil, le livre, le livre de référence, je suis tombé sur le fait qu'il faut beaucoup de temps et d'attention pour filtrer les informations que vous connaissez déjà car elles ne sont pas toujours évidentes et vous devez les lire afin de comprendre ce qu'elles sont. non pertinent. Lorsque vous arrivez à un sujet qui doit vraiment être répété, il arrive souvent que vous soyez déjà fatigué et que la qualité de la préparation en souffre. À un moment donné, j'ai pensé, pourquoi ne pas utiliser les cartes ANKI pour cela? Par exemple, lorsque vous prenez des notes sur un sujet, créez immédiatement un résumé sous la forme d'une question - une réponse, puis lorsque vous le répéterez, vous saurez immédiatement si vous connaissez ou non la réponse à cette question.


Le problème ne se pose que dans la mesure où il est très long et fastidieux de répondre aux questions. Pour faciliter le processus, dans le projet data2anki , j'ai ajouté une fonctionnalité pour convertir le texte de démarque en cartes ANKI. Tout ce que vous avez à faire est d'écrire un grand fichier dans lequel les questions et les réponses seront marquées avec une séquence de caractères prédéterminée, par laquelle l'analyseur comprendra où se trouve la question et où se trouve la réponse.


Une fois ce fichier créé, vous démarrez data2anki et il crée des cartes ANKI. Le fichier d'origine est facile à modifier et à partager, il vous suffit d'effacer la ou les cartes correspondantes et de relancer le programme, et une nouvelle version sera créée.


Installation et utilisation


  1. Installer ANKI + AnkiConnect


    1. Téléchargez ANKI à partir d'ici: https://apps.ankiweb.net/
    2. Installez le plugin AnkiConnect: https://ankiweb.net/shared/info/2055492159

  2. Installer data2anki


    1. Télécharger data2anki à partir du référentiel github
      git clone https://github.com/anatoly314/data2anki 
    2. Installer les dépendances
       cd data2anki && npm install 
    3. Télécharger les dépendances java https://github.com/anatoly314/data2anki/releases/download/0.1.0/jar-dependencies.zip
    4. Décompressez jar-dependencies.zip et placez son contenu dans data2anki / java / jars

  3. Utilisez pour traduire des mots:


    1. Dans le fichier data2anki / config.json :


      • dans la touche mode , écrivez la valeur dsl2anki


      • Dans les clés modules.dsl.anki.deckName et modules.dsl.anki.modelName , respectivement, notez le nom du jeu et le nom du modèle (qui doivent déjà être créés avant la création des cartes). Désormais, seul un modèle de type Basic est pris en charge:


        Possède des champs avant et arrière et créera une carte. Le texte que vous saisissez devant apparaîtra au recto de la carte et le texte que vous saisissez au dos apparaîtra au dos de la carte.

        où le mot source est le champ Avant et la traduction sera dans le champ Arrière .


        Il n'y a aucun problème à ajouter la prise en charge de Basic (et de la carte inversée) , où une carte inversée sera créée pour le mot et la traduction, où la traduction devra rappeler le mot d'origine. Seule la présence du temps et du désir est nécessaire.


      • dans la clé modules.dsl.dictionariesPath , vous enregistrez un tableau avec les dictionnaires * .dsl connectés. Chaque dictionnaire connecté est un répertoire dans lequel les fichiers de dictionnaire sont situés conformément au format: structure de dictionnaire DSL


      • Dans la clé modules.dsl.wordToTranslatePath, spécifiez le chemin d'accès à la liste de mots que vous souhaitez traduire.



    2. Exécuter lorsque vous travaillez avec l'application ANKI
       node data2anki\index.js 
    3. PROFIT !!!

  4. Utilisations pour créer des cartes à partir de démarques


    1. Dans le fichier data2anki / config.json :


      • dans la touche mode , écrivez la valeur markdown2anki
      • dans la clé modules.markdown.anki.deckName et modules.dsl.anki.modelName, vous écrivez respectivement le nom du jeu et le nom du modèle (qui doivent déjà être créés avant la création des cartes). Pour le mode markdown2anki , seul un modèle de type Basic est pris en charge.
      • dans les modules.markdown.selectors.startQuestionSelectors et modules.markdown.selectors.startAnswerSelectors clés, enregistrez respectivement les sélecteurs avec lesquels vous marquez le début de la question et de la réponse. La ligne avec le sélecteur lui-même ne sera pas analysée et n'entrera pas dans la carte, l'analyseur commencera à travailler à partir de la ligne suivante.


        Par exemple, cette carte de question / réponse:

        Exemple de carte Anki


        Il ressemblera au démarque comme suit:



         # QUESTION #
         ## Question 5. Écrivez une fonction mul qui fonctionnera correctement lorsqu'elle sera invoquée avec la syntaxe suivante.
        
         `` `javascript
         console.log (mul (2) (3) (4));  // sortie: 24
         console.log (mul (4) (3) (4));  // sortie: 48
         `` ``
         # RÉPONSE #
         Voici le code suivi de l'explication de son fonctionnement:
        
         `` `javascript
         fonction mul (x) {
           fonction de retour (y) {// fonction anonyme
             fonction de retour (z) {// fonction anonyme
               retourne x * y * z;
             };
           };
         }
         `` ``
        
         Ici, la fonction `mul` accepte le premier argument et retourne la fonction anonyme qui prend le deuxième paramètre et retourne la fonction anonyme qui prend le troisième paramètre et retourne la multiplication des arguments qui sont passés successivement
        
         En Javascript, la fonction définie à l'intérieur a accès à la variable de fonction externe et la fonction est le premier objet de classe, elle peut donc également être renvoyée par la fonction et passée comme argument dans une autre fonction.
         - Une fonction est une instance du type Object
         - Une fonction peut avoir des propriétés et a un lien vers sa méthode constructeur
         - Une fonction peut être stockée comme variable
         - Une fonction peut être passée en paramètre à une autre fonction
         - Une fonction peut être renvoyée par une autre fonction
        



        Un exemple est tiré d'ici: 123-JavaScript-Interview-Questions

        Il y a aussi un fichier avec des exemples dans le dossier de projet examples/markdown2anki-example.md


      • dans la clé modules.markdown.pathToFile
        prescrire, le chemin d'accès au fichier où se trouve le fichier * .md avec des questions / réponses

    2. Exécuter lorsque vous travaillez avec l'application ANKI
       node data2anki\index.js 
    3. PROFIT !!!


Voici à quoi cela ressemble sur un téléphone mobile:



Résultat


Les cartes reçues sur la version de bureau d'ANKI peuvent être facilement synchronisées avec le cloud ANKI (gratuit jusqu'à 100 Mo), puis vous pouvez les utiliser partout. Il existe des clients pour Android et iPhone, vous pouvez également l'utiliser dans un navigateur. Par conséquent, si vous avez du temps à consacrer à rien, au lieu de parcourir sans but Facebook ou les sceaux sur Instagram, vous pouvez apprendre quelque chose de nouveau.


Épilogue


Comme je l'ai mentionné, il s'agit plus d'un POC fonctionnel que vous pouvez utiliser que d'un produit fini. Quelque part environ 30% du standard de l'analyseur DSL n'est pas implémenté, et donc, par exemple, toutes les entrées de dictionnaire qui se trouvent dans les dictionnaires ne peuvent pas être trouvées , il y a aussi une idée de le réécrire en JavaScript , parce que vous voulez "cohérence", et d'ailleurs, maintenant il est écrit pas très optimal. Maintenant, l'analyseur construit un arbre, ce qui n'est pas nécessaire pour le mien et n'a pas besoin de compliquer le code. En mode markdown2anki , les images ne sont pas analysées. J'essaierai de voir lentement, mais tant que j'écrirai pour moi-même, je résoudrai tout d'abord le râteau que j'attaquerai moi-même, mais si quelqu'un veut aider, alors nous sommes les bienvenus. Si vous avez des questions sur le programme, je serai heureux de vous aider à résoudre les problèmes ouverts dans les projets concernés. Écrivez le reste de la critique et des suggestions ici. J'espère que quelqu'un trouvera ce projet utile.


PS Si vous remarquez des erreurs (et elles le sont malheureusement), écrivez-moi personnellement, je vais tout réparer.

Source: https://habr.com/ru/post/fr454236/


All Articles