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

时间:2018-09-18 09:26:14

标签: ibm-cloud chatbot ibm-watson watson-conversation

我有一个名为“ @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 :(得分:1)

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