IBM Watson Assistant: путаница в сущности Chatbot по регулярному выражению - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть объект с именем " @ material_number ", в котором хранятся два значения.

Первое значение - « material_number1 » с шаблоном (\ d {3}). (\ D {3})

Вторым значением является " material_number2 " с шаблоном (\ d {3}). (\ D {3}). (\ D {3})

Когда пользователь вводит номер материала, я сохраняю значение в переменной контекста с именем " $ materialnumber " и задаю значение этой переменной "?@material_number.literal?». И в конце бот отвечает: " Ну ладно, номер материала равен $ materialnumber. "

Проблема в том, что когда пользователь вводит номер материала, например " 123.123.123 ", бот думает, что номер материала равен " 123.123 ". По сути, он игнорирует последние три цифры и выдает запрос « О, хорошо, номер материала 123.123 ».

Что я могу сделать, чтобы исправить эту путаницу?

1 Ответ

0 голосов
/ 18 сентября 2018

Я быстро проверил это, и есть две проблемы. Во-первых, точка (. - это специальный подстановочный знак, который необходимо экранировать. Во-вторых, Watson Assistant не поддерживает параметры полного регулярного выражения и, похоже, совпадает с обоими числами при вводе более длинного числа.

Вы можете просто сбежать с помощью \ и изменить свое определение или использовать мое:

num1: (\d{3}\.){1}\d{3}
num2: (\d{3}\.){2}\d{3}

Из-за проблем с оценкой регулярных выражений я решил это в самом выражении. Watson Assistant содержит более длинное совпадение в качестве второго значения (если сопоставлено). Следующее выражение проверяет, совпадает ли длинное число material_number2, и извлекает для него правильное значение. Предполагается, что более короткое (неправильное) совпадение сохраняется первым.

{
  "context": {
    "materialnumber": "<? @matrial_number:matnum2 ? entities.material_number[1].literal : entities.material_number[0].literal ?>"
  }
}
...