Перейти к основному содержимому

$parseTree

Представляет результат разбора входной фразы, в соответствии с именованными паттернами, и результаты работы конверторов значений.

$parseTree имеет древовидную структуру, где на каждом уровне представлены данные, относящиеся к определенному токену, начиная с корневого.

Формат одного уровня $parseTree:

{
tag:
pattern:
text:
words:
value:
TokenByName: <$parseTree> // вложенные токены
...
}

Где:

  • tag — имя, под которым токен фигурирует в $parseTree;
  • pattern — имя именованного паттерна, в который попал текст;
  • text — текст в виде string;
  • words — токены;
  • value — элемент является активным при использовании маппинга, конвертеров или именованных сущностей.
  • TokenByName — именованный паттерн.

Примеры использования

  • Определим дерево разбора для фразы Какая погода в Петербурге?.

    Именнованные паттерны для разбора фразы:

    $Question = (какой|какая)
    $Weather = (погода|прогноз)
    $City = (~Петербург|~Москва)
    q: * [$Question] * $Weather * $City *

    Для фразы будет построено следующее дерево разбора:

        {
    "tag": "root",
    "pattern": "root",
    "text": "Какая погода в Петербурге",
    "words": [
    "какая",
    "погода",
    "в",
    "Петербурге"
    ],
    "Question": [
    {
    "tag": "Question",
    "pattern": "Question",
    "text": "Какая",
    "words": [
    "какая"
    ]
    }
    ],
    "Weather": [
    {
    "tag": "Weather",
    "pattern": "Weather",
    "text": "погода",
    "words": [
    "погода"
    ]
    }
    ],
    "City": [
    {
    "tag": "City",
    "pattern": "City",
    "text": "Питере",
    "words": [
    "Петербурге"
    ]
    }
    ]
    "_Question": "Какая",
    "_Weather":"погода",
    "_City":"Петербурге"
    }
  • Определим дерево разбора для фразы два плюс два. Фраза будет разбита на фрагменты, в соответствии с использованными именованными паттернами. Структура рекурсивная и фрагменты могут быть вложенными на любую глубину, как в следующем примере:

    $Digit = $regexp<\d+>
    $Numeral = (один:1|два:2)
    $Number = ($Digit|$Numeral)
    $Operation = (плюс:+|минус:-)
    q: * $Number::Number1 $Operation $Number::Number2 *

    Для фразы будет построено следующее дерево разбора:

        {
    "tag": "root",
    "pattern": "root",
    "text": "два плюс два",
    "words": [
    "два",
    "плюс",
    "два"
    ],
    "Number1": [
    {
    "tag": "Number1",
    "pattern": "Number",
    "text": "два",
    "words": [
    "два"
    ],
    "Numeral": [
    {
    "tag": "Numeral",
    "pattern": "Numeral",
    "text": "два",
    "words": [
    "два"
    ],
    "value": "2"
    }
    ]
    }
    ],
    "Operation": [
    {
    "tag": "Operation",
    "pattern": "Operation",
    "text": "плюс",
    "words": [
    "плюс"
    ],
    "value": "+"
    }
    ],
    "Number2": [
    {
    "tag": "Number2",
    "pattern": "Number",
    "text": "два",
    "words": [
    "два"
    ],
    "Numeral": [
    {
    "tag": "Numeral",
    "pattern": "Numeral",
    "text": "два",
    "words": [
    "два"
    ],
    "value": "2"
    }
    ]
    }
    ],
    "_Number1": "2",
    "_Operation": "+",
    "_Number2": "2"
    }