Иногда необходимо, чтобы проект реагировал не на все выражения, близкие по смыслу к примерам реплик, а только на четкие шаблоны.
Д ля этого рядом с каждым примером реплики в блоке Интенты есть переключатель в виде кавычек. Нажмите на переключатель, чтобы перейти в режим шаблонов. При этом кавычки изменятся на символ @.
Что такое шаблоны интентов
Шаблон - это последовательность слов и сущностей, которые обязательно должны встретиться в реплике пользователя, чтобы проект на нее отреагировал.
При этом Graph не расширяет шаблон синонимами. Такое поведение похоже на регулярные выражения , с тем отличием, что шаблоны в Graph имеют очень простой синтаксис, адаптированный к обработке запросов на естественном языке.
Синтаксис шаблонов
Шаблоны создаются с помощью специального синтаксиса, описывающего расширенные выражения, которые должен понимать проект.
Примеры шаблонов:
- Если в качестве шаблона указать одно слово, например
привет, проект будет реагировать строго на репликуПривет. - Если указать
* привет* *, проект будет реагировать так же и на измененное слово, которое может находиться посередине реплики. Так, при этом шаблоне проект отреагирует не только наПривет, но и на репликиПриветики,Ну привети другие. - Если в шаблоне использовать тильду, проект будет реагировать на все словоформы в рамках части речи. Например, если указать
* ~яблоко *, проект отреагирует на реплику вродеДай мне два яблока, пожалуйста, но не будет реагировать на словояблочкоилияблочный сок.
Слово
Слово в шаблоне не расширяется синонимами, поэтому во фразе пользователя оно должно появиться точно в том виде, который указан в шаблоне.
Звездочка
Звездочка (*) обозначает, что на ее месте в реплике пользователя может быть сколько угодно символов, в том числе и ни одного.
Примеры:
-
* привет- любое количество слов перед словомпривет.Проект сработает на словосочетания
Ну приветилиСкажи мне привет, а также на словоПривет. -
* заказать * стол *- любое количество слов перед, между и после словзаказатьистол.Проект сработает на фразах
Я хочу заказать сегодня столилиЗаказать стол на двоихи другие. При этом не сработает назаказать столик.
Звездочку можно поставить в начале или в конце слова. Это будет значить, что слово в реплике пользователя может начинаться или заканчиваться любыми символами.
Примеры:
-
привет*- сработает на словаПривет,Приветы,Приветикии другие. -
*скажи*- подойдет для реагирования наСкажи,Подскажи,Подскажите,Скажитеи другие.
Звездочку нельзя использовать внутри слова! А только перед ним и после него.
Тильда
Тильда (~) сообщает проекту, чтобы он реагировал на все словоформы указанного слова (в рамках части речи). Тильда ставится сразу перед словом в именительном падеже.
Пример:
~яблоко - сработает на все формы слова Яблоко (яблоки, яблок и другие). Не будет работать на слова типа яблочный, так как это другая часть речи. Не будет реагировать на слова с суффиксами, например, яблочко.
Тильда с тавится перед начальной грамматической формой слова. Для глаголов начальной формой является несовершенный вид. Таким образом при использовании тильды с глаголами пишите, например, ~покупать, а не ~купить, ~спрашивать, а не ~спросить.
Альтернатива
Заключите несколько слов или других шаблонов в круглые скобки (), чтобы шаблон срабатывал на любое из этих слов в реплике пользователя.
Примеры:
-
(да/ага/угу)- сработает на любое из словДа,Ага,Угу. -
* (~яблоко / ~груша) *- срабатывает на ввод любой формы словаяблоко, либо любой формы словагруша, плюс любое количество слов до и после. Например,Дай мне 5 яблокилиХочу купить десять груш.
Опция
Если какие-то слова не обязательно должны быть во фразе пользователя, то их можно заключить в квадратные скобки [].
Пример:
* [много] (~яблоко / ~груша) * - под этот шаблон подойдут фразы Купил много яблок и Хочу грушу.
Сущность
Чтобы указать, что во фразе обязательно должна присутствовать какая-то сущность, подставьте ее в шаблон, используя знак $ перед именем сущности.
Пример:
* живу * $CITY * - сработает на фразу Я живу в Питере.
При этом проект выделит сущность города (CITY) и создаст переменную $CITY с данными указанного города.
Переменная
Если в рамках одной сессии нужно использовать несколько значений одной сущности, используйте два двоеточия ::, например, $NUMBER::x.
В этом случае при срабатывании интента значение, сказанное пользователем, сохранится в переменную $x. После этого вы сможете использовать значение из переменной $x и создавать из сущности
NUMBER новые $NUMBER::y, $NUMBER::n и т. д.
Например, шаблон * $CITY::From * $CITY::To * сработает на фразы вида Питер Москва или Билеты из Москвы до Питера. То есть проект выделит сущности двух городов и сохранит их в переменные с именами $From и $To, чтобы можно было определить, откуда и куда пользователь ищет билеты.
Вложенность шаблонов
Шаблоны можно вкладывать друг в друга без ограничений.
Примеры вложенных шаблонов:
- (спасибо [и] [тебе|вам] [большое]|благодар*|спс|супер|супир|ура|отлично|молод*|умни*|пасиб*)
- (мой|моя|мое|мое|мае|мае|мне|мои|маи|мою|маю|моне|мане|мане|моне|меня|миня|моих|маих|моим|маим|моем|маем|моем|маем|мя|ма|мня|[со] мной)
- мне (понятно|понятненько|ясно|ясненько) [все|все]