$pattern_name
$название-паттерна
— ссылка на именованный паттерн.
Пример
Объявление паттерна:
patterns:
$thanks = (спасибо [и] [тебе|вам] [большое]|благодар*|спс|супер|супир|ура|отлично|молод*|умни*|пасиб*)
$ok = (окей|ок|okey|okay|o key|ok)
$you = (ты|вы|тебе|вам|тебя|тя|тибя|вас)
$my = (мой|моя|мое|мое|мае|мае|мне|мои|маи|мою|маю|моне|мане|мане|моне|меня|миня|моих|маих|моим|маим|моем|маем|моем|маем|мя|ма|мня|[со] мной)
Использование паттерна в сценарии:
state: Thanks
q!: * $thanks
q!: * $ok *
q!: * {мне (понятно|понятненько|ясно|ясненько) [все|все]} *
q!: * {(понятно|понятненько|ясно|ясненько) (все|все)} *
q!: * [премного] благодарн* *
script:
$reactions.answer("Рад помочь.\nОстались ли у вас еще вопросы?")
~lemma
~lemma
— начальная, словарная форма слова, относительно которой проверяются остальные формы.
Например, в паттерн ~яблоко
попадут слова: яблоки
, яблок
и др.
Правило срабатывает на всех словоформах всех омонимов: слов, которые пишутся одинаково, но имеют разные значения или морфологическую форму.
Например, паттерн ~печь
сработает на сл овоформах существительного печь
(печи
, печью
) и глагола печь
(пеку
, печешь
).
Из-за морфологического разнообразия языка использование этого паттерна может приводить к ложноположительным результатам.
Пример
state: Delivery
q!: * {(заказать/заказывать/заказ/~доставка/доставляете) [~еда] * [$cafe]} * $City *
q: * $City *
script:
if (!$session.address) {
$session.address = {};
}
$session.address.city = $parseTree.City[0].value.name;
go!: ../../Delivery
$morph
$morph<часть речи и/или граммема>
— проверяет грамматические свойства слова.
Например, для паттерна $morph<С им ед>
: С
— существительное, им
— в именительном падеже, ед
— в единственном числе.
Вы можете указать одно или несколько свойств.
Для анализа морфологии используется библиотека АОТ .
Использование в сценарии
theme: /Bank Information
state: Bank Information
q!: * $morph<С> [нашего/вашего/этого] (банка) *
q!: * (называется) [наш/ваш/этот] (~банк) *
go: /
Одно слово не обязательно заключать в ()
.
$regexp
$regexp<литералы и метасимволы>
— регулярное выражение — строка, которая является шаблоном, описывающим некий набор строк.
В $regexp
будут попадать строки, соответствующие шаблону.
Шаблон состоит из литералов и метасимволов — символов со специальным, а не буквальным значением.
Синтаксис регулярных выражений соответствует синтаксису, используемому в Java.
Пример
Объявление паттерна для обнаружения любого слова в ответе:
patterns:
$anyWord = $regexp<.+>