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

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

Для этого рядом с каждым примером реплики в блоке Интенты есть переключатель в виде кавычек. Нажмите на переключатель, чтобы перейти в режим шаблонов. При этом кавычки изменятся на символ @.

Что такое шаблоны интентов

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

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

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

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

Примеры шаблонов:

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

Слово

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

Звездочка

Звездочка (*) обозначает, что на ее месте в реплике пользователя может быть сколько угодно символов, в том числе и ни одного.

Примеры:

  • * привет - любое количество слов перед словом привет.

    Смартап сработает на словосочетания Ну привет или Скажи мне привет, а также на слово Привет.

  • * заказать * стол * - любое количество слов перед, между и после слов заказать и стол.

    Смартап сработает на фразах Я хочу заказать сегодня стол или Заказать стол на двоих и другие. При этом не сработает на заказать столик.

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

Примеры:

  • привет* - сработает на слова Привет, Приветы, Приветики и другие.
  • *скажи* - подойдет для реагирования на Скажи, Подскажи, Подскажите, Скажите и другие.
Звездочку нельзя использовать внутри слова! А только перед ним и после него.

Тильда

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

Пример:

~яблоко - сработает на все формы слова Яблоко (яблоки, яблок и другие). Не будет работать на слова типа яблочный, так как это другая часть речи. Не будет реагировать на слова с суффиксами, например, яблочко.

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

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

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

Примеры:

  • (да/ага/угу) - сработает на любое из слов Да, Ага, Угу.
  • * (~яблоко / ~груша) * - срабатывает на ввод любой формы слова яблоко, либо любой формы слова груша, плюс любое количество слов до и после. Например, Дай мне 5 яблок или Хочу купить десять **груш**.

Опция

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

Пример:

* [много] (~яблоко / ~груша) * - под этот шаблон подойдут фразы Купил много яблок и Хочу грушу.

Сущность

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

Пример:

* живу * $CITY * - сработает на фразу Я живу в Питере.

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

Переменная

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

Пример:

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

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

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

Шаблоны можно вкладывать друг в друга без ограничений.