如何让Watson捕获一系列数字(input.text.extract)

时间:2016-11-28 12:03:48

标签: ibm-watson watson-conversation

在我的例子中,我要求一个个人文件号码,号码有11位数字,我需要这个,以防用户正确键入11个号码,watson继续对话,如果没有,watson将通知一个我定义的消息。怎么做?

我的情况: 沃森说: 好的,我会检查一下。你的协议号是多少?

我说: 例如:35158811233

沃森说: 你想完成这项服务吗?

Watson不会重新调整数字,我的谈话流程完成。请问有人知道如何解决这个问题吗?

Watson明白:

  "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>"
    ],

1 个答案:

答案 0 :(得分:3)

要将数字与Watson会话服务匹配,您可以使用可在实体标签中打开的实体sys-number - 但这将匹配所有数字,而您的数字是特定数字。

对于此用例,您可以添加对文本用户输入的附加检查。 Watson会话支持regexps检查。如果以这种方式创建对话节点的条件: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."的内容,以在聊天窗口中显示该数字。

还有一件事 - 有关正则表达式信息的好地方,您还可以尝试各种类型的正则表达式以及它们匹配的内容是Image contains two tables, Now I want to delete duplicate table from table 1 with comparing data with table 2