我有一个名为“ @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 ”。
我该怎么做才能解决这种困惑?
答案 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 ?>"
}
}