Для экспериментов с синтаксическим анализатором можно использовать один из отладчиков проекта. В частности, можно использовать консольную программу syntax или оконный отладчик wdebugger.
Часть средств синтаксического анализатора доступна для использования прикладными программами через API грамматического движка. В частности, функция sol_MorphologyAnalysis позволяет выполнить морфологический разбор предложения, функция sol_SyntaxAnalysis выполняет синтаксический разбор предложения, функция sol_Tokenize разбивает строку на слова с учетом правил для естественного языка.
В демонстрационной программе Joker, доступной для свободного скачивания, также есть возможность увидеть работу синтаксического анализатора - см. далее.
Утилита 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 распознают концепцию генераторов:

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

Синтаксический анализатор выступает в роли нормализатора синтаксических конструкций, по возможности сводя огромное количество разных способов выражения мыслей в естественном языке к небольшому набору формализованных шаблонов, которые затем распознаются и обрабатываются семантическим анализатором и в конце концов - ядром Пролога.
Рассмотрим следующий пример. Запускаем анализатор и вводим для анализа предложение Большая белая кошка очень сладко спит на мягком диване:
Грамматический движок построил единственный вариант синтаксической структуры предложения. Посмотрим на детальную структуру:
Как видно, в ходе морфологического и синтаксического анализа определяются все морфологические категории слов исходного предложения.
Эта программа дает возможность запустить синтаксический анализ для предложений в текстовом файле и увидеть результаты в виде графов:
Программу можно свободно скачать здесь. После запуска в главном меню выбирается нужный модуль - синтаксический анализатор, далее нужно выбрать текстовый файл с исходными предложениями и запустить анализ. В состав демо уже входят эталонные текстовые файлы syntax.txt и синтаксис.txt для английского и русского языка соответственно.
API синтаксического анализатора
Внутренний язык грамматического движка
Формат автоматических тестов для морфологического и синтаксического анализаторов
© Elijah Koziev 2010
Поисковая система
SDK Поисковой системы
Экранный переводчик
|
|
изменено 26-Nov-11 | ||||||||||||||||||||||||||||||||||||||