Morpheus v.0.4 (Михаил Быков, OSSDEVCONF-2016) — различия между версиями

Материал из 0x1.tv

(Новая страница: «== Аннотация == ;Докладчик: {{Speaker|Михаил Быков}} <blockquote> Морфей ставит целью облегчение чтен…»)
 
(Расширенные тезисы)
== Расширенные тезисы ==
<latex>
Морфей использует только Javascript, на сервере это node.js, база данных
 CouchDB также использует JS. Веб --- сам себе JS.
Код можно посмотреть здесь: \url{https://github.com/mbykov}

Морфей основан на трех базовых модулях:
,
\begin{itemize}
\item[-] relax.js --- взаимодействие с CouchDB

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

\item[-]  sandhi.js --- разбиение и объединение строк согласно правилам sandhi
\end{enumerate}


\end{itemize}

\section{1. алгоритм}

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

\begin{itemize}
\item[-] запрос-словоформа очищается от влияния соседних слов и преобразуется в
 стандартную форму, например, анусвара М 
заменяется на словарную форму -m,
%\verb! रामं  
%\textlatin{[930?]}\textlatin{[93E?]}\textlatin{[92E?]}\textlatin{[902?]}
%=> रामम् !{\textgreater} \textlatin{[930?]}\textlatin{[93E?]}\textlatin{[92E?]}\textlatin{[92E?]}\textlatin{[94D?]}, 
etc (outer-sandhi.js);
\item[-]  слово разбивается на цепочки-chains вероятных <<чешуек>><<{}-flakes
 (vigraha.js);
\item[-]  по словарю выделяются несклоняемые flake, --- либо indeclinable-avyaya,
 либо готовые формы (a.k.a. termins)
\item[-]  несклоняемые отбрасываютсявыделяются в отдельный массив, и из всех flakes остаются потенциально
 склоняемые
\item[-]  для каждой склоняемой flake восстанавливается вероятная словарная форма
\item[-]  отдельно для глаголов (tiNanta.js):
\item[-]  и имен (subanta.js)
\item[-]  и образуется массив запросов к словарю, queries
\item[-]  запрос несет в себе морфологическую информацию, (стем, окончание, тип
 окончания, часть речи, etc)
\item[-]  образуется массив уникальных строк --- стемов: stems
\item[-]  массив stems проверяется на наличие в словарях
\item[-]  из всех flakes выбираются обнаруженные в словаре, нужные flakes, теперь
 они называются, в соответствии с 
традицией, padas
\item[-]  из всех queries выбираются соответсвующие найденным padas,
\item[-]  из всех chains выделяются лишь те, которые состоят из найденных padas,
\item[-]  им присваются веса, чтобы более правдоподобные шли в начале
\item[-]  сейчас вес полагается равным произведению кубов длин padas, приведенному
 к кубу длины исходного сложного слова --
- samAsa
\item[-]  результат отображается в консоли, на экране, etc
\end{itemize}

\section*{2. описание основных модулей}

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

\subsection{2.a --- shiva-sutras.js}

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

\subsection{2.b --- sandhi.js}

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

\subsection{2.d --- vigraha.js}

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

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

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

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

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

модуль.

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

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

пока.

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

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

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

\begin{itemize}
\item[-] akshara.js --- простой редактор
\item[-] salita.js --- конвертер nagari в транслитерации SLP1 и IAST для удобства
 работы в консоли
\item[-] sanote.js --- преобразование традиционной морфологической нотации в
 европейскую и vise versa
\end{itemize}

\section{3. --- словари}

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

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

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

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

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

\section{4. в версии 0.4 пока не сделано:}
\begin{itemize}
\item[-] анализ слов с суффиксами (kridanta и taddhita),
\item[-] причастий и сложных глагольных форм, таких как интенситивы, дезидеративы,
 etc
\item[-] звательного падежа
\item[-] типа сложных слов samAsa
\end{itemize}
Это будет выполнено в следующих версиях Морфея.

\section{5. цель разработки}

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

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

\section{Ссылки}
{\scriptsize
\begin{enumerate}
\item \url{http://sanskritdocuments.org/doc_giitaa/bhagvadnew.html?lang=sa}
\item \url{http://sanskritdocuments.org/doc_giitaa/bgwords.html?lang=sa}
\item \url{http://sanskritworld.in/sanskrittool/SanskritVerb/tiGanta.html}
\item \url{http://www.sanskrit-lexicon.uni-koeln.de}
\item \url{https://github.com/sanskrit-lexicon}
\item \url{https://github.com/drdhaval2785}
\end{enumerate}
}
</latex>

== Примечания и отзывы ==
<!-- <blockquote>[©]</blockquote> -->

<references/>

[[Category:OSSDEVCONF-2016]]
[[Category:Open-source]]
[[Category:Draft]]

Версия 15:16, 3 октября 2016

Аннотация

Докладчик
Михаил Быков.jpg
Михаил Быков

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

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

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

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


Видео


Расширенные тезисы

Примечания и отзывы