Две приказни за тоа како АНКИ може да ви помогне да научите странски јазик и да се подготвите за интервјуа

Отсекогаш верував дека мрзливиот програмер е добар програмер. Зошто? Затоа што замолете некој вреден работник да направи нешто, тој ќе оди и ќе го направи. И мрзлив програмер ќе потроши 2-3 пати повеќе време, но ќе напише скрипта што ќе го направи тоа за него. Можеби ќе биде потребно неразумно долго време за да го направите ова првиот пат, но со повторени задачи овој пристап ќе се исплати многу брзо. Се сметам за мрзлив програмер. Тоа беше преамбулата, сега да се зафатиме.

Приказна прва

Пред неколку години се прашував како можам да го подобрам мојот англиски јазик. Ништо подобро не ми падна на ум од читање литература. Купив електронски читач, симнав книги и почнав да читам. Додека читав, постојано наидував на непознати зборови. Веднаш ги преведов користејќи ги речниците вградени во читателот, но забележав една карактеристика: зборовите не сакаа да бидат запаметени. Кога повторно наидов на овој збор неколку страници подоцна, со 90% веројатност повторно ми требаше превод, и тоа се случуваше секој пат. Заклучокот беше дека не е доволно едноставно да преведувате непознати зборови додека читате, треба да направите нешто друго. Идеалната опција би била да го воведеме во секојдневниот живот и да почнам да го користам, но јас не живеам во земја од англиско говорно подрачје и тоа е малку веројатно. Потоа се сетив дека еднаш прочитав за Просторно повторување.

Што е тоа и со што се јаде? Накратко, постои ова заборавање крива, дополнителен цитат од Википедија:

Веќе во првиот час, до 60% од сите добиени информации се забораваат; 10 часа по меморирањето, 35% од наученото останува во меморијата. Потоа, процесот на заборавање продолжува бавно и по 6 дена околу 20% од вкупниот број на првично изучени слогови остануваат во меморијата, а истата количина останува во меморијата по еден месец.

И заклучокот од тука

Заклучоците што може да се извлечат врз основа на оваа крива се дека за ефективно меморирање потребно е да се повтори запаметен материјал.

Така дојдовме до идеја распоредено повторување.

АНКИ е потполно бесплатна и програма со отворен код што ја имплементира идејата за повторување на растојание. Едноставно кажано, компјутеризираните флеш картички имаат прашање на едната страна, а одговорот на другата страна. Бидејќи можете да правите прашања/одговори користејќи редовно html/css/javascript, тогаш можеме да кажеме дека има навистина неограничени можности. Покрај тоа, тој може да се прошири со специјални приклучоци, а еден од нив ќе ни биде многу корисен во иднина.

Рачното креирање картички е долго, мачно и со голема веројатност, по некое време ќе заборавите на оваа задача, и затоа во одреден момент си го поставив прашањето дали е можно да се автоматизира оваа задача. Одговорот е да, можеш. И јас го направив тоа. Веднаш ќе кажам, тоа е повеќе POC (доказ за концепт), но кој може да се користи. Доколку има интерес од корисниците и се вклучат други програмери, тогаш може да се доведе до готов производ што дури и технички неписмени корисници можат да го користат. Сега, користењето на мојата алатка бара одредено познавање на програмирање.

Читам книги користејќи ја програмата AIRreader. Има можност за поврзување на надворешни речници, а кога преведувате збор, го зачувува зборот што сте го повикале за превод во текстуална датотека. Останува само да се преведат овие зборови и да се создадат картички АНКИ.

Отпрвин се обидов да користам за превод Гугл преведувач, Lingvo API итн. Но, работите не функционираа со бесплатните услуги. Ја исцрпив бесплатната граница за време на процесот на развој, покрај тоа, според условите на лиценцата, немав право на кеширање зборови. Во одреден момент сфатив дека треба сам да ги преведам зборовите. Како резултат на тоа, беше напишан модул dsl2html на кој можете да се поврзете DSL речници и кој знае како да ги претвори во HTML формат.

Вака изгледа записот во речник во *. Html, мојата опција во споредба со опцијата GoldenDict

Две приказни за тоа како АНКИ може да ви помогне да научите странски јазик и да се подготвите за интервјуа

Пред да барам збор во поврзаните речници, го пренесувам до форма на речник (лема) користејќи ја библиотеката Стенфорд CoreNLP. Всушност, поради оваа библиотека, почнав да пишувам на Java и првичниот план беше да напишам сè на Java, но во тој процес ја најдов библиотеката јазол-јава со кој можете релативно лесно да извршите Java код од nodejs и дел од кодот е напишан во JavaScript. Ако ја најдов оваа библиотека порано, немаше да биде напишана ниту една линија на Java. Друг спореден проект што се роди во процесот е создавањето складиште со DSL документација што се најде на мрежата во формат *.хм, претворена и донесена во божествена форма. Ако авторот на оригиналната датотека е корисник по прекар јожиќ Кога ќе ја види оваа статија, многу му благодарам за работата што ја направи, без неговата документација, најверојатно немаше да успеам.

Значи, имам збор на англиски, неговиот запис во речник во формат *. Html, останува само да се состави се, да се создадат написи АНКИ од списокот со зборови и да се внесат во базата на АНКИ. За таа цел беше креиран следниот проект data2anki. Може да земе список со зборови како влез, да преведува, креира ANKI *. Html статии и евидентирај ги во базата на податоци на АНКИ. На крајот од статијата има инструкции како да го користите. Во меѓувреме, втората приказна е местото каде што распоредените повторувања можат да бидат корисни.

Втората приказна.

Сите луѓе во потрага по повеќе/помалку квалификувана специјалност, вклучително и програмери, се соочуваат со потребата да се подготват за интервју. Многу од концептите кои се прашуваат во интервјуата не ги користите во секојдневната пракса и тие се заборавени. Кога се подготвував за интервју, прелистувајќи белешки, книга, референтна книга, се соочив со фактот дека е потребно многу време и внимание за да се просеат информациите што веќе ги знаете бидејќи не се секогаш очигледни и мора да прочитај го внимателно за да разбереш што е тоа.неважно. Кога ќе дојдете до тема која навистина треба да се повтори, често се случува веќе да сте уморни и да трпи квалитетот на вашата подготовка. Во одреден момент си помислив, зошто да не ги користам картичките АНКИ и за ова? На пример, кога правите белешки за некоја тема, веднаш креирајте белешка во форма на прашање и одговор, а потоа кога ќе ја повторите, веднаш ќе знаете дали го знаете одговорот на ова прашање или не.

Единствениот проблем што се појави беше тоа што пишувањето прашања беше многу долго и досадно. За да го олесните процесот, data2anki проект Додадов функционалност за конвертирање markdown текст во картички АНКИ. Сè што ви треба е да напишете една голема датотека во која прашањата и одговорите ќе бидат означени со однапред одредена низа на знаци, со која анализаторот ќе разбере каде е прашањето и каде е одговорот.

Откако ќе се создаде оваа датотека, ќе извршите data2anki и таа создава ANKI картички. Оригиналната датотека е лесна за уредување и споделување, само треба да ги избришете соодветните картички и да ја стартувате програмата повторно и ќе се креира нова верзија.

Инсталација и употреба

  1. Се инсталира ANKI + AnkiConnect

    1. Преземете ја АНКИ од овде: https://apps.ankiweb.net/
    2. Инсталирајте го додатокот AnkiConnect: https://ankiweb.net/shared/info/2055492159

  2. Инсталација data2anki

    1. Преземи data2anki од складиштето github
      git clone https://github.com/anatoly314/data2anki
    2. Инсталирајте зависности
      cd data2anki && npm install
    3. Преземете јава зависности https://github.com/anatoly314/data2anki/releases/download/0.1.0/jar-dependencies.zip
    4. Отпакување jar-dependencies.zip и ставете ја неговата содржина во data2anki/java/jars

  3. Користете за преведување зборови:

    1. Во датотека data2anki/config.json:

      • во клучот на владата внесете ја вредноста dsl2anki

      • во клучот modules.dsl.anki.deckName и modules.dsl.anki.modelName напишете соодветно Име на палубата и Име на модел (мора веќе да се креира пред да се креираат картички). Во моментов е поддржан само типот на моделот Основни:

        Има предни и задни полиња и ќе создаде една картичка. Текстот што го внесувате „Напред“ ќе се појави на предната страна на картичката, а текстот што го внесувате „Назад“ ќе се појави на задната страна од картичката.

        каде е оригиналниот збор? Предно поле, а преводот ќе биде во Задно поле.

        Нема проблем да се додаде поддршка Основна (и обратна картичка), каде што ќе се креира обратна картичка за зборот и преводот, каде што врз основа на преводот ќе треба да го запомните оригиналниот збор. Се што ви треба е време и желба.

      • во клучот modules.dsl.dictionariesPath регистрирајте низа со поврзани *.дсл речници. Секој поврзан речник е директориум во кој датотеките со речник се наоѓаат во согласност со форматот: Структура на речник на DSL

      • во клучот modules.dsl.wordToTranslatePath внесете ја патеката до списокот со зборови што сакате да ги преведете.

    2. Стартувајте со вклучена апликација ANKI
      node data2ankiindex.js
    3. ПРОФИТ!!!

  4. Се користи за креирање картички од означување

    1. Во датотека data2anki/config.json:

      • во клучот на владата внесете ја вредноста markdown2anki
      • во клучот modules.markdown.anki.deckName и modules.dsl.anki.modelName напишете соодветно Име на палубата и Име на модел (мора веќе да се креира пред да се креираат картички). За markdown2anki поддржан е само тип на модел на режим Основни.
      • во клучот modules.markdown.selectors.startQuestionSelectors и modules.markdown.selectors.startAnswerSelectors пишувате селектори со кои го означувате почетокот на прашањето и одговорот, соодветно. Линијата со самиот избирач нема да се анализира и нема да заврши во картичката; парсерот ќе почне да работи од следната линија.

        На пример, оваа картичка за прашања/одговори:

        Две приказни за тоа како АНКИ може да ви помогне да научите странски јазик и да се подготвите за интервјуа

        Ќе изгледа вака во ознаката:
        #ПРАШАЊЕ# ## Прашање 5. Напишете mul функција која ќе работи правилно кога ќе се повика со следнава синтакса. ```javascript console.log(mul(2)(3)(4)); // излез : 24 console.log(mul(4)(3)(4)); // излез : 48 ``` #ANSWER# Подолу е кодот проследен со објаснување за тоа како функционира: ```javascript функција mul (x) { return функција (y) { // анонимна функција враќање функција (z) { // анонимна функција враќа x * y * z; }; }; } ``` Овде функцијата `mul` го прифаќа првиот аргумент и ја враќа анонимната функција која го зема вториот параметар и ја враќа анонимната функција која го зема третиот параметар и го враќа множењето на аргументите што се пренесуваат последователно Во функцијата Javascript дефинирана внатре има пристап до надворешната функционална променлива и функцијата е објект од прва класа, така што може да се врати и од функцијата и да се пренесе како аргумент во друга функција. - Функцијата е пример од типот Објект - Функцијата може да има својства и има врска назад до методот на нејзиниот конструктор - Функцијата може да се зачува како променлива - Функцијата може да се пренесе како параметар на друга функција - Функцијата може да биде вратен од друга функција
        

        Пример земен од овде: 123-JavaScript-Интервју-Прашања

        Во папката на проектот има и датотека со примери examples/markdown2anki-example.md

      • во клучот modules.markdown.pathToFile
        запишете ја патеката до датотеката каде што *.md датотека со прашања/одговори

    2. Стартувајте со вклучена апликација ANKI
      node data2ankiindex.js
    3. ПРОФИТ!!!

Вака изгледа на мобилен телефон:

Резултира

Картичките добиени на десктоп верзијата на ANKI се синхронизираат без проблеми со облакот ANKI (бесплатно до 100mb), а потоа можете да ги користите насекаде. Има клиенти за Android и iPhone, а можете да го користите и во прелистувач. Како резултат на тоа, ако имате време на кое немате на што да потрошите, тогаш наместо бесцелно да се движите низ Фејсбук или мачки на Инстаграм, можете да научите нешто ново.

Епилог

Како што споменав, ова е повеќе работен POC што можете да го користите отколку готов производ. Околу 30% од стандардот за парсер за DSL не е имплементиран, и затоа, на пример, не може да се најдат сите записи во речник што се во речници, има и идеја да се преработи Го вклучите Javascript-, затоа што сакам „конзистентност“, а освен тоа, сега не е напишано баш оптимално. Сега парсерот гради дрво, но според мене ова е непотребно и не треба да го комплицира кодот. ВО markdown2anki режим, сликите не се анализираат. Ќе пробам да пресечам малку по малку, но бидејќи си пишувам за себе, прво ќе ги решам проблемите на кои самиот ќе стапнам, но ако некој сака да помогне, тогаш сте добредојдени. Ако имате прашања во врска со програмата, со задоволство ќе ви помогнам преку отворените прашања во соодветните проекти. Овде напишете други критики и предлози. Се надевам дека овој проект ќе биде корисен за некого.

П.С. Доколку забележите некакви грешки (а, за жал, ги има), пишете ми во лична порака, ќе поправам сè.

Извор: www.habr.com

Додадете коментар