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

Инструменты для синтаксического анализа

Для экспериментов с синтаксическим анализатором можно использовать один из отладчиков проекта. В частности, можно использовать консольную программу syntax или оконный отладчик wdebugger.

Часть средств синтаксического анализатора доступна для использования прикладными программами через API грамматического движка. В частности, функция sol_MorphologyAnalysis позволяет выполнить морфологический разбор предложения, функция sol_SyntaxAnalysis выполняет синтаксический разбор предложения, функция sol_Tokenize разбивает строку на слова с учетом правил для естественного языка.

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

Консольный отладчик SYNTAX

Утилита syntax работает в консоли на нескольких платформах, в частности на 32х и 64х битных Windows, Linux и Mac OS X (Darwin).

Она позволяет отлаживать следующие части словаря:

сегментатор предложений

токенизатор

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

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

модуль трансформации текста, в частности - перефразировку и перевод

Она может работать как в интерактивном режиме (по умолчанию) с вводом предложений и печатью результатов в консоли, так и в пакетном режиме обработки заданного текстового файла (см. далее опции -batch и -o).

С помощью опций командной строки можно задать нужный режим работы:

-language NNN выбор языка, если используется многоязычный словарь. Без указаний этой опции будет выбран язык, заданный как умолчальный для словаря. Можно указать язык с именем autodetect, тогда движок будет сам подбирать наиболее вероятный язык для каждого анализируемого предложения.

-debug режим интерактивной отладки продукционных правил, пользовательских процедур и функций, написанных на внутреннем языке.

-tokenize токенизация вводимого текста (см. далее).

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

-syntax выполнять синтаксический разбор предложения, строить синтаксическое дерево.

-transform XXX выбор сценария (имени пользовательской процедуры) для выполнения трансформации текста, включая перефразировку и перевод.

-batch NNN пакетная обработка текста из указанного файла.

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

-o NNN запись результатов пакетной работы в указанный текстовый файл.

-print_html выводить результаты с HTML разметкой для лучшей читабельности

-verbose детальный вывод информации по ходу анализа.

-show_org_sent- не печатать в результатах пакетной работы исходные предложения (см. также опции -o и -batch).

-timeout TTT максимальное время в миллисекундах, отводимое на синтаксический анализ одного предложения.

-dictdir NNN путь к каталогу с файлами словаря.

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

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

-disallow_incomplete если анализатор не смог распознать все входное предложение как известную ему структуру, то фиксируется ошибка анализа.

Кроме того, программа может работать в режимах Пролог-консоли и Chatbot'а (см. далее).

В составе SDK в подкаталогах ...\scripts можно найти готовые командные скрипты для выполнения типичных сценариев:

...\scripts\syntax\console-morphology.cmd - консольный режим отладки морфологического анализатора

...\scripts\syntax\console-syntax.cmd - консольный режим отладки синтаксического анализатора

...\scripts\syntax\morphology-en.cmd - пакетная проверка токенизатора и морфологического анализатора для английского текста

...\scripts\syntax\morphology-ru.cmd - пакетная проверка токенизатора и морфологического анализатора для русского текста

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

К примеру, обработка предложений двуязычным русско-английским словарем Big cat quickly runs. и Белая кошка сладко спит на диване:

Синтаксический анализ для русского и английского языка

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

Токенизатор

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

-tokenize включение режима отладки токенизатора

-language XXX выбор языка

-o путь_к_файлу_листинга указание пути к текстовому файлу, в который будет выводиться тестовая информация

Например, для японского словаря:

Токенизатор

Переключение в режим токенизатора можно выполнить также вводом директивы #tokenize (см. подробнее следующий раздел):

токенизация русского и английского текста

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

С помощью опции -morphology утилита переводится в режим выполнения морфологического анализа. При этом для слов в заданном тексте (вводимом с клавиатуры или читаемом из заданного текстового файла) определяются грамматические характеристики, включая грамматический класс и координаты:

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

Опции -batch, -o и -print_html позволяют обработать текст в пакетном режиме и получить на выходе удобный для визуального анализа текст с HTML пометками.

В отличие от изолированного морфологического анализа в утилите Lexicon, морфологический разбор в утилите Syntax учитывает контекст слова и поэтому устраняет многие неоднозначности определения частей речи.

Пакетный тест англо-русского переводчика

1. Собрать англо-русский словарь, запустив скрипт .../scripts/dictionary/ru-en.sh

2. Собрать базу фильтрующих N-грамм запуском скрипта .../scripts/translation/ngrams-eng-rus.sh

3. Запустить скрипт .../scripts/translation/eng-rus.sh, который переведет предложения из файла .../scripts/translation/eng.txt и запишет результат в .../tmp/eng-rus.txt

Директивы

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

Все директивы начинаются с символа #.

#debug включение интерактивного отладчика (опция -debug)

#nodebug отключение интерактивного отладчика

#tokenize включение режима токенизации (опция -tokenize)

#analysis включение режима синтаксического анализа

#transform scenario включение сценария трансформации текста (опция -transform scenario)

#tag name=value задание тега для фильтрации связей в тезаурусе, например при переводе. Теги - это метки, устанавливаемые для связей в тезаурусе. При задании фильтрующего тега извлекаемые из тезауруса связи проверяются на наличие такой метки, либо на отсутствие каких-либо тегов.

#tag- снятие фильтрации тегами для связей в тезаурусе

#param name=value задание глобальной переменной для выполняемой процедуры на внутреннем языке

#param- удаление всех глобальных переменных

#allow_incomplete разрешать неполный морфологический и синтаксический анализ.

#disallow_incomplete запрещать неполный морфологический и синтаксический анализ.

Режим Пролог-консоли

Команда prolog переводит синтаксический анализатор в "низкоуровневый" режим прямого доступа к интерпретатору Пролога.

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

В качестве демонстрации некоторых принципов можно ввести прямо в консоли следующий пример, в котором знакомые с языками Python или Icon распознают концепцию генераторов:

синтаксический анализатор - режим Пролога

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

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

Chatbot

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

режим естественного диалога

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

Грамматический анализ в программе wdebugger

Рассмотрим следующий пример. Запускаем анализатор и вводим для анализа предложение Большая белая кошка очень сладко спит на мягком диване:

Грамматический движок построил единственный вариант синтаксической структуры предложения. Посмотрим на детальную структуру:

Как видно, в ходе морфологического и синтаксического анализа определяются все морфологические категории слов исходного предложения.

Демонстрационная программа Joker

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

синтаксический анализ английских предложений синтаксический анализ русского текста

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

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

Токенизатор

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

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

Утилита LEXICON

Внутренний язык грамматического движка

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

  © 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 Мб


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



изменено 26-Nov-11