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

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

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

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

Консольный отладчик 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 если анализатор не смог распознать все входное предложение как известную ему структуру, то фиксируется ошибка анализа.

-allow_reco - включение модуля, который выполняет восстановление пропущенных служебных слов (предлогов и т.д.), а также корректирует грамматическую форму слов.

В составе 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. и Белая кошка сладко спит на диване:

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

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

Отладка учебного структурного парсера

В состав SDK входят исходные тексты правил для разбора предложений на русском языке. Благодаря небольшому объему правил и детальным пояснениям в исходных текстах, этот анализатор можно брать за основу для разработки собственного анализатора предложений. Инструкция по пересборке учебного анализатора после изменения правил находится здесь. После внесения изменений может быть полезным посмотреть, как грамматический движок применяет правила. Это легко сделать с помощью программы Syntax и следующих шагов.

Запускаем программу в консольном интерактивном режиме, например с помощью скрипта ...\scripts\console-syntax.cmd. Если ввести предложение "ты должен есть фрукты", то увидите такую картину:

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

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

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

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

Пробельные отступы слева показывают привязку узлов в дереве. Эта визуализация показывает типы связей в угловых скобочках. Они однозначно соответствуют директивам : links {} в правилах анализа.

Выведем теперь трассировку применения правил. Для этого введем директиву #debug, затем анализируемое предложения, затем нажимаем 'm' для выбора меню управления парсером, далее нажимаем 5 для включения остановки парсера при достижении правой границы предложения, то есть в конце анализа. Наконец, нажимаем 'r' для запуска анализа:

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

После нажания 'r' на экран будет выведена детальная трассировка применения правил с привязкой каждого шага к исходным текстам:

трассировка применения правил анализа

В данном случае tiny-russian-syntax.sol это имя текстового файла с учебным набором правил, после двоеточия идет номер строки в этом файле, в котором сработало сопоставление, далее идет контекст сопоставления и, если доступно, имя группы правил. Например:

трассировка применения правил анализа

Мы видим, что на шаге №3 было успешно выполнено сопоставление словоформы для местоимения с опорной точкой, которая задана в строке 157 в исходниках. Смотрим в это место и видим примерно следующее:

// Личное местоимение в именительном падеже является подлежащим.
pattern Subject
{
 местоимение:*{
               падеж:им // явно требуем, чтобы местоимение было в именительном падеже.
              } : export { node:root_node ЛИЦО ЧИСЛО РОД }
}

То есть опорная точка требует наличия личного местоимения в именительном падеже, и в данном случае это условие соблюдено.

Немного далее в трассироке, на шаге 5, можно видеть, что в строке 258 исходников было вызвано только что найденное правило из группы Subject. В исходном тексте этот фрагмент выглядит так:

// Распознаём простейшее предложение, состоящее из подлежащего и сказуемого.
pattern Clause
{
 sbj=Subject
 p=Predicate { =sbj:ЛИЦО =sbj:ЧИСЛО =sbj:РОД } : export { node:root_node }
 fin=@optional(ClauseTerminator) // точка в конце предложения опциональна.
} : links {
           // так сложилось исторически, что сказуемое выступает в роли корневого узла в
           // синтаксическом дереве. Разумеется, можно изменить это правило и строить дерево из
           // подлежащего, что, кстати, снимет некоторые сложности с нулевой связкой.
           p.{
              sbj
              ~fin // если терминатор был опознан, то приткнем его к сказуемому.
             }
          }

Токенизатор

Утилиту 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 запрещать неполный морфологический и синтаксический анализ.

#allow_reco - включение модуля, который выполняет восстановление пропущенных служебных слов (предлогов и т.д.), а также корректирует грамматическую форму слов.

#disallow_reco - отключение модуля реконструкции.

#show - отображение результатов последнего выполненного анализа с максимальными деталями.

#tree - вывод в псевдографическом виде синтаксического графа, построенного в последнем сеансе парсинга.

#recog - вывод детальной информации о распознавании слов в последнем сеансе анализа.

Грамматический анализ в программе 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 Мб


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



изменено 29-Jul-12