Всем привет!

Думаю, многим из тех, кто решил покорять литературу на английском, знакома эта ситуация: читаешь книгу (в моем случае - на читалке Kindle), честно выделяешь незнакомые слова, думая: «Вот дочитаю главу, выпишу их и выучу».

Но есть загвоздка)

В реальности, по крайней мере в моём случае, файл My Clippings.txt со всеми хайлайтами превращается в кладбище забытых слов. У меня этот файл разросся до каких-то неприличных размеров.

Проблема в рутине. Нужно подключить книгу, открыть файл, найти нужную строку, скопировать слово, вставить в переводчик, скопировать перевод и транскрипцию, и наконец создать карточку в приложении. Меня хватало слов на 50, потом становилось скучно. В какой-то момент я понял: я же знаю Python (пусть и совсем чуть-чуть), зачем я делаю это руками?

Так родилась идея написать Telegram-бота, который забирает всю грязную работу на себя.

Что должен уметь бот?

Идея была простой: я хотел скидывать боту сырой файл My Clippings.txt прямо с устройства, чтобы он сам вычищал оттуда весь мусор вроде дат и позиций в книге. Но самое главное - бот должен был не просто переводить слова, а готовить полноценный .csv файл для импорта в приложение ReWord (или любое другое, поддерживающее импорт).

Почему обычные словари не справились

Сначала я думал обойтись бесплатными библиотеками-парсерами для переводчиков по типу Reverso или простым API Яндекс.Словаря. Казалось бы, чего сложного? Отправляешь слово - получаешь перевод. Но тут вылезли нюансы английского языка, о которые разбились первые варианты скриптов.

Главная проблема - лемматизация, то есть приведение слова к начальной форме. Если отправить в обычный словарь слово «went», он либо скажет, что перевода нет, либо вернет «ходил» (прошедшее время). А мне для карточки нужен инфинитив - «go». То же самое с множественным числом: «mice» словарь часто не находит, потому что знает только «mouse». А идиомы вроде «piece of cake» или фразовые глаголы «gave up» при тупом переводе превращались в кашу.

Мне нужен был инструмент, который понимает контекст и грамматику, а не просто ищет совпадения в базе.

Гибридная схема: «Сначала умный, потом точный»

В итоге я пришел к архитектуре, где скрестил большую языковую модель (LLM) и классический словарь. Работает это в два этапа.

Сначала «грязное» слово из книги летит в нейросеть (я использую YandexGPT через API). Промпт ставит задачу жестко: «Ты лингвист. Твоя задача - вернуть начальную форму слова. Went -> Go, Better -> Good, Mice -> Mouse. Идиомы оставляй как есть». На этом этапе мы исправляем грамматику, отбрасываем окончания -ing, -ed, -s и понимаем, что «running» - это «run».

Получив от нейросети чистое слово, бот стучится уже в API Яндекс.Словаря. Это нужно для точности, потому что нейросети иногда могут «галлюцинировать» с транскрипцией, а Словарь дает точные академические данные: транскрипцию [maʊs], синонимы и примеры использования.

В итоге ИИ понимает суть и чистит слово, а Словарь оформляет это в красивую словарную карточку.

Немного про «внутренности»

По стеку всё максимально просто:

  • Python последней версии (3.14.2) и библиотека Aiogram 3 для самого бота;

  • Для хранения истории прикрутил SQLite - бот запоминает хэши уже обработанных слов и не повторяется с их переводом;

  • Docker - чтобы завернуть всё это и закинуть на сервер.

Как это выглядит сейчас

Теперь процесс занимает секунды. Я подключаю Kindle к ПК, перетаскиваю My Clippings.txt прямо в чат с ботом и почти сразу получаю готовый CSV-файл, который остается только импортировать в ReWord.

Примерно так оно выглядит, аву для бота нагенерил у Gemini)
Примерно так оно выглядит, аву для бота нагенерил у Gemini)

Ссылки

Код проекта лежит на Гитхабе. Ничего сверхъестественного там нет, но мою задачу скрипт решает на 100%.

Если вы, вдруг, тоже читаете книги на английском с Kindle и тоже страдаете от того, что слова остаются в книгах, а не в голове - возможно, бот будет вам полезен) Это мой небольшой пет-проект, и я буду рад любой обратной связи, критике, идеям, предложениям.

  • 🤖 Бот в Telegram: ссылочка (Хостинг и API оплачиваю я, пока начальный баланс на Amvera и грант Яндекс Облака не кончатся)

  • 🐙 Исходники на GitHub: ссылочка

Всем добра и богатого словарного запаса!