首页 > 解决方案 > IBM Watson Assistant:聊天机器人实体混淆正则表达式

问题描述

我有一个名为“ @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 ”。

我能做些什么来解决这种混乱?

标签: ibm-cloudchatbotibm-watsonwatson-conversation

解决方案


我很快对此进行了测试,有两个问题。首先,点 (.是一个特殊的通配符,需要转义。其次,Watson Assistant 不支持完整的正则表达式选项,并且在输入较长的数字时似乎匹配两个数字。

您可以简单地使用 a 转义\并更改您的定义或使用我的:

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 ?>"
  }
}

推荐阅读