1. Токенизация текста - разбивка на предложения и лексемы с учетом исключений (т.д., А.С. Пушкин), сегментация для иероглифических языков.
2. Морфологический анализ - определение грамматических признаков слов (падеж, число, род и т.д.).
3. Стемминг, лемматизация - усечение слов до псевдокорня, приведение к базовой форме.
4. Морфологический синтез - формирование формы слова из базовой формы с указанными грамматическими признаками, получение всех возможных грамматических форм слова.
5. Синтаксический анализ - определение роли слов в предложении и грамматических связей с другими словами, фильтрация омонимов.
6. Операции с тезаурусом - поиск синонимов, приведение к форме существительного, глагола, перевод на другой язык и т.д.
7. N-граммы нескольких видов, в том числе согласованные (с проверкой грамматического согласования) и несогласованные (просто соседи).
8. Трансформация текста - полнотекстовый перевод.
Главная особенность - настоящая словарная морфология русского языка (и некоторых других, например английского), позволяющая для подавляющего большинства случаев точно выявлять грамматические признаки слова, а в некоторых случаях - выдавать все альтернативные варианты, например в случае совпадающих словоформ для разных падежей кошки (ед.ч. род.п.) - кошки (мн.ч. им.п.). В дополнение к этому, грамматический словарь умеет генерировать словарные формы "на лету" с помощью явно задаваемых правил (с помощью ряда продуктивных приставок типа мета-, нано- и т.д.) и с помощью автоматически выявляемых в лексиконе правил генерации словоформ (в основном это суффиксы).
Благодаря реализованной комбинации чисто словарной морфологии, стемминга и динамической генерации словоформ поисковая машина, базирующаяся на грамматическом движке, может выполнять поиск по текстам со специализированной лексикой, отсутствующей в основном словаре. Комплексный морфологический анализ также позволяет завершать синтаксический анализ предложений, в которых не все слова известны.
Вторая уникальная черта грамматического словаря непосредственно вытекает из вышеупомянутой особенности, это - расширяемый тезаурус, в котором собраны разнообразные связи между словами. Обратите внимание, что в отличие от множества "полукустарных" реализаций тезаурусов, грамматический движок четко разделяет связи слов - поэтому синонимы не смешиваются с переводами слов, а грамматические связи типа галактика-галактический легко отфильтровываются от семантических связей кошка-зверь.
API грамматического словаря реализован в виде отдельной solarix_grammar_engine.dll, включенной в состав SDK грамматического движка. Для Linux/FreeBSD - solarix_grammar_engine.so. API полностью процедурный, поэтому вызов возможен из любого языка с поддержкой C binding.
Кроме того, есть .NET обертка gren_fx.dll, которая позволяет удобно вызывать функции движка из программ на языках платформы .NET (см. примеры).
Все вызовы API объявлены в include\lem\solarix\solarix_grammar_engine.h. Реализацию этих функций можно посмотреть в grammar_engine_api.cpp. Исходный код врапперов для C# можно взять [в репозитории](https://github.com/Koziev/GrammarEngine/tree/master/src/demo/ai/solarix/engines/grammar_engine_fx).
Функциональность движка можно в некоторой степени оценить с помощью программы Грамматический Словарь:
Грамматическая машина позволяет выполнять действия над отдельными словами (поиск по словарю, склонение и спряжение, согласование и др.), над предложениями (синтаксический анализ с построением грамматических деревьев), а также над текстами (генератор предложений). На рисунке в наглядной форме показан результат синтаксического разбора предложения большая белая кошка очень сладко спит в углу на диване с помощью отладчика - одной из вспомогательных программ, входящих в SDK:
Базовые средства грамматического движка позволяют работать с различными языками, включая имеющие иероглифическую письменность.
Это часть проекта также заключает в себе базовые лингвистические средства для работы с расширенными регулярными выражениями и при извлечении знаний.
С точки зрения прикладного программиста алгоритмы грамматической машины позволяют удобно работать с "грамматическим шумом" в текстах на естественном языке, к примеру - приводя слова к базовым словоформам, либо приводя разные предложения к эквивалентным грамматическим деревьям при синтаксическом анализе. Сфера возможных применений грамматической машины включает в себя:
различные анализаторы электронных сообщений, фильтры спама, авторубрикаторы писем;
поисковые системы, как универсальные, к примеру поисковый движок faind, так и специализированные, к примеру для поиска сообщений в почтовом или IM клиенте, либо базах данных;
элементы систем безопасности - сторожевые механизмы для выявления текстового трафика определенной направленности.
Как и поисковый движок, ГМ разделена на 2 части:
собственно скомпилированный в виде DLL/SO код и загружаемые из бинарного файла словаря
модули, включая морфологический анализатор, анализатор синтаксиса и трансформатор текста. В рамках
поисковых программ грамматическая машина используется не как отдельный модуль,
а непосредственно в виде исходных текстов. Это позволяет в некоторых случаях
реализовать более эффективный подход.
Для удобства освоения функций API в SDK входят исходные тексты нескольких программ-примеров на C++ и C# (проекты для MS VisualStudio 2003). Вы можете ознакомиться с описаниями этих программ здесь.
Краткое описание нескольких сложных проектов, использующих грамматический движок - здесь.
Пример использования расширенных регулярных выражений описан здесь.
Программа syntax - консольный отладчик синтаксического анализатора
Программа lexicon - консольный отладчик морфологического анализатора
Программа thesaurus - редактор связей в тезаурусе
© Козиев Илья 2019
![]() |
|
изменено 09-Mar-18 |