Синтаксис шаблонов


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

Для этого при добавлении нового интента используйте шаблоны с определенным синтаксисом.

По умолчанию, когда вы переходите в редактирование блока Интенты и начинаете добавлять строки, они добавляются как примеры фраз, а не как шаблоны. Об этом свидетельствует иконка    слева от каждой фразы. Чтобы сделать фразу шаблоном, нажмите на иконку    напротив каждой фразы. Она изменится на иконку   .

template syntax 1

Что такое шаблоны фраз

Шаблон — это последовательность слов и сущностей, которые обязательно должны встретиться во фразе клиента, чтобы бот на нее отреагировал.

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

Синтаксис шаблонов

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

Вот несколько простых примеров:

  • привет

Этот шаблон, состоящий только из одного слова, позволяет боту реагировать только на точную фразу «привет». Если фраза будет отличаться хотя бы на один символ, она не будет распознана ботом.

template syntax 2

  • * привет* *

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

Этот шаблон позволяет боту реагировать на фразы наподобие «привет», «приветы», «приветики», «ну привет Алиса», «снова привет», «скажи мне привет» и подобные.

template syntax 3

  • * ~яблоко *

Шаблон включает все словоформы существительного «яблоко», а также любое количество слов до и после данного слова.

Этот шаблон сработает, например, на фразе «дай мне два яблока, пожалуйста».

Так как тильда распознает только формы той части речи, в которой вы указываете слово в шаблоне, на словосочетание «яблочный сок» бот реагировать не будет. Также не будут распознаваться родственные слова с суффиксами, например, слово «яблочко».

template syntax 4

template syntax 24

Ниже представлен весь синтаксис шаблонов Aimylogic.

Слово

Слово в шаблоне не расширяется синонимами, поэтому во фразе клиента оно должно появиться именно в том виде, в котором указано в шаблоне.

template syntax 5

template syntax 14

Звездочка

Этот символ в шаблоне означает, что на его месте во фразе клиента может быть сколько угодно символов, в том числе и ни одного.

* привет

В этом шаблоне может быть любое количество слов перед словом «привет». Сработает на словосочетания «ну привет» или «скажи мне привет», а также просто на слово «привет».

template syntax 6

template syntax 15

* заказать * стол *

Шаблон позволяет вводить любое количество слов перед, между и после слов «заказать» и «стол».

Сработает на фразах «я хочу заказать сегодня стол», «заказать стол на двоих» и подобных. Не сработает на фразу «заказать столик».

template syntax 7

template syntax 16

Звездочку можно поставить в начале или в конце слова. Это будет означать, что слово во фразе клиента может начинаться или заканчиваться любыми символами.

Шаблон привет* сработает на слова «привет», «приветы», «приветики» и так далее. Так как вы не указали, что до слова и после слова могут быть другие слова, то на словосочетания, где есть слово «привет» или производные от него, бот реагировать не будет.

template syntax 8

template syntax 17

Шаблон *скажи* подойдет под «скажи», «подскажи», «подскажите», «скажите» и т. п.

template syntax 9

template syntax 18

Звездочка используется только перед словом или после него. Внутри слова ее использовать нельзя.

Тильда

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

К примеру, шаблон ~яблоко сработает на все формы слова «яблоко» — «яблоки», «яблок» и т.д. Однако есть ряд ограничений в работе такого шаблона:

  • Не будет работать на слова другой части речи. Например, «яблочный».
  • Не будет реагировать на слова с суффиксами. Например, «яблочко».

template syntax 10

template syntax 19

Кроме того, правило срабатывает на всех словоформах омонимов — слов, которые пишутся одинаково, но имеют разные значения или морфологическую форму.

Например, шаблон ~печь сработает на словоформах существительного «печь» («печи», «печью») и глагола «печь» («пеку», «печешь»).

Тильда ставится перед начальной грамматической формой слова. Для глаголов начальной формой является несовершенный вид. Поэтому если вы хотите использовать тильду, то нужно писать ~покупать, а не ~купить, ~спрашивать, а не ~спросить.

Альтернатива

Заключите несколько слов или других шаблонов в круглые скобки, чтобы шаблон срабатывал на любое из этих слов во фразе клиента.

Разделите слова знаком / или |.

Шаблон (да/ага/угу) или (да|ага|угу) сработает на любое из слов «да», «ага», «угу».

template syntax 11

template syntax 20

Шаблон * (~яблоко / ~груша) * срабатывает на ввод любой формы слова «яблоко» либо любой формы слова «груша». При этом во фразе может присутствовать любое количество слов до и после. Например, «дай мне 5 яблок» или «хочу купить десять груш».

template syntax 12

template syntax 26

Перестановка

Заключите фразу в фигурные скобки, чтобы бот распознавал шаблон вне зависимости от порядка слов во фразе, которую напишет клиент.

Шаблон {меня зовут *} сработает на ввод любой фраз, в которой обязательно есть слова «меня» и «зовут», а также любое количество других слов вне зависимости от порядка. Например, шаблон сработает на фразы «меня зовут Саша», «Саша меня зовут» и так далее.

Клиент должен написать во фразе все слова, указанные в шаблоне, чтобы шаблон сработал.

template syntax 22

template syntax 23

Опция

Если какие-то слова не обязательно должны быть во фразе клиента, то их можно заключить в квадратные скобки.

Под шаблон * [много] (~яблоко / ~груша) * подойдут фразы «купил много яблок» и «хочу грушу».

Сущность

Чтобы указать, что во фразе обязательно должна присутствовать какая-то сущность, подставьте ее в шаблон, используя знак $ перед именем сущности.

Шаблон * живу * $CITY * сработает на фразу «я живу в Питере».

При этом бот выделит сущность города $CITY и создаст переменную $CITY с данными указанного города.

Переменная

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

Шаблон * $CITY::From * $CITY::To * сработает на фразы наподобие «Питер Москва» или «билеты из Москвы до Питера».

При этом бот выделит сущности двух городов и сохранит их в переменные с именами $From и $To, чтобы вы могли определить, откуда и куда клиент ищет билеты.

Вложенность шаблонов

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

Например, если вы ожидаете, что клиент захочет купить билет в какой-либо город, можете создать подобный шаблон:

{(~заказать/~купить/~билет) * $DATETIME * [$CITY]}