Добавляем фуригану к кандзи Python макросом для LibreOffice

в 9:33, , рубрики: libreoffice, open source, OpenOffice, python, изучение языков, японский язык

Дамы и господа, план такой:

  • всё, что вы хотели знать о японской письменности, но боялись спросить
  • что такое ruby text
  • как писать аддоны для LibreOffice на Python
  • как сгенирировать чтение для канзи
  • собираем всё это вместе в фуриганайзер!

Добавляем фуригану к кандзи Python макросом для LibreOffice - 1


В современном японском языке используются, в основном, три письменных системы.

Во-первых, это две слоговые азбуки: хирагана и катакана. Хирагана более округлая, выглядит примерно вот так: これはひらがなです и является как-бы основной азбукой.。 Катакана более угловатая (カタカナデス) и используется в основном для заимствованных слов, в целом же набор знаков хираганы и катаканы практически аналогичный. Дальше будем называть всё это просто “кана”. “Слоговая азбука” значит, что вместо наших гласных и согласных “а”, “б” и “в” — только целые слоги типа “ка”, “са” и “то”. Гласные, правда тоже есть, шесть штук (“а”, “и”, “у”, “э“, “о”) и только один согласный знак “н” в порядке исключения.

Именно поэтому японцам очень трудно выговаривать слова с подряд идущими согласными — они к такому просто не привыкли, но это нам сейчас не важно. Каной, в принципе, можно написать всё. Давным-давно, собственно, так и делали. Пока в один прекрасный день не захотели чего-нить позатейливей и не позаимствовали из Китая иероглифы, которые мы будем дальше называть кандзи, потом что они так называются. После заимствования японские, да собсно и китайские тоже, кандзи существенно поменялись, и сейчас довольно таки различаются, хотя конечно, с другой стороны, во многом остались схожи. Скажем так, глядя на китайский текст японец может более-менее понять о чём там идёт речь. Кандзи выглядят примерно так: 友達、日本酒、世界。 Да, в японском — круглая точка.

Тут ключевой для понимания момент: японский и китайский языки на уровне грамматики вообще никак не родственные. Так что вот так вот просто взять китайские знаки и начать ими писать было не можно. Собственно с помощью кандзи можно писать отдельные слова, скорее даже основы слов, а для указания грамматических форм и связи слов между собой по-прежнему используется кана. Выглядит это примерно так: 送りがなはとっても便利です. Если присмотреться — видно что первый символ — кандзи, за ним идут несколько знаков каны и т.д. Таким трюком легко визуально отличить японский текст от китайского, которые выглядит графически более “плотным” т.к. там исключительно кандзи. Эта кана, которая прицепляется в кандзи для указания грамматической формы, называется “окуригана”.

Вот, ну и наконец… Число кандзи довольно велико, и, если вы не робот — то запомнить все сложно. Если слово написано кандзи — то часто не очевидно как собс-но его читать, при том, что что в устной речи слово вполне могла встречаться и человек его знает. Чтобы помочь в такой ситуации, особенно для редких кандзи или когда текст предназначен для детей, иностранцев, или других умственно ограниченных категорий граждан — чтение кандзи подписывают сверху с помощью каны. Это и называется “фуригана”. Выглядит как на картинке в начале поста.

Фух, переходим к следующему пункту.

Для добавления аннотации поверх текста используется так называемый ruby. К языку программирования отношения не имеет. Как я только что узнал из Википедии — по-русски называется “агат”

Поддержка руби есть в html с помощью тэга ruby:

<ruby>
 текст
 <rt>аннотация</rt>
</ruby>

Но сейчас нас интересует LibreOffice. В ручном режиме добавить руби аннотацию к тексту можно через меню Format -> Asian Phonetic Guide. Это несколько странно, ведь можно поле руби же не только для фонетики использовать, ну да фиг с ними. Если такого нет в меню — то можно попробовать добавить поддержку азиатских языков в Tools -> Options -> Language Settings.

Дальше, мы хотим это делать автоматически для выделенного текста. LibreOffice прекрасен тем, что в нём можно писать макросы на Python. Для этого должен стоять модуль libreoffice-script-provider-python (ставиться через apt-get), который по-умлочанию не стоит. Ах да, я всё делаю под Ubuntu, если у вас другая операционная система — то вы можете поделиться в комментариях рецептом для неё :)

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

Вот простой пример:

def HelloWorldPython():
    desktop = XSCRIPTCONTEXT.getDesktop()
    model = desktop.getCurrentComponent()
    if not hasattr(model, "Text"):
        model = desktop.loadComponentFromURL("private:factory/swriter","_blank", 0, () )
    text = model.Text
    tRange = text.End
    tRange.String = "Hello World (in Python)"
    return None
g_exportedScripts = HelloWorldPython,

Сохраняем в файл, кладём его или делаем символьную ссылку в папку, в которой LibreOffice держит скрипты. В моём случае это “~/.config/libreoffice/4/user/Scripts/python”.

Открываем LibreOffice Writer (OpenOffice тоже должен работать), идём в Tools -> Macros -> Run Macro и видим там наш скрипт, если всё получилось.

Осталось написать такой скрипт, который бы брал кандзи из документа и добавлял их чтения в руби соответствующих символов. Тут всё просто: для генерации чтения есть специальные программы, мы просто запустим их из нашего скрипта-макроса, через стандартный ввод-вывод прогоним японский текст и вставим аутпут в документ.

Программа под названием kakasi берёт японский текст и выдаёт чтение целым куском, но это не совсем то, что надо, т.к. хочется фрагменты фонетической подсказки распределить между ruby полями соответствующих симоволов. Для этого с помощью mecab можно токенизировать японский текст, а потому уже кормить его kakasi по частям. На самом деле точность генерации чтения от этого чуть-чуть ухудшается, но улучшается вёрстка документа. Какие-то огрехи можно потом поправить вручную.

Вот собсно и всё, ставим apt-get install kakasi, mecab,
идём в github.com/undertherain/furiganize, качаем оттуда корявый скрипт который я написал и который собс-но вот это всё проделывает. Кладём его в нужную папку и enjoy. Если кто-то поделиться опытом с другими операционными сиcтемами — будет вообще замечательно.

Автор: blackbird

Источник


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


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