Текстобзор: Diglossa
07.10.2022
Описание
Diglossa — набор программ для чтения и создания электронных книг. Отличительные особенности проекта: автоматизация создания параллельных текстов на разных языках, поддержка словарей, включая их генерацию, использование текстовых слоёв.
Проект развивает Михаил Быков с 2016 года. Сайты с информацией по проекту: diglossa.org и diglossa.ru. Исходный код всех систем проекта открыт и размещён на GitHub: diglossa, anthrax, pecha.js и др.
Diglossa
Основной модуль Диглосы является десктопным приложением на Electron + CouchDB, другие модули используют сходный стек. Для последней версии (0.9.94) в релизах на GitHub есть релизы для macOS и нескольких дистрибутивов Linux, версии для Windows нет.
Возможности программы из описания:
- импорт книг: .epub, .pdf, .fb2, .html, .md, .txt и — .dgl
- импорт словарей — .sd, .dsl
- автоматическое определение языка текста
- вызов соответствующего языку словаря по alt-mouse-move
- локальный и полнотекстовый поиск
- закладки
- импорт и параллельное подключение переводов той же книги
- редактирование структуры книги
- автоматическая проверка синхронизации абзацев
- экспорт синхронизированных книг в формате .dgl (пока только в виде файла)
- генерация многоязычных контекстных фразовых словарей[1]
Внешне Diglossa похожа на обычную читалку для электронных книг.
В плане обычного чтения обычных книг, Диглоса не предоставляет каких-то преимуществ по сравнению с другими читалками (например, CoolReader), примечательные возможности описаны далее.
В целом интерфейс программе не всегда интуитивно-понятный и содержит ошибки. Например, если не сделать генерацию индекса через главное меню (Книга
— Generate FTS
) то при поиске будет пустое окно результатов. Даже если сделать поиск и там будут результаты, непонятно как вернуться назад к книге, в интерфейсе нет элементов для этого.
Возможности поиска только по одной книге найти не получилось, ищет сразу по всем. Сходные замечания можно описать и по функционалу связанному с закладками.
Это не критичные замечания и, вероятно, исправить их не сложно, но таких деталей много и они затрудняют использование программы. Проблемы такого рода могут быть устранены если у программы появится сообщество которое сможет заняться подобными доработками.
Формат dlg
Diglossa может экспортировать и импортировать книги в собственном формате dlg. Книга в формате dlg это архив состоящий из файла с описанием в формате JSON и файлов книг в Markdown.
JSON-файл содержит стандартную информацию, вроде названия книги и лицензии, а так же список Markdown-файлов. Каждый Markdown-файл представляет собой книгу на определённом языке. Таким образом формат подходит для хранения параллельных текстов. Пример JSON файла из dlg-книги:
{
"name": "Владимир-Ильич-Ленин-Государство-и-революция",
"version": "1.0.0",
"editor": "John Doe",
"email": "john.doe@example.com",
"homepage": "http://example.com",
"license": "CC BY-SA",
"keywords": "diglossa, bilingua, dgl",
"date": "2022-10-06 17:31:17",
"texts": [
{
"lang": "rus",
"author": "Владимир Ильич Ленин",
"title": "Государство и революция",
"type": "md",
"src": "Владимир-Ильич-Ленин-Государство-и-революция/ВладимирИльичЛенин-Государство-и-революция.rus.md",
"origin": true
},
{
"lang": "eng",
"author": "V. I. Lenin",
"title": "The State and Revolution",
"type": "md",
"src": "Владимир-Ильич-Ленин-Государство-и-революция/V.I.Lenin-The-State-and-Revolution.eng.md"
}
]
}
Точного описания используемого Diglossa диалекта Markdown нет, единственное замечание касается интерпретации блоков текста для удобного сопоставления вариантов на разных языках:
Псевдо-markdown — потому что из блоковых тегов используется только один — p, или paragraph. Последовательность (псевдо) абзацев включает заголовки, абзацы, строки таблицы, строки списка, примечания и всё подобное горизонтальное. Таким образом, текст книги превращается в последовательность абзацев. Благодаря этой особенности формата .dgl можно легко сопоставить два или более параллельных текста. В синхронизируемых текстах каждый абзац соответствует своей параллельной паре. [1:1]
Слои
Концепция слоёв — одна из наиболее важных для текстологии идей описанных в материалах связанных с Diglossa. Авторский текст представляет из себя простой текст (plain text) или текст с минимальной разметкой. Такой текст удобнее всего хранить в системе управления версиями. Затем к такому тексту может быть добавлена дополнительная информация в виде «слоёв». В самой простейшей реализации, слой может представлять из себя набор позиций в тексте и информацию которую нужно в эти позиции добавить, например, ссылки на примечания.
Слои могут добавлять любую информацию и теоретически даже скрывать или изменять части текста.
В «Диглоссе» к исходному тексту могут быть добавлены, например, параллельные тексты целиком или любой текст к любому месту в исходном тексте. Основной целью при создании «Диглоссы» была работа с параллельными текстами. Однако параллельные тексты являются лишь одним из примеров слоя. Другие примеры: предисловия и справочники, комментарии, пагинации, логические разметки, картинки и примечания издателей, любая мета-информация и режим учебника, когда исходный текст представляется вставками, цитатами в обрамлении нового текста. (Эти возможности будут добавляться постепенно в следующих версиях.) Использовать сложную систему слоев без необходимости не обязательно.[2]
Такой подход решает следующие проблемы:
- Авторское право не нарушается, в плане модификации произведения. Текст остаётся в неизменном виде, все изменения распространяются отдельно в виде слоёв;
- Исходный текст не модифицируется и может быть легко проверен по первоисточнику (если сохранилась связь со сканом, которая тоже может быть представлена в виде слоя);
- Слои можно создавать отдельно от произведения, для разных целей, разными людьми, можно представить себе коллективное редактирование слоёв по wiki-принципам.
Расширяя идею слоёв дальше, можно, представить себе систему которая позволит включать или выключать отдельные слои (например, как сейчас делается в онлайн картах)а затем пользоваться результатом или экспортировать результат в подходящий формат: PDF, fb2 и др.
Пример Яндекс-карт с выключенными и включенными слоями отображающими пробки и общественный транспорт:
Мне не удалось найти в интерфейсе Diglossa элементов связанных со слоями, их созданием, включением или каких-либо других. Возможно, этот функционал ещё не реализован.
Технически, реализация слоёв представляет определённые сложности и требует анализа выходящего за рамки этого обзора, но хотелось бы кратко отметить некоторые из них:
Даже выверенные тексты могут редактироваться, например, при нахождении опечаток, поэтому если слой ориентируется просто на позицию в тексте (номера символов) то слой будет подходит только к определённой версии текста. Возможно, реализуем алгоритм автоматического обновления слоёв при изменении исходного текста;
Возможны конфликты слоёв друг с другом.
Параллельные тексты
Diglossa позволяет подготавливать и читать параллельные тексты.
Для подготовки параллельных текстов присутствует режим редактирования (запускается по ctrl+e
).
В верхней части экрана видно количество блоков теста (обычно, абзацев) в текущем разделе текста (например, главе), в тексте слева и в тексте справа. Если цифры не совпадают, то вероятно, с параллельным переводом что-то неверно.
В редакторе можно разделять, удалять и склеивать абзацы чтобы добиться «параллельности» в текстах. Это ручной способ, так же есть автоматизированные.
Реализованы два механизма авто-преверки синхронизации абзацев — сложный, с проверкой соответствия стемов абзаца, требующий коннекта с сетью и создания словарей соответствия стемов словоформ языковых пар. И простой, на основе сравнения длины строки абзаца, числа фраз и пр. формальных признаков. Оказалось, что простой метод даёт неплохие результаты и вполне годен к применению в реальной практике. Собственно, авто-синхронизация есть убойная фича, делающая всё вышеописанное реальным. [1:2]
Проверить автоматизированные средства сопоставления не удалось. Возможно, используемые алгоритмы сопоставления представляют интерес для реализации средств синхронизации параллельных текстов.
После того как абзацы сопоставлены книгу можно экспортировать в dlg-формат. Важно подчеркнуть, что для импорта или отображения параллельной книги из dlg-формата или его аналогов нет необходимости использовать базу данных. Вся информация необходимая для отображения уже содержится в Mrakdown-файлах — деление файлов на абзацы. Кроме файлов требуется только определённый алгоритм деления файлов на блоки, например, используемый Diglossa, при котором все блоки находятся на одном уровне — отсутствует иерархия (возможно, за исключением оглавления).
Diglossa обладает средствами для создания параллельных текстов когда в наличии есть тексты на разных языках, но не предоставляет особенных средств для создания переводов.
Словари
Отдельным крупным разделом Diglossa являются словари. Помимо простой загрузки словарей в Diglossa есть инструменты для их генерации. В качестве исходных данных для словарей используются wiktionary.org или данные самой книги. Опубликованные инструменты относятся к следующим языкам: греческий, латинский, санскрит, тибетский, китайский.
Некоторые инструменты можно использовать отдельно от Diglossa, например веб-приложение anthrax как словарь греческого языка:
Другой пример — контекстные словари Morpheus:
Для работы достаточно скопировать тибетский текст (utf-8) где угодно на десктопе и затем провести мышкой над тибетской фразой в «Морфее». Справа будут показаны значения из активированных словарей и (возможно) служебные частицы в составе слова. Иногда Pecha.js не может определить словарный состав фразы однозначно, возникает всплывающее окошко для выбора варианта. (Отмечается слегка розовым цветом.) Также можно проанализировать состав правильно определенного сложного слова из нескольких слогов, кликнув на нем. В его структуре тоже могут оказаться неоднозначности. В результате возникает забавная лесенка вариантов состава слова, вплоть до слов из одного слога, самых древних. В целом это дает отличный инструмент для конструирования возможного смысла слова и представление о его возникновении и развитии.[2:1]
Словари можно использовать в Diglossa при чтении обычных и параллельных книг. В описании есть интересная идея модификации словаря для отдельного текста. По сути, это похоже на идею слоёв, только для словарей.
Тем не менее задача постепенно решается, и в будущих версиях «Морфеи» будут иметь возможность генерации локального авторского словаря в виде файла-пустографки, в каждую строку (словарную статью) которой автор сможет добавить свой перевод, актуальный только для данного текста. И затем его опубликовать в один клик для использования другими читателями данного текста и возможной совместной дальнейшей работы.[2:2]
Заключение
В Diglossa заложены перспективные идеи связанные с интернациональными текстами: параллельные переводы и словари. Кроме того идея слоев может помочь в решении текущих проблем с авторским правом, а так же коллективным добавлением текстологических и других комментариев.
Не все идеи на данный момент реализованы, часть функций выглядит ещё сырой. На данный момент проект Diglossa выглядит прототипом, проверкой концепции. Это важный шаг, чтобы проверить идеи на работоспособность и полезность. С точки зрения текстологии особый интерес представляют алгоритмы работы со слоями, параллельными текстами и словарями.
Таким образом, я надеюсь, Diglossa.js и семейство «Морфей» являются неким предварительным прообразом библиотеки будущего, когда распространяется не книга в переплете, а только лишь необходимая часть текста с необходимым адекватным аппаратом и адекватным локальным словарем.[2:3]