KnownReader. Читалка и словари
Вступление
Всем привет!
Годы идут, а мы все ещё пишем читалку со словарями. Настало время для очередной статьи о том, что у нас появилось нового.
Для лучшего погружения в контекст советую прочитать две предыдущие статьи или хотя бы последнюю из них:
KnownReader - это читалка со словарями. Не секрет, что основной "книжный" движок у нас от знаменитого CoolReader'а. Движок этот существует с 2000 года, пережил затишье, затем всплеск (около 2020-2021 года), а сейчас развивается в основном в составе читалки KOreader). Но словарная часть и почти полностью переработанный (android) интерфейс - наши.
Напомню основную "парадигму" использования словарей в читалках:
выделяем (в книге) слово или фразу:
переводим выделенное:
Но ведь не обязательно так, подумали мы и сделали кнопку вызова диалога словаря прямо с главного экрана, откуда вы переноситесь в "агрегатор словарей":
Что тут можно? А вот что: ввести язык "с" и язык "на" (можно сохранить "быстрые пары языков" в настройках), ввести слово и выбрать, в каком словаре будем переводить. Некоторые программы (такие как википедия) могут также отправить "намерение перевода" в программу-словарь. Мы тоже это умеем:
Если вернуться к словарям, то здесь с последней публикации произошло очень много изменений. Самое интересное оставлю напоследок. Начнём.
Классификации словарей
Словарей у нас много, переводить можно в любом из них. Чтобы было легче ориентироваться, расскажу, как я классифицирую словари:
Первая "глобальная" подклассификация словарей: онлайн и оффлайн словари. По контексту понятно, что одни умеют работать только при наличии интернета, а другие могут обойтись без него. Но механики тут разные;
Вторая "глобальная" подклассификация: возможность перевода слов/устойчивых фраз либо произвольного текста;
Третья и основная классификация - по способу интеграции:
Словари-приложения;
Онлайн-словари без API;
Онлайн-словари с API;
Встроенные (оффлайн) словари.
Словари-приложения
Суть здесь в следующем - читалка отправляет текст во внешнюю программу, дальше всё делает она. Бывают как онлайн, так и оффлайн.
Плюсы:
Простое взаимодействие;
Стабильность работы.
Минусы:
У всех внешних программ свой интерфейс, свои нюансы, что бывает не всегда удобно;
Нет возможности вести личный словарь (здесь есть один нюанс - ниже);
Если мы ещё и в еинке (а часто это именно так), то возможны лишние перерисовки экрана.
Пробежимся по таким словарям:
GoldenDict - старый, добрый, функциональный. Платный (но есть обходные пути), переводит слова, оффлайн. Есть "осовременивающие" моды, есть наш мод. Может много чего, даже морфологию, если настроить. Не обновляется очень давно, исходников нет... Но хотя бы работает;
Aard2 - бесплатный, переводит слова, оффлайн. Простой и в то же время неплохой словарь с собственным очень эффективным форматом slob, который может спокойно обрабатывать огромные словари. В качестве словарей можно скачать полные дампы википедии (на разных языках, обновляются регулярно). А вот тут у нас есть новости. Во-первых, у программы есть исходники. Во-вторых мы её немного доработали: немного улучшили "связность" интерфейса, добавили второй вид поиска и, что главное, научили отдавать текст перевода обратно в KR, обеспечивая тем самым работу личного словаря - тот самый нюанс из пункта выше. Доработанную под нас версию aard2 можно взять в нашей теме. PR в основной репозиторий оформлен. Очень надеемся, что автор захочет включить его в будущие версии. Минусы - не очень вписывается в еинк интерфейс, мало словарей (по сути, только википедия и есть). Но! Я нашёл в интернетах замечательную программу PyGlossary, которая может (и хорошо это делает) конвертировать словари из/в различные форматы, включая slob. Работает и под Windows, и под Linux. Конечно, конвертирование - это лишнее действие, но ведь всего один раз;
Abbyy Lingvo - переводит слова, оффлайн. Хороший, платный, словари тоже платные;
Yandex/Google переводчики - бесплатно, онлайн (можно, по-моему, заранее словари скачать для оффлайна), переводят текст. Весьма качественно, кстати;
Reverso Context - кто-то из читателей очень хвалил. Ну и на самом деле хорошо;
И много других всяких разных, которых описывать уже не будем (например Mdict, с преимущественно китайскими словарями и т.д.). Если знаете интересные и хорошие, будем рады почитать о них в комментариях к статье (в личку тоже можно писать, равно как и на форум).
В KR в перечне словарей-приложений есть ряд старых, которые, возможно, уже давно не живы (мы не проверяли). Позже планируем немного прибраться здесь, чтобы в списке присутствовали только актуальные.
Небольшая, но важная ремарка - дополнительно к ряду "преднастроенных" словарей-приложений KR может использовать в качестве словаря любое приложение, которое умеет принимать в себя текст.
Онлайн-словари без API
Здесь идея простая - мы отправляем текст на перевод "веб-страничке" словаря, она отдает нам html, который мы должны распарсить и показать пользователю перевод и попутные артефакты (примеры и т.д.). Минусы очевидны - если формат (структура) веб-страницы изменится, то у нас всё сломается. Плюсы тоже есть - это бесплатно.
Здесь уже нужно немного рассказать, как настроить направление перевода, так как в онлайновых словарях это необходимо. Языковая пара "язык с" и "язык на" у нас ассоциируется с книгой, т.е. необходимо указать это один раз для книги. Для удобства в настройках можно указать часто используемые пары, чтобы потом иметь возможность быстро их выбирать.
Указать языковую пару для книги можно в нескольких местах - настройки, панель выделения, редактирование информации о книге, а также - непосредственно перед первым переводом.
В этой категории представлены:
Linguee - очень качественно, красиво, хорошо. Выдает хорошую структуру словарной карточки (перевод, примеры). Немного жаден - если переводить часто, то начинает капризничать и перестаёт отдавать перевод;
Glosbe - совершенно могучий проект: куча языков (более 6000, включая самые редкие), карточка тоже со структурой;
Dict.cc - тоже достаточно хорош. Приводим здесь по советам читателей (мы вас ценим);
Tureng - для изучения турецкого (тоже по просьбе читателя). Но как-то раз во время поездки по Турции я и сам им воспользовался;
Gramota.ru - это чисто "по приколу", но пусть будет;
Urban dic - этот, наверное, больше подойдёт для современных текстов, нежели для книг. Эдакий народный толковый словарь, но любопытен. Попробуйте, например, перевести в нем "covidiot".
Онлайн-словари с API
Здесь уже всё серьёзнее. Взаимодействие по API - штука намного более устойчивая, но не обошлось и без минусов. Разберём:
Abbyy Lingvo переводит слова. Так же хорошо, как и приложение (есть даже транскрипция и звуковые файлы произношения, которые мы пока не прикрутили), но есть существенные минусы - для нормальной работы нужно зарегистрировать "своё" приложение и получить токен. Токен сохраняется в настройки KR и используется. Есть квота на количество переводов. Доступ этот, как я понимаю, называется у них "тестовым" (т.е. могут закрыть в любой момент, но долгое время все очень стабильно);
Яндекс переводчик переводит тексты. Здесь всё отлично с переводами, но, во-первых, платно, а, во-вторых, ещё более сложная процедура регистрации - нужно регистрироваться в яндекс-облаке, вводить туда данные карты, получать токен и т.д. Мы всё это описали - пробуйте. Из плюсов - нет абонплаты, сравнительно дёшево. На заре становления этого облака мне звонил вежливый яндекс, хотел узнать впечатления. Я попробовал объяснить, что хорошо бы сделать упрощённую систему регистрации для таких вот случаев (когда перевод осуществляется в читалке, но платить за это хочет сам читатель), но они честно признались, что такого нет. Вообще говоря, в яндекс-облаке есть куча всего интересного, например качественная озвучка текста. И мы даже одно время думали прикрутить её к движку чтения книги, но ценник там, на мой взгляд, не гуманный - я посчитал (правда уже забыл), что озвучка Сервантеса "Дон Кихот" выйдет то ли в 400, то ли в 1000 рублей. Подозреваю, что яндекс реализует (или уже?) эту фичу в своей собственной читалке;
Google. Ну, куда без него то. Всё примерно также как в яндексе, но дороже и с абонплатой. Поэтому этой дорогой мы не пошли. Однако обнаружили какую-то лазейку, которая позволяет переводить бесплатно (подсмотрели у KOReader). Уж не знаю, насколько это официально, но работает;
Deepl.com - интересный игрок, я про него ранее не знал. От тех же ребят, что и linguee делают, но это уже для перевода текстов. Заявляют очень качественный перевод, но каких-то больших различий от Яндекса я не увидел. Может, плохо смотрел? Есть как платный, так и бесплатный доступ, но надо указывать карту, причём не российскую. Санкции тут ни при чём, у них сразу России в списке стран не было, хоть и язык поддерживается. Как вариант - попросить зарегистрироваться знакомых, живущих в Европе.
Небольшая ремарка. Идея, пришедшая в голову во время путешествия на “ласточке” из Адлера в Анапу (интернет там был достаточно нестабильный, да и тот только на станциях, поэтому вызывать онлайн словари в половине случаев не удавалось, а рассматривать ошибку сетевого соединения - стало скучновато) - настройка соответствия оффлайн и онлайн словарей. Теперь можно переводить, например, в яндекс онлайн, а когда интернета нет - скажем в GoldenDict, причём без дополнительной перенастройки, абсолютно прозрачно.
Оффлайн словари
Вот мы и добрались до самого интересного и нового. Интернет, онлайн - это хорошо. Но не до конца надёжно и не везде работает. Между тем, в сети можно найти большое множество словарей. Популярные форматы: StarDict и Lingvo DSL. Мы поддерживаем оба (в кодировке utf8). Что нужно сделать:
Записать словари в папку dics папки приложения (KnownReader). Словарь, как правило, состоит из нескольких файлов, поэтому он размещается "в свою подпапку";
Зайти в настройки "Словари / офлайновые словари", и там:
Отметить галочкой, использовать ли этот словарь, отсортировать словари так, как хотим;
Нажать "преобразовать" для каждого словаря, дождаться преобразования (это разовая операция);
Можно пользоваться.
Перевод в оффлайн словаре выглядит примерно так:
Onyx Boox
Поговорим немного об Onyx Boox. Дело в том, что адаптация читалки к устройствам Onyx - приоритетная задача для нас. У Оникса есть своё встроенное приложение для словарей. И, что самое интересное, оно имеет API, и к нему можно подключаться, что мы и сделали. Работает примерно как "обычный" онлайн словарь. В будущем - (наверное) сделаем ещё отображение в виде html.
Кстати, мы адаптировали ридер для современных читалок Onyx, в том числе цветных, которые выши совсем недавно (Onyx Boox Poke, Nova (Air (C)) и других): https://onyx-boox.ru/boox_novaairc, а также не забываем о более "классических моделях" (например на Android 4, таких как Livingstone). В любом случае - если у вас читалка Onyx и возникают вопросы по использованию читалки на них - вам прямиком к нам.
OPDS (Open Publication Distribution System)
Напоследок поговорим немного не о словарях, а об онлайн каталогах книг (opds). Захотелось мне (в академических целях) поднять сетевой каталог книг в рамках сети домашнего роутера (расшарив, таким образом, его для всей семьи, а при наличии открытых проброшенных портов - ещё и наружу). Тем более на просторах интернетов сравнительно нетрудно найти дампы сетевых библиотек: траума, флиб и т.д. Ну, вы поняли.
Решение следующее:
Была найдена программа freelib (https://github.com/petrovvlad/freeLib, автор Влад Петров);
KR был доработан с учётом некоторых нюансов программы;
Freelib умеет отдавать библиотеку в виде opds каталога, но для запуска программы, к сожалению, нужна графика (речь про linux). Однако, связавшись с автором, проблему решили - он согласился доработать, и программа научилась запускаться в консоли;
Дальше дело техники - используем одноплатник (OrangePI, RaspberryPI) и внешний (USB) жёсткий диск к нему;
Запускаем, всё работает (кто хочет, но не может настроить - приходите).
Заключение
К сожалению, заключение не придумали - некогда нам. Как того требуют традиции (раз уж дочитали), то, по законам жанра, кот Николай передает всем привет.
Продолжаем работать - открытых тикетов 148, закрытых 430. Оставайтесь с нами, приходите к нам ;)