IBM Watson Assistant:Chatbot 实体对正则表达式的混淆

IBM Watson Assistant: Chatbot Entity Confusion over regular expression

我有一个名为“@material_number”的实体,其中存储了两个值。

第一个值为“material_number1”,格式为 (\d{3}).(\d{3})

第二个值为“material_number2”,格式为 (\d{3}).(\d{3}) .(\d{3})

当用户输入 material 数字时,我将值存储在名为“$materialnumber”的上下文变量中,然后设置该值将此变量更改为“?@material_number.literal?”。最后机器人回复“哦好的,material 号码是 $materialnumber.

问题是,当用户输入 material 号码,如“123.123.123”时,机器人认为 material 号码是“ 123.123”。基本上它会忽略最后三位数字并提示返回“哦好的,material 号码是 123.123”。

我该怎么做才能消除这种困惑?

我很快测试了这个,有两个问题。首先,点 (. 是一个特殊的通配符,需要转义。其次,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 ?>"
  }
}