Электронные карточки для заучивания английских слов

в 10:30, , рубрики: open source, python, английский обучение языки, я пиарюсь, метки: , , ,

Главное окно Хочу поделиться с уважаемым читателим очередным велосипедом, для пополнения английского словарного запаса. Представляет он из себя классические карточки для самостоятельного изучения слов: вам предлагается слово на русском или английском, вы вводите перевод. Описывать плюсы методики не буду, напомню лишь, что формирование словарного запаса — это один из первых этапов изучения языка — закладывание базы для дальнейшего, более полного изучения.
Программа очень простая, но имеет ряд особенностей, которые отличают ее от тех, что я пробовал перед тем, как взяться за собственную реализацию. Кому лень читать подробное описание, могут сразу перейти на github, где выложен скрипт и ознакомиться с ним, там же есть readme с описанием возможностей, в более сжатом виде.

А я сейчас попытаюсь рассказать, зачем мне это понадобилось и чем собственно не устроили существующие программы и сервисы.

Особенности

Первое и самое важное — время.

Все сервисы по изучению языка, что я пробовал, тот же, широко известный lingualeo, требуют, что бы на них выделяли хотя бы минут по 30, причем единовременно. Сами сервисы так устроены, что нет особого смысла заходить туда 10 раз в день по паре минут, тогда просто ничего не успеть. Offline программы ведут себя с точки зрения времени так же — занятие включает в себя набор упражнений по переводу слов с русского на английский, обратный перевод, выбор перевода из предложенных вариантов и т.п. и занятие требуется довести до конца, иначе оно просто не засчитывается. Последствия печальны, по крайней мере, для меня. На работе — совесть не позволяет выделить 30 минут, а дома — постоянно нет времени. Иногда конечно после прочтения очередной мотивирующей статьи вспыхивает интузиазм, но через месяц он спадает, и начинаешь откладывать урок на потом, на завтра, обещаешь себе с понедельника начать заниматься каждый день… и постепенно на ресурс заходишь все реже, а потом забрасываешь вообще.

Поэтому было решено, что нужна програма, которая будет занимать минимальное кол-во времени и напоминать о себе сама. Выглядит это очень просто — всплывает окно, вам последовательно предлагают перевести несколько слов, после 5 правильных ответов — программа завершается. Через 30 мин она запускается вновь. Ввести 5 правильных ответов, особенно при навыках слепой печати — занимает от силы минуту, что позволяет учиться и дома и на работе (совесть вполне позволяет потратить пару минут в час). Если в данный момент вы выполняете какую-то важную работу — окно сворачиваем и программа затихает не отвлекая от задачи, пройти урок можно попозже во время неизбежных перерывов. Все равно каждый рано или поздно отвлечется от работы на чай, обед или еще что.
Таким образом получаем: частные повторения уроков с минимальными временными затратами на каждый отдельный урок, плюс напоминания о том, что неплохо бы повторить слова.

Далее — набор слов для изучения.

Почему-то все приложения считают, что после того как я выполнил необходимый минимум по кол-ву правильных ответов по слову, то его следует отметить выученным и больше не вспоминать о нем. Да я же его так забуду рано или поздно! Еще никогда не понимал разделение слов по тематическим словарям. В том же клиенте wordsteps для телефонов — у вас есть набор словарей, в каждом примерно по 50 слов, для урока вы выбираете какой-нибудь словарь, вас прогоняют по части этого словаря и в зависимости от того, насколько хорошо вы по мнению программы выучили то или иное слово, оно помечается к повторению через день, два, неделю и т.п. В итоге у меня скапливается штук пять различных словарей и в каждом только по 2-3 слова помеченных к повторению сегодня, и я вынужден просматривать все словари, что бы найти те, у которых есть необходимое для урока кол-во изучаемых слов. Возможности хоть как-то объединить словари, по крайней мере, в телефонном клиенте — нет.

В качестве решения был выбран формат в виде одного большого словаря. Как только в нем заканчиваются слова — просто добавляем в конец новые. А для урока слова выбираются следующим образом: формируем набор из 50 штук, которые мы начали изучать и добавляем все изученные. Каждому из слов проставляется рейтинг, зависящий от того, насколько давно это слово повторялось, какой процент по нему правильных ответов, правильно ли вы в последний раз его перевели и т.п., в итоге чем хуже вы слово знаете тем выше у него рейтинг. Затем из полученного списка случайным образом выбираются слово, которые будет предложено для перевода, причем, чем выше у слова рейтинг, тем больше вероятность, что именно оно будет вам предложено. Изученные слова, конечно, получают рейтинг сильно ниже, чем те, которые находятся на изучении, но все же рано или поздно вы и их повторите, причем, если при повторении наделаете много ошибок, они вновь перейдут в разряд неизученных. Статистика для подсчета рейтинга ведется отдельно по каждому из направлений переводов: Ru->En и En->Ru. Причем, когда нужно выбрать новое слово для изучения, например с русского на английский, в первую очередь беруться слова, которые изучались или изучаются в другом направлении перевода, что бы не получилось так, что с русского на английский вы научились переводить первую половину словаря, а с английского на русский вторую.
В итоге имеем — один большой словарь, каждое слово которого планомерно и последовательно изучается, а потом периодически повторяется.

Следующее — это словарь.

Если я решу самостоятельно создать свой словарь для изучения, большинство программ предоставит мне «удобный» GUI интерфейс, где я буду медленно, но верно вписывать слова по одному за раз. Что очень, на мой взгляд, неудобно, особенно если я хочу добавить сразу набор из штук 100, которые нашел где-то в интернете по интересующей меня тематике. А о возможностях «кастомизации» перевода у слова даже говорить не хочется, хорошо если позволяют ввести несколько возможных переводов через запятую, да регистр при ответе проигнорируют. И все — больше никаких возможностей.

Из этих соображений, GUI интерфейс для пополнения словаря, был отвергнут, а сам словарь был помещен в простенький текстовый файлик json формата, где нет ничего лишнего, только через запятую указаны слово, транскрипция и перевод. Теперь, как только мы находим в интернете очередную страничку с тысячей самых часто употребляемых слов английского языка, просто копируем ее, вставляем в любой редактор, желательно с поддержкой блочного редактирования, например в sublime text и за 5-10 минут приводим к нужному формату. Редактировать слова потом, тоже одно удовольствие. Так же в словарь были добавлены возможности настройки правильности перевода:

  1. Это широко распространенная возможность указывать через запятую несколько вариантов перевода слова, когда за правильный засчитывается любой из них
  2. Некоторые разные английские слова переводятся на русский одинаково н-р: «team» и «command» переводятся как «команда», поэтому просить перевести слово «команда» на английский без уточнения контекста как-то глупо. На этот случай, в словаре можно использовать уточнения в круглых скобках вот так: [«team», «ti:m», «команда(группа)»], [«command», «kə'mɑ:nd», «команда(приказ)»]. Теперь в упражнении программа будет явно просить перевести словосочетание «команда (группа)» или «команда (приказ)», при переводе же в обратную сторону слов «team» или «command» уточнение писать не нужно, требуется ответить только «команда»
  3. При переводе на русский, зачастую, окончание слова (или другая часть) не важна. Например — «angry» можно перевести как «сердитый», «сердит», «сердита» и т.п. Что бы избежать путаницы, в переводе можно пометить необязательную часть слова квадратными скобками например так: [«angry», "'æŋgri", «сердит[ый]»]. Теперь везде в интерфейсе перевод будет отображаться как «сердитый», но в качестве ответа на слово «angry», допускается вводить любое слово, которое начинается с «сердит», т.е. упомянутые выше: «сердитый», «сердит», «сердита» и т.п. Скобок может быть сколько угодно и в любой части слова

Пример оформления словаря можно посмотреть тут.
Конечно для составления такого словаря придется попотеть, но простота редактирования и результат — делают такую работу оправданной.

Ну и еще немаловажный плюс:

все это в open-source и написано на python, что в связи с простотой и удобочитаемостью языка — дает возможность очень широкому кругу лиц поправить исходники под себя. Что я и призываю активно делать, с выкладыванием интересных результатов доработки — обратно в репозиторий. Так же python «автоматически» обеспечивает высокую степень кроссплатформенности (скрипт проверялся в Windows7 и Ubuntu, надеюсь с другими версиями и Mac OS X проблем не будет, к сожалению, возможности протестировать везде — нет).

Синхронизация

Программу я использую сразу на нескольких компьютерах, поэтому потребовалась какая ни какая синхронизации статистики и словаря. Писать свою особого смысла нет, разве только для получения опыта. Поэтому было решено использовать один из множества сервисов по синхронизации файлов, куда можно положить либо папку с программой целиком, либо только файлы со статистикой и словарем, поправив путь к ним в настройках. Программа была немного доработана, что бы перед каждым уроком она считывала актуальную версию словаря и статистику из файла, а по завершению урока, статистика перечитывалась снова, в нее добавлялась информация по прошедшему уроку и все сохранялось обратно в файл. Это гарантирует, что мы всегда работаем с последней версией словаря и при сохранении статистики по уроку не перезатрем результаты с другого компьютера, достаточно лишь перед завершением урока убедиться, что синхронизация dropbox (или его аналога) завершилась.

Статистика

Ну и какая программа по пополнению словарного запаса без визуализации прогресса. В правом верхнем углу основного окна программы есть кнопочка с буквой «i» нажав на которую можно уведеть список всех слов из словаря с информацией по каждому из них
Подробная статистика по словам
а так же на последней вкладке видна суммарная статистика по всем словам сразу:
Общая статистика

Настройки

Параметры упражнений, время между ними, а так же путь к словарю и файлу со статистикой, вынесены в отдельный файл с комментариями, что бы не приходилось лазить по коду для их вычленения.

Установка

Какая-то специальная установка для скрипта не требуется достаточно прописать в автозагрузку строку вида «%path_to_Python26%pythonw.exe %path_to_main.py%main.py». Ну и конечно иметь установленный python 2.6 (хотя вполне вероятно, что все будет хорошо работать и на других версиях 2.X). Никаких специальных библиотек я не использовал, только стандартные возможности дефолтной поставки, для GUI взял tkinter, который в большинстве случаев поставляется вместе с python. В Linux python уже с большой вероятностью будет установлен, но возможно понадобится доустановить пакет tkinter.

Заключение

Собственно цель написания статьи и выкладывание программки в общий доступ — получения обратной связи от максимального кол-ва людей. Буду очень благодарен за новые идеи по доработке и за критику существующей реализации. Будет вообще здорово, если идеи и критика будут выражены в виде коммитов в репозиторий.

Автор: ReanGD

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js