Morpheus v.0.4 (Михаил Быков, OSSDEVCONF-2016) — различия между версиями
Материал из 0x1.tv
StasFomin (обсуждение | вклад) (Новая страница: «== Аннотация == ;Докладчик: {{Speaker|Михаил Быков}} <blockquote> Морфей ставит целью облегчение чтен…») |
StasFomin (обсуждение | вклад) (→Расширенные тезисы) |
||
== Расширенные тезисы == <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
Аннотация
- Докладчик
- Михаил Быков
Морфей ставит целью облегчение чтения текста и понимания автора. Он по сути — простая автоматизация работы со словарем и грамматическими справочниками.
Морфей не ставит своей целью изучение источника и автоматизацию и облегчение такого изучения. Изучение источника (лингвистика, современная наука вообще) и понимание источника — противоположные активности. Понимать автора — значит дать слово автору, а не современному исследователю.
В идеале Морфей — программа, которая при клике на слово должна дать ответ на вопрос «что значит это слово» так, как ответил бы автор. В тексте Аристотеля, как ответил бы Аристотель, в тексте Панини — как ответил бы Панини. Это, разумеется, недостижимая цель. Она, однако, позволяет резко ограничить и очертить, и упростить задачу. Вдобавок в случае Санскрита есть источники, позволяющие точно синтезировать, создать, породить любое слово. Это работы древних грамматиков — Панини, Патанджали, etc — огромный корпус текстов. Морфей ставит себе ровно обратную задачу — по конкретной форме слова определить его (древние) морфологические характеристики и словарное значение. Кстати, отсутствие этой задачи — абсолютное отсутствие даже упоминания о такой задаче во всем огромном корпусе древней санскритской грамматики — само по себе кричащий о природе санскритского слова факт.
Используемая и описываемая здесь технология годится для любого языка.
Видео
Расширенные тезисы