Morpheus v.0.4

installation:

Chromium

Firefox

code, license, contacts:

reports (ru)

reports (en)

hosting:altlinux.org

Морфей - архитектура и основные принципы

XIII конференция разработчиков свободных программ

Морфей ставит целью облегчение чтения текста и понимания автора. Он по сути - простая автоматизация работы со словарем и грамматическими справочниками.

Морфей не ставит своей целью изучение источника и автоматизацию и облегчение такого изучения. Изучение источника (лингвистика, современная наука вообще) и понимание источника - противоположные активности. Понимать автора - значит дать слово автору, а не современному исследователю.

В идеале Морфей - программа, которая при клике на слово должна дать ответ на вопрос "что значит это слово" так, как ответил бы автор. В тексте Аристотеля, как ответил бы Аристотель, в тексте Панини - как ответил бы Панини. Это, разумеется, недостижимая цель. Она, однако, позволяет резко ограничить и очертить, и упростить задачу. Вдобавок в случае Санскрита есть источники, позволяющие точно синтезировать, создать, породить любое слово. Это работы древних грамматиков - Панини, Патанджали, etc - огромный корпус текстов. Морфей ставит себе ровно обратную задачу - по конкретной форме слова определить его (древние) морфологические характеристики и словарное значение. Кстати, отсутствие этой задачи - абсолютное отсутствие даже упоминания о такой задаче во всем огромном корпусе древней санскритской грамматики - само по себе кричащий о природе санскритского слова факт.

Используемая и описываемая здесь технология годится, однако, для любого языка.

Морфей использует только Javascript, на сервере это node.js, база данных CouchDB также использует JS. Веб - сам себе JS. Код можно посмотреть здесь: https://github.com/mbykov

Морфей основан на трех базовых модулях,

- relax.js - взаимодействие с CouchDB

- shiva-sutras.js - создание удобных подмножеств символов

- sandhi.js - разбиение и объединение строк согласно правилам sandhi

1. алгоритм

Процесс обработки сложного слова - samAsa схематически такой (модули подробно описаны в документации на гитхабе):

2. описание основных модулей:

в идеале, каждый модуль должен иметь два метода - синтезирующий словоформу по правилам Панини, и анализирующий - восстанавливающий словарную форму слова. Сейчас в Морфее этому условию удовлетворяет только sandhi.js

2.a - shiva-sutras.js

модуль конструирует произвольные необходимые наборы символов (звонкие согласные, долгие гласные, etc). Это вспомогательный модуль, позволяющий полностью разделить данные и код.

2.b - sandhi.js

имеет два метода, .del(samAsa, second) и .add(first, second) и набор взаимно дополнительных тестов

2.d - vigraha.js

разделение сложного слова - samAsa - на цепочки вероятных чешуек-flakes. Идея заимствована у SpamAsassin-a. Слово раскладывается на все возможные комбинации, входящие в массив частей от любого символа до любого следующего за ним. Невозможные чешуйки отбрасываются. Затем из них с помощию рекурсивной функции составляются вероятные цепочки-chains. Это очень ресурсозатратная процедура. Слово длиной 50 символов может давать 150 тысяч вероятных комбинаций. В зависимости от сложности и неоднозначности разбиений с учетом сандхи.

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

в качестве тестов vigraha.js я использую разложение всех сложных слов Бхагавад-Гиты, доступное в авторитетном источнике в сети. [1], [2]

И дополнительные, составленные вручную наборы тестов, всего около 800 тестов.

2.c - tiNanta.js - анализ морфологии глагола.

модуль основан на результатах работы dr. Dhaval Patel & dr. Sivakumari Katuri из Хайдарабадского университета. Их программа 'SanskritVerb' [3] как раз является синтезирующей частью, порождающей около 245 тысяч словоформ. Которые являются тестами для модуля.

2.d - subanta.js - анализ морфологии имен.

пока всего 1717 тестов, найденных вручную в сети.

2.c-d. и tiNanta.js, и subanta.js построены по одинаковому принципу: они создают набор проверяемых характерных окончаний на лету, прямо из набора тестов. Для конкретного теста, имеющего все формы склонения-спряжения, высчитывается общий stem, и набор окончаний. Некоторые наборы окончаний встречаются часто. Обычно они отображены в стандартных грамматиках. А в некоторых полученный stem равен вообще пустой строке. В это случае тест становится автоматически обработкой т.н. исключения. После чего тесты обязаны автоматически сходиться, и, очевидно, сходятся. (В tiNanta.js есть еще порождение соответствий корня-dhatu и всех его стемов. И проверка на присутствие полученного корня-dhatu в списке корней - DhatuPatha. Это отдельная тема).

2.e в процессе отображения в вебе используются вспомогательные модули

  • - akshara.js - простой редактор
  • - salita.js - конвертер nagari в транслитерации SLP1 и IAST для удобства работы в консоли
  • - sanote.js - преобразование традиционной морфологической нотации в европейскую и vise versa
  • 3. - словари

    Морфей пока что использует 4 словаря.

    3.a - словари Monier-Williams и Apte [4], [5] в редакции группы волонтеров под руководством того же dr.Dhaval Patel [6].

    3.b - словарь TS - termins. Терминами я здесь назвал конечные формы, сложные по строению, но очень часто встречающиеся в тексте. В основном это формы местоимений, числительные (пока отключено), и, возможно, любые исключения. Термины - потому что не требуют дальнейшего анализа.

    3.c - словарь словоформ Бхагавад-Гиты [2]. Этот словарь содержит конечные словоформы, как словарь TS, но не имеет морфологической расшифровки. Это просто удобство, особенно для начинающих изучать язык. Эти словоформы часто встречаются в любых текстах.

    Всего словари содержат около 250 тысяч словарных статей.

    4. в версии 0.4 пока не сделано:

    Это будет выполнено в следующих версиях Морфея.

    5. цель разработки

    Здесь, на конференции в Калуге, хочется отметить, что моя цель в разработке этой свободной программы - создать не конкретный сервис, а дешевую технологию разработки подобного класса программ, для любого языка. Для этого необходимо иметь только лишь одну вещь - релевантный массив тестов. (И, очевидно, словари). Не обязательно иметь тесты, отображающие все вычурные тонкости теорий современного языкознания. Но необходимо отобразить в тестах все часто встречающиеся и характерные случаи речи и письма. Может быть, для ограниченных ситуаций, на ограниченном словаре, и т.д. Вдобавок полученные модули могут быть в дальнейшем как угодно улучшаться и развиваться, и заменяться на необходимые для более тонких задач. Мне кажется, пришло время разработки подобной программы для любого окружающего нас языка. По-моему, это как раз задача для сообщества разработчиков открытого софта, и не только программистов.

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

    ссылки

    1. http://sanskritdocuments.org/doc_giitaa/bhagvadnew.html?lang=sa

    2. http://sanskritdocuments.org/doc_giitaa/bgwords.html?lang=sa

    3. http://sanskritworld.in/sanskrittool/SanskritVerb/tiGanta.html

    4. http://www.sanskrit-lexicon.uni-koeln.de

    5. https://github.com/sanskrit-lexicon

    6. https://github.com/drdhaval2785