$nlp.match
Метод выполняет классификацию текста в контексте указанного стейта.
Синтаксис
Метод принимает в качестве входных параметров необходимую для сопоставления фразу и стейт, в котором будет проведен поиск.
$nlp.match("пока", "/")
Метод возвращает объект NLPResult
, который содержит указание на сработанный паттерн, стейт и объект parseTree
.
{
"parseTree": {
"tag": "root",
"pattern": "root",
"text": "пока",
"startPos": 0,
"endPos": 1,
"words": "пока",
"_Root": "пока"
},
"targetState": "/Bye",
"pattern": "пока",
"effectivePattern": "пока",
"score": "1.0"
}
Пример использования
Метод может использоваться для управления порядком классификации фраз в специфичных контекстах.
Например, есть сценарий, в котором бот предоставляет клиенту информацию о запрашиваемых акциях. Информация об акциях хранится в стороннем сервисе.
state: Promos || modal = true
# Выводим названия акций.
a: {{$session.promos.join(", ")}}
a: Про какую из наших акций вам рассказать подробнее?
state: Get
event: noMatch
script:
$temp.match = $nlp.matchExamples($parseTree.text, $session.promos);
# Если нашли в запросе название акции — сохраняем и переходим в /PromoDetails.
if: $temp.match && $temp.match.weight >= 0.2
script:
$session.promoSelected = $temp.match.example;
go!: /PromoDetails
# Если не нашли — пытаемся найти соответствие запросу из других стейтов.
script:
$temp.match = $nlp.match($parseTree.text, "/");
# Если нашли совпадение с другим стейтом — переходим туда.
if: $temp.match && $temp.match.score >= 0.2
script:
$parseTree = $temp.match.parseTree;
go!: {{$temp.match.targetState}}
# Если запрос не был распознан, выводим сообщение:
a: Извините, я не понял, про какую акцию вы хотели бы узнать.
Создадим стейт Promos
, в котором клиенту будет предложен список акций. Установим стейту флаг modal = true
для того, чтобы остаться в контексте этого стейта, пока не будет обработан запрос клиента.
Как было сказано ранее, информация об акциях хранится в стороннем сервисе, а не в сценарии бота. Поэтому использование паттернов для получения этой информации нецелесообразно. Вместо этого будем использовать стейт Get
с событием noMatch
, в который будут попадать нераспознанные запросы клиента.
Поскольку мы все еще хотим распознать фразу клиента для предоставления информации об акциях, будем использовать метод $nlp.matchExamples
для определения запрашиваемой акции и перенаправления диалога. Если к полученному запросу не удалось найти соответствующего названия акции, тогда используем метод $nlp.match
для распознания всей фразы. Если в этом случае соответствующей стейт также не был найден, выводим следующее сообщение:
Извините, я не понял, про какую акцию вы хотели бы узнать.
$nlp.match
, используется флаг modal = true
, то в результате вызова метода $nlp.match
будут учитываться только вложенные стейты.