morpheus for sanskrit

10.10.2016
P.S. 2021: Устаревшее - будет реализовано как плагин к Diglossa.js

abstract

  • о программе Морфей - план
  • облегчение чтения
  • анализ-синтез
  • не лингвистика
  • о понимании и изучении
  • не наука вообще

о Морфее

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

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

Подробнее проблематика описана в работе "О боге сна". Здесь я должен только сказать, что я ничего не имею против науки вообще и лингвистики в частности. Если мы хотим изучать язык автора, но не понимать автора, мы обязаны пользоваться всем современным инструментарием. Но мне лично это не интересно.

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

Морфей использует только Javascript, на сервере это node.js, база данных CouchDB также использует JS. Он основан на трех базовых модулях:

  • relax - взаимодействие с CouchDB
  • shiva-sutra - создание удобных подмножеств символов
  • sandhi - разбиение и объединение строк согласно правилам sandhi

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

  • outer-sandhi.js:
  • запрос-словоформа очищается от влияния соседних слов и преобразуется в стандартную форму, например, анусвара М заменяется на словарную форму -m, रामं => रामम्, etc
  • слово разбивается на цепочки-chains вероятных "чешуек"-flakes (vigraha.js);
  • по словарю выделяются несклоняемые flake, - либо indeclinable-avyaya, либо готовые формы (a.k.a. termins)
  • несклоняемые отбрасываются, и из всех flakes остаются потенциально склоняемые
  • для каждой склоняемой flake восстанавливается вероятная словарная форма
  • отдельно для глаголов (tiNanta.js):
  • и имен (subanta.js)
  • и образуется массив запросов к словарю, queries
  • запрос несет в себе морфологическую информацию, (стем, окончание, тип окончания, часть речи, etc)
  • образуется массив запрашиваемых в словарях строк-стемов: stems
  • склоняемые формы stems проверяются на наличие в словарях
  • из всех flakes выбираются обнаруженные в словаре, нужные flakes, теперь они называются, в соответствии с тредицией, padas
  • из всех queries выбираются соответсвующие найденным padas,
  • из всех chains выделяются лишь те, которые состоят из обнаруженных в словаре padas,
  • им присваются веса, чтобы более правдоподобные шли в начале
  • сейчас вес полагается равным произведению кубов длин padas, приведенному к кубу длины исходного сложного слова - samAsa
  • результат отображается в консоли, на экране, etc

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

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


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

2.b - sandhi.js имеет два метода, .del() и .add() и набор взаимнодополнительных тестов

2.d - vigraha.js разделение сложного слова - samAsa - на цепочки вероятных чешуек-flakes. Идея заимствована у SpamAsassin-a. Слово раскладывается на все возможные комбинации, входящие в массив частей от любого символа до любого следующего за ним. Невозможные чешуйки отбрасываются. Затем из них с помощию рекурсивной функции составляются вероятные цепочки-chains. Это очень ресурсозатратная процедура. Слово длиной 50 символов может давать 150 тысяч вероятных комбинаций. В зависимости от сложности и неоднозначности разбиений с учетом сандхи. А пока не знаю другой программы, кроме Морфея, выполняющую эту работу, а было бы полезно, например, для немецкого или русского. в качестве тестов я использую разложение всех сложных слов Бхагавад-Гиты, доступное в авторитетном источнике в сети. [x] около 1200 тестов.

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

2.d - subanta.js - анализ морфологии имен. пока всего 1717 тестов, найденных вручную в сети.

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

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

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

3 - Словари

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

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

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

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

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

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

  • анализ слов с суффиксами (kridanta и taddhita),
  • сложных глагольных форм, таких как интенситивы, дезидеративы, etc
  • звательного падежа
  • типов сложных слов samAsa

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

5. о больших словарях

О больших словарях нужно заметить, что они составялись в 19 веке, вручную. Причем людьми, убежденными в том, что они знают истину в конечной инстанции, и их представление о мире является окончательным и, м.б., будут лишь слегка исправляться. В наше время такой подход - сам по себе анахронизм. Например, самое первое и главное понятие Вед - ऋत - rita - они позволяются себе переводить как "космо-этический закон". Тогда как во время за две тысячи лет до Панини невозможно представить себе использование понятий "космос", "этика" или "закон". ऋत - родственно нашим ритуал, ряд, порядок, ритм, рифма, риторика, греч. arithmos - число, англ. order, art, и т.д. То есть это просто порядок, обычай.

В будущем, на достаточном количестве параллельных текстов, можно будет автоматически выбирать из всех предложенных системой значений те, которые реально встречаются в переводах текстов, созданных в одно время с читаемым нами текстом.

Мне бы хотелось использовать по кр.мере три вида словарей для Санскрита и др.Греческого: 1) для языка Вед - и языка Гомера и досократиков, 2) классического языка времен Панини, Упанишад и - Платона-Аристотеля, и 3) средневекового языка, Щанкары - и византийцев. И на русском, конечно.

Но пока что это мечты, dreams.

5. дешевая технология

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

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

modules:

  • [ ]
  • [ ] базовые:
  • [ ] relax
  • [ ] shiva-sutra
  • [X] sandhi -
  • morpheus workflow:
  • [ ] morpheus
  • [ ] outer-sandhi
  • [X] vigraha
  • [X] subanta
  • [X] tiNanta -
  • вспомогательные:
  • [X] akshara
  • [X] salita
  • [X] sanote - сделать тесты -

о боге сна

  • о морфее
  • модули, тесты - 100500
  • понимание, не изучение
  • не лингвистика - примеры:
  • л. - вспомогательная наука, как радио-углеродный анализ. Нужно учитывать, но при понимании - "забыть". Как 500 лет до н.э. - автор ничего не знал про н.э. Забыть, что вращается Земля.
  • примеры аберрации:
  • 10 lakara - нет разделения на время и наклонение
  • 21 падеж, а не 24 - в линеечку
  • почему расхождение? Что, они не смогли сообразить? А мы смогли? А не нужно ли обратить наше внимание на эти расхождения?
  • принцип организации порядка - rita. Мир стоит, пока рецитирцются Веды - вам не хотелось бы понять, что это значит?
  • не наука - ее не было - не просто иной объем понятия, а что - а у нас как
  • аристотель - пространство - помыслить мир без пространства - вокруг нас 412b - topos
  • при клике перевод не должен содержать слово space
  • когда, кстати появляется пространство? автор понятия - гений не меньше Эйнштейна
  • но класс. лингвистика ничто еще по сравнению с темным ужасом, надвигаюшемся на нас в виде когнитивной науки
  • кто-то тоже переживал из-за чепухи под названием кибернетика. А потом она тихо издохла на страницах научпопа
  • можно надеяться, что так же бесславно исчезнет и когнитивная наука. Но я не надеюсь, это чудище стозевно, и лаяй.
  • навязывание современного смысла в любом практически корпусе.
  • нужно - античность, средневековье, время Вед, индуизм - просматривается - досократики, доведики
  • мечты, мечты, dreams -