Робот
Устройство и подключение робота
Управляющее программное обеспечение
Описание поведения на языке BML
API
Использование системы диалога DialogFlow
Локализация роботом лица пользователя
Когнитивный компонент
Как устроена обработка текста?
Синтаксический парсер
Обработка массива текстов
База данных результатов разбора

Синтаксический парсер

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

Запуск

Чтобы запустить парсер, необходимо запустить файл ParsersDemo.exe. После запуска откроется два окна: собственно парсер (окно ParsersDemo) и интерфейс работы со сценариями (окно Database Development Support). В этой статье будет описана работа в основном окне – окне парсера.

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

@C:\parser\ParsersDemo.exe ^
 --rules-file="C:\parser\rules.xml" ^
 --mssqlrep-connectionstring="Data Source=SYNTAX.RRCKI.RU;Initial Catalog=Scenarios;User Id=sa;Password=REPLACE_PASSWORD" ^
 --morphmatchregex_pattern="C:\parser\patterns.xml" ^
 --guesserweb-host="http://syntax.rrcki.ru:5000"

Где

Параметр Описание
--rules-file путь до файла с грамматикой
--mssqlrep-connectionstring строка подключения к словарю – базе данных MSSQL
--morphmatchregex_pattern путь до файла с правилами-исключениями
--guesserweb-host адрес сервера, на катором запущен «гессер» – сервис, предсказывающий начальную форму и морфологические характеристики несловарных слов

Анализ предложения

Парсер предназначен для анализа предложений. Предложение, требующее анализа вводится в строку ввода (1 в элементах интерфейса). Знаки препинания в введенном предложении опциональны. Запускается разбор после нажатия на кнопку Start (2). Результатом анализа предложения может стать целое множество синтаксических деревьев, между собой разборы разделены вертикальной чертой, парсер предоставляет возможность просмотреть каждый из получившихся разборов с помощью горизонтальной промотки. В поле 3 на схеме виден один из разборов (5), а в поле 4 находится еще один. Вертикальная прокрутка позволяет просматривать все сегменты синтаксического дерева. Синтаксические деревья, если их получилось несколько, упорядочиваются парсером не в случайном порядке, а в соответствии с весом каждого дерева (от более тяжелых к более легким). В системе анализа есть алгоритм присваивания весов синтаксическим связям в зависимости от того, насколько алгоритм посчитал такую связь правдоподобной (исходя из правил русской грамматики и статистических данных).

Возможна ситуация, при которой для предложения не будет создано ни одного дерева, и поле 3 останется пустым. Это может объясняться как аграмматичностью исходного предложения, так и несовершенством грамматики, на основе которой парсер строит деревья. Для того, чтобы определить истинную причину, в интерфейсе парсера предусмотрена возможность просматривать даже не собравшиеся под одну вершину деревья, для этого нужно убрать галочку в поле 6. Кроме набора синтаксических деревьев, для каждого предложения, содержащего предикат, строится также набор семантических представлений. Каждому синтаксическому разбору соответствует один семантический, например, синтаксическому дереву 5 соответствует семантическое дерево 7.

Элементы интерфейса

Интерфейс парсера

  1. Строка ввода
  2. Кнопка запуска разбора
  3. Поле текущего синтаксического дерева
  4. Поле следующего синтаксического дерева
  5. Синтаксическое дерево
  6. Чекбокс «показывать только деревья с одной вершиной»
  7. Семантическая структура

Элементы синтаксического дерева

Синтаксическое дерево

  1. Шапка дерева: вес разбора, перечень отработавших правил, структура дерева в формате JSON
  2. Шапка сегмента: лемма, индекс леммы, порядковый номер в предложении
  3. Тело сегмента: морфологические и синтаксические признаки
  4. Стрелки зависимости: от вершинного сегмента к зависимым

Лог разбора

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

Для получения лога нужно навести мышку на надпись LOG в шапке дерева – это выведет лог непосредственно в интерфейсе парсера, если по надписи LOG кликнуть мышкой, эта же информация откроется в текстовом редакторе.

Пример файла лога:

Sentence 31964: 'мать любит дочь и сына'
============== History ==============
Push 'мать'
Depth 1: Bind (+0,05 -> 0,05 + 0,00) 'NOUN::'
Push 'любит'
Depth 2: Bind (+0,00 -> 0,05 + 0,00) 'VFIN::'
Depth 1: Bind (+0,70 -> 0,75 + 0,00) 'S-ag/VFIN'
Push 'дочь'
Depth 2: Bind (+0,00 -> 0,75 + 0,00) 'NOUN::'
Depth 2: Potential Up-left Link 0,69 'VP\Sacc-cont'
Push 'и'
Push 'сына'
Depth 4: Bind (+0,00 -> 0,75 + 0,69) 'NOUN::'
Depth 2: Bind+fork (+1,40 -> 2,15 + 0,00) 'VIRT:S-(и)-S'
Depth 1: Bind+fork (+0,70 -> 2,85 + 0,00) 'VP\Sacc-cont'

Ключевое слово push сигнализирует о том, что к разбору добавился новый сегмент предложения. Ключевое слово bind означает, что на этом этапе сработало некое правило – его название написано в одинарных кавычках в конце строки. Например, после того, как парсер передал на обработку слово мать из предложения мать любит дочь и сына, сработало правило ‘NOUN::’ из грамматики. Алгоритм парсера работает слева направо, постепенно добавляя к анализу новые слова из предложения. В рассматриваемом примере в момент, когда на анализ уже поступило слово дочь, но еще не поступили слова и сына, алгоритм предполагает, что дочь – прямое дополнение глагола любит, в действительности же прямым дополнением является вся сочиненная группа дочь и сына. И правило ‘VP\Sacc-cont’, присоединяющее прямое дополнение к глаголу, должно сработать только после того, как вся группа поступит на анализ. Такие несработавшие гипотезы в логе отмечены ключевыми словами potential link.

Накопление веса на каждом шаге в логе описывается строкой: (+X -> Y + Z). Где +X – вес, который алгоритм прибавляет на данном шаге к общему весу дерева. Y – накопленный к данному шагу вес. Z – суммарный вес потенциальных связей, в итоговый вес дерева не входит.

Сравнение логов двух разборов

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

Сравнение структур двух разборов

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