Этот проект огромен.
Сейчас я анализирую первый релиз с очень ограниченной функциональностью.
Функциональность
- Тренируем способности:
- Читать
- Слушать
- Порядок действий:
- Показать текст и прочитать его пользователю, выделяя прочитанную часть одним цветом и слово, которое сейчас читается, - другим
- Предложить пользователю выделить неизвестные слова
- Показать толкования каждого из неизвестных слов из публично доступных словарей - одного слова за раз
- Подобрать следующие тексты, использующие неизвестные слова, и добавить их в очередь для чтения
- Для новых пользователей очередь содержит несколько простейших текстов типа "Здрассте/До свиданья/Как тебя зовут".
- Когда очередь оказывается пустой - пользователь уже знает все слова из представленных текстов - показать список тем для выбора следующих текстов.
- В идеале новый текст не должен содержать больше 10% новых слов или словоформ.
Данные
- Корпус коротких текстов, проиндексированный по:
- Словам
- Морфемам (когда возможно)
- Идиомам (когда возможно)
- Толкования слов, собираемые по мере необходимости
- Данные о пользовательской активности:
- Частота, затраченное время и насыщенность уроков
- Словарь пользователя: слова, которые никогда не отмечались как неизвестные или перестали отмечаться как неизвестные (с числом обоих состояний или списком текстов)
- Внимание: как много слов впервые отмечаются как неизвестные лишь после нескольких появлений в текстах
- Эффективность обучения: сколько раз одно и то же слово отмечается как неизвестное?
Используемые технологии
- A progressive web app (PWA) - нигде не нашла перевода этого выражения, "прогрессивное веб-приложение" не в счет - сохраняющее данные о пользовательской активности на пользовательской машине.
- Тот же самый код для компьютера, планшета и смартфона
- не нужно инсталляции и апгрейдов
- 100% приватность для пользователя
- пользователь == пользовательский агент(браузер или планшет/смартфон)
- MongoDB на публичном сервере для хранения корпуса
- MongoDB поддерживает регулярные выражения как тип данных.
- Я знаю, как это сделать в SQL. Самое время разобраться с NoSQL 😉.
- Публичный сервер - это необходимость. Я пока не готова к собственному серверу.
- Использовать кластеринг для разпознавания морфем и идиом
- Хорошо бы добавить возможность критичного использования мнения пользователей
- Use GraphQL для взаимодействия клиента с сервером
- Легче добавлять функциональность, чем при использовании REST
- Сложнее выучить
- Использовать автоматическое чтение (TTS) доступное в браузере
- Не надо хранить аудио
- Легко синхронизировать чтение и выделение текста
- Для начала реализовать всю серверную часть на Python
- Python имеет больше функциональности для машинного обучения
- Он поддерживает все, что мне сейчас надо
Нужно выучить
- Реализацию асинхронности в Python
- GraphQL
- PyMongo
- Motor?
- Graphene or Ariadne?
- Tornado?
Готовые фрагменты
Продолжение следует ...