Ключевые особенности морфологического анализатора

Минимум привязок к выбранному языку

При разработке анализатора мы старались не вводить в программный код его реализации каких-либо явных или неявных привязок к одному естественному языку, в частности к русскому.

Практически все аспекты морфологии, начиная от перечня частей речи и грамматических категорий, заканчивая правилами спряжения, склонения, согласования слов и так далее, описываются во внешних текстовых файлах на специальном декларативном языке.

К примеру, вопрос о том, считать ли la, le, les формами одного французского артикля или разными словами, решается при описании французского словаря и может быть изменен в любой момент без модификаций C++ кода.

Более того, графика языка, то есть алфавит, тоже описывается во внешних файлах. Благодаря этому достигается необходимая гибкость при формировании лексики разных языков.

Например, в русском словаре буква ё явным образом приводится к е благодаря тому, что при описании русского алфавита в буквостатью Е внесены 4 варианты написания, включая ё и Ё. Поэтому при нормализации текстового представления словаформ в ходе компиляции словаря происходит конвертация ё в е. Такая конвертация порождает проблему ёфикации, а именно восстановление буквы ё при синтезе текста. Она решается через механизм хранения в базе данных лексикона дополнительной информации для словарных форм.

Английский алфавит описан похожим образом. Точнее говоря, в нем символы латиницы с диакритическими значками включены как разновидность символов базовой латиницы. Поэтому заимствованное из французского слово tête-à-tête при компиляции словарных статей преобразуется в tete-a-tete.

Французский словарь описывает свой алфавит как полный набор расширенной латиницы, причем символы с диакритическими в нем объявлены отдельными буквами, а не разновидностями базовых. Это необходимо из-за особенностей французской лексики, в которой по историческим причинам большое количество слов, включая омофоны, различается только написанием с учетом диакритиков.

Смешанный алгоритм распознавания слов

При распознавании слов в тексте морфологический анализатор использует словарный поиск как основной метод, обеспечивающий максимально достоверные результаты.

Если поиск в лексиконе не дает результатов, применяются правила нескольких типов. Среди них отметим эвристики для распознавания грамматических категорий слов, образующихся по регулярным правилам типа:

400-метровая башня

А также правила, учитывающие продуктивные приставки:

квазиотношения

Среди этих правил есть и эвристики, работающие с морфемами. Они рассматриваются далее при описании нечеткого анализа.

Нечеткий морфологический анализ

Алгоритм морфоанализатора умеет работать со словами, написанными с опечатками или орфографическими ошибками.

Можно разбить правила нечеткого анализа на 2 группы. Одна группа позволяет опознать словарные лексемы, написанные с отклонениями от зафиксированной в лексиконе нормы:

пушыстая кощка спит на палу

Другая группа правил активируется, если найти в лексиконе похожее слово все-таки не удается:

Глоздая кудра вяло плюкует

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

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

Нечеткий алгоритм поиска умеет искать слова, написаные с пропуском букв сонце, с орфографическими ошибками патерявший, с опечатками кощка.

Внешние токенизаторы и сегментаторы

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

Сегментатор текста может быть оформлен как динамическая библиотека и подключен при описании языка одной директивой.

Аналитический и синтетический строй языка

Движок позволяет создавать эффективные наборы правил морфологического разбора для языков с аналитическим и синтетическим строем.

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

Более того, наборы правил для нескольких языков могут находиться в одном многоязычном словаре, не мешая друг другу и практически не снижая производительность морфологического анализа. Это достигается за счет привязки каждого правила к определенному языку.

Гибкое описание словоизменения

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

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

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

Альтернативные грамматические формы

Например, поэтическая форма творительного падежа для некоторых имен существительных:

судьбой-судьбою

Внутренняя флексия, беглые гласные, чередование согласных

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

to know - knew

Woman - women

В русском языке:

взять - возьми

искать - ищи

Неполные парадигмы

Здесь мы не учитываем такие случаи, как полное отсутствие у существительных сани, штаны форм единственного числа, или отсутствие форм множественного числа у несчетных существительных типа сухость. Эти случаи эффективно описываются с помощью отдельных парадигм. Интерес предствлют редко встречающиеся ситуации, для которых нерационально определять новые таблицы формообразования.

Например, форма 1го лица единственного числа настоящего времени изъявительного наклонения русских глаголов:

есть - ем

победить - ?

Редко встречающиеся формы

Для некоторых словарных статей регулярная парадигма дополняется одной или несколькими дополнительными грамматическими формами:

местный падеж в лесу, на берегу

партитив купи чаю, сахару

вокатив Миш, мам

совместный императив споёмте

Учёт ёфикации

В русском языке есть некоторое количество омонимичных форм слов, отличающихся наличием или отсутствем буквы ё. К примеру:

сел (глагол сесть) и сёл (существительное село)

мёл (глагол мести) и мел (существительное мел)

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

В итоге слово осел при распознавании дает 2 варианта, а слово осёл дает только вариант формы существительного.

Словарные статьи с особым порядком формообразования

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

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

именительный падеж: Нижний Новгород

родительный падеж: из Нижнего Новгорода

творительный падеж: под Нижним Новгородом

и так далее.

Рассматривая два слова как единую лексическую единицу, мы решаем еще одну задачу. В тезаурусе есть специальный вид связи "обитатели". В случае Нижнего Новгорода это отношение приведет нас к "нормальному" существительному нижегородец, косвенно подтверждая корректность выделения топонима в отдельную словарную статью.

Расширяемость тезауруса

Каждое отношение, зафиксированное в тезаурусе, маркируется определенным типом связи, например синоним, родовая пара и так далее.

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

Многоязычные словари

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

Так как все структурные элементы словаря содержат привязку к конкретному языку, то объединение множества языков в рамках одной базы данных не мешают нормальной работе морфологического анализатора и других алгоритмов.

Серверное реляционное хранилище словаря и масштабируемость

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

Так как доступ к хранилищу максимально отделен от остального кода грамматического движка, то появляется возможность в рамках одного и того же процедурного API прозрачно переходить от простого хранилища на бинарных файлах к SQL словарю на удаленном мощном сервере. При этом программа, работающая с грамматическим словарем через API, скорее всего не потребует каких-либо переделок. Достаточно переписать параметры хранилища в файле конфигурации словаря и заменить solarix_grammar_engine.dll, например на solarix_grammar_engine_mysql.dll.

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

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

Многопоточность

Программная реализация морфологического анализатора допускает многопоточное использование. Несколько потоков могут одновременно вызывать функции морфоанализа, не мешая другу другу. Блокировки потоков сведены к минимуму. Подробнее о поддержке многопоточности в анализаторе см. здесь.

Кроссплатформенность

Основной код грамматического движка написан на C++ с минимальной привязкой к конкретной платформе. Благодаря этому процедурный API и утилиты проекта компилируются в разных ОС без модификаций. В список активно поддерживаемых платформ входят 32-х и 64-битные Windows и Linux. Сборка также возможно для FreeBSD и MacOS X.

Неоднозначности при морфологическом разборе

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

Однако, если неоднозначность не удается устранить, то она остается в результатах анализа.

К примеру, в тестовых предложениях можно найти такое словосочетание:

гости ели пюре

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

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

Наконец, последнее слово пюре может быть любой из форм несклоняемого существительного, что сразу дает 6 вариантов. Если бы это было перечислимое существительное, то получилось бы 12 форм.

Среди этого множества вариантов распознавания морфологический анализатор может достоверно отбросить только императив для первого слова. Это оказывается возможным благодяря тому, что гостить это непереходный глагол.

Результатом анализа будет такие варианты:

гости - существительное в именительном падеже

ели - глагол, либо существительное в родительном падеже

пюре - существительное в винительном, творительном или родительном падеже

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

гости фестиваля (чего? родительный падеж) кино (чего? родительный падеж)

Откуда взялся вариант творительного падежа для пюре? Опять-таки из-за непонимания анализатором смысла словосочетания. Он использует информацию о том, что глагол есть может дополняться существительным в творительным падеже:

есть ложкой (чем? творительный падеж)

В рамках этой же тактики сохранения неоднозначностей реализован такой подход. Морфологический анализатор старается распознать синтаксическую структуру всего предложения. Если это невозможно по каким-либо причинам, он пытается найти в предложении максимально большие фрагменты с распознаваемой структурой. Такой подход обеспечивает работу анализатора даже при неправильной синтаксической структуре.

Дополнительные материалы

Морфологический анализатор

Паттерны для тестирования морфологического анализатора

API морфологического анализатора

Многопоточность в морфологическом анализаторе

Синтаксический анализатор

  © Elijah Koziev 2010
прикладные проекты на основе грамматического словаря API грамматической машины компоненты для доступа к грамматическому словарю условия получения SDK токенизатор и сегментатор морфологический анализ и синтез лемматизатор база N-грамм синтаксический анализатор словоформы морфология и синтаксис русского языка падеж число род совершенный и несовершенный вид экспорт в SQL формат экспорт в XML формат скрипт SQL словаря структура SQL словаря структура XML словаря компоненты для доступа к грамматическому словарю ORM Persistent Dictionary Library лемматизация стемминг примеры использования грамматического словаря склонение существительных в русском языке склонение русских прилагательных спряжение глаголов в русском языке поиск текста с учетом морфологии OCR подсистема расширенные регулярные выражения генератор текста генератор случайного текста и имитатор рандомизатор синонимизатор перефразировщик Статистика буквенных паттернов

Грамматический словарь русского языка



Грамматический словарь
склонение и спряжение глаголов, существительных, прилагательных

В состав входит русский и английский словарь.

платформа:  Windows 2000 ... Windows 7
требования: 512 Mb свободной памяти, 300 Мб на диске
размер:         34 Мб

  скачать грамматический словарь купить грамматический словарь SDK грамматического словаря
грамматический словарь русского языка



SDK Грамматического словаря



SDK Грамматического Словаря
склонение и спряжение глаголов, существительных, прилагательных

В состав входит русский и английский словарь.

платформа:  Windows 2000 ... Windows 7
размер:         13 Мб

SQL словарь (демо):
sqlite mysql oracle firebird mssql

скачать демо-версию SDK купить SDK API грамматического словаря



Поисковая система



Integra
настольная и сетевая поисковая система 

платформа:  Windows XP ... Windows 7
требования: 512 Mb свободной памяти
размер:         21 Мб

Дополнительные компоненты:
MySQL поисковый сервер 13.5 Мб
Integra.Premium MySQL 3.9 Мб

скачать поисковую систему SDK поисковой системыописание поисковой системы



SDK Поисковой системы



SDK Поискового движка
API для настольной и сетевой поисковая система 

платформа:  Windows XP ... Windows 7
размер:         17 Мб

Дополнительные компоненты:

MySQL поисковый сервер 13.5 Мб
Integra.Premium MySQL 3.9 Мб

скачать SDK SDK поисковой системы



Экранный переводчик



Translator
экранный переводчик

платформа:  Windows XP ... Windows 7
требования: 256 Mb свободной памяти
размер:         4.4 Мб

Дополнительные компоненты:
расширенный англо-русский словарь 6.4 Мб


скачать экранный переводчикописание экранного переводчика



изменено 04-Nov-12