ibm-cloud - 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 ”。
我能做些什么来解决这种混乱?
解决方案
我很快对此进行了测试,有两个问题。首先,点 (.
是一个特殊的通配符,需要转义。其次,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 ?>"
}
}
推荐阅读
- javascript - 如何过滤表,在json数据中找到匹配的条目并添加相应的链接
- c - 指针是否支持“数组样式索引”?
- c++ - 使用模板化操作符<< 输出集合的集合
- angular - Angular - 专注于点击时具有动态 ID 的输入
- java - oracle weblogic OAM servlet 代理 - 如何传播 OAMAuthnCookie
- c - Char 数组到 Int 的转换
- javascript - 控制器返回空值
- docker - Windows 上的 Dockerfile 复制超时问题
- python - 如何从 pvLIB 中的 GHI 数据计算 DNI 和 DHI?
- django - 如何在 django 的模型中定义日期格式?