2016-11-28 2 views
3

В моем примере я прошу указать номер личной документации, номер имеет 11 цифр, и мне это нужно, если пользователь правильно набирает 11 чисел watson продолжит разговор, а если нет, watson сообщит сообщение, определенное мной. Как это сделать?Как сделать Watson захватить последовательность чисел (input.text.extract)

Мой случай: Уотсон говорит: Хорошо, я проверю. Какой номер вашего протокола?

Я говорит: Ex: 35158811233

Уотсон говорит: Вы хотите, чтобы закончить службу?

Уотсон не переустанавливает число, и мой разговор течет до конца. Кто-нибудь знает, как это решить, пожалуйста?

Уотсон понимает:

"intents": [ 
    { 
     "intent": "goodbye", 
     "confidence": 0.24506947419646477 
    } 
    ], 
    "entities": [], 
    "input": { 
    "text": "35158811233" 
    }, 
    "output": { 
    "log_messages": [], 
    "text": [ 
     "Would you like to finish the service? \n \n <button id=\"button-yes\" onclick=\"yesBye();\">Yes</button> <button id=\"button-no\" onclick=\"noBye();\">No</button>" 
    ], 

ответ

3

Чтобы соответствовать номерам с услугой разговора Watson вы можете использовать объект sys-number, который может быть включен в закладке сущностей - но это будет соответствовать всем номерам и вашему специфическому один.

Для этого варианта использования вы можете добавить дополнительную проверку текстового ввода пользователя. Разговор Watson поддерживает проверки регулярных выражений. Если вы создадите условие диалогового узла таким образом: input.text.matches('^[^\d]*[\d]{11}[^\d]*$'), то этот узел будет соответствовать только если input.text, который является аксессуаром для точного текста. Строка, которая была отправлена ​​пользователем, будет соответствовать регулярному выражению (regexp), определенному как ^[^\d]*[\d]{11}[^\d]*$.

Это конкретное выражение будет соответствовать только 11 номерам цифр на входе и никаким другим цифрам в другом месте, кроме дополнительного текста спереди и после номера.

Теперь, чтобы захватить этот номер переменной можно добавить следующее в context диалогового узла, сопрягая этот номер:

"context": { "number": "<?input.text.extract('^[^\\d]*[\\d]{11}[^\\d]*$',0)?>" }

Обратите внимание, что отличается экранирование \\d от контекста из-за характера JSON поля context.

В выходном тексте диалогового узла вы можете написать что-то вроде "Ok, number $number was matched.", чтобы отобразить номер в окне чата.

Еще одна вещь - отличное место с информацией о регулярных выражениях, где вы также можете попробовать различные типы регулярных выражений и то, что они соответствуют Regex 101 web page.

+0

Большое спасибо @MichalBida !, он работает. –

Смежные вопросы