Робот
Устройство и подключение
Управляющее ПО
Язык BML
Словарь жестов
SSSender
API робота
Когнитивный компонент
Обработка текста
Парсер
Массивы текстов
База разборов

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

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

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

Параметры передаются программе ParsersDemo.exe через командную строку, поэтому запускать программу удобно через командный файл, например:

@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" ^
 --grammemes="0, p, ag, pat, cont, instr, src, targ, caus, eff, coord, loc, obs, pos, ca, tr, mod, foc, t, refg, sa, it, ben, rag, voc, -, head, NOUN, ADJF, ADJS, COMP, VERB, INFN, PRTF, PRTS, GRND, NUMR, ADVB, NPRO, PRED, PREP, CONJ, PRCL, INTJ ^
 --guesserweb-host="http://syntax.rrcki.ru:5000"

- где:

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

Парсер предназначен для анализа предложений. Предложение нужно ввести в сроку ввода и нажать кнопку Start. Результатом анализа является синтаксическое дерево (отмечено синим) и семантическое представление (отмечено зелёным). Парсер обрабатывает омонимичные разборы, поэтому он может построить сразу множество синтаксических деревьев и семантических представлений: одно семантическое представление для каждого синтаксического дерева. Эти варианты можно проматывать с помощью горизонтальной прокрутки. При этом синтаксические деревья упорядочиваются парсером по снижению синтаксического веса (он указан в заголовке синтаксического дерева - отмечен жёлтым). В строку ввода можно поместить сразу несколько предложений, разделённых ., ? или !. В этом случае порядок разборов будет соответствовать порядку предложений. Но для каждого предложения разборы будут отсортированы по снижению синтаксического веса.

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

В окне парсера используются параметры:

  • 1 root – Показывать только деревья с одной вершиной. Снятие флажка 1 root показывает все варианты разбора, даже те синтаксические разборы, которые не объединились в одно синтаксическое дерево. Это полезно для поиска ошибок, когда не построено ни одного дерева.
  • Short trees – Скрывать лишние синтаксические признаки, не указанные в ключе grammemes. Снятие флажка 1 root покажет полные синтаксическе деревья. Если ключ grammemes не использован при запуске приложения, то всегда будут показываться полные синтаксические деревья.

В заголовке синтаксического дерева (отмечен жёлтым) указаны:

  • Вес синтаксического дерева – деревья сортируются по снижению этого веса.
  • LOG – лог разбора, список использованных синтаксических правил (двойное нажатие откроет лог в виде файла, а нажатие LOG на двух разных деревьях покажет различия).
  • JSON – дерево в формате JSON (двойное нажатие откроет дерево в виде файла, а нажатие JSON на двух разных деревьях покажет различия).
  • Стрелка сохранения дерева в базу Postgres.

Лог разбора

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

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

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