IBM沃森助手:聊天机器人实体混淆了正则表达式(IBM Watson Assistant: Chat

2019-11-05 04:53发布

我有一个名为其中存储了两个值“@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”。

我能为了解决这种混乱呢?

Answer 1:

我很快测试这一点,有两个问题。 首先,点( .是一个特殊的通配符,需要进行转义。第二,沃森助手不支持完整的regex选项,似乎在较长键入数字时要匹配两个号码。

你可以简单地逃避使用\和改变你的定义或使用地雷:

num1: (\d{3}\.){1}\d{3}
num2: (\d{3}\.){2}\d{3}

由于与正则表达式评价的麻烦我解决了在表达式本身。 沃森助理保持更长的匹配作为第二值(如果匹配的)。 下面的表达式如下如果长时间数量,material_number2,已经匹配,然后提取它的正确值。 它假定短(不正确的)匹配首先存储。

{
  "context": {
    "materialnumber": "<? @matrial_number:matnum2 ? entities.material_number[1].literal : entities.material_number[0].literal ?>"
  }
}


文章来源: IBM Watson Assistant: Chatbot Entity Confusion over regular expression