Перейти к основному содержимому

$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 будут учитываться только вложенные стейты.