【问题标题】:IBM Watson Assistant: Chatbot Entity Confusion over regular expressionIBM Watson Assistant:聊天机器人实体混淆正则表达式
【发布时间】:2019-02-22 07:06:37
【问题描述】:

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

第一个值为“ma​​terial_number1”,模式为(\d{3}).(\d{3})

第二个值是“ma​​terial_number2”,模式为(\d{3}).(\d{3}).(\d{3})

当用户输入材料编号时,我将值存储在名为“$materialnumber”的上下文变量中,并将该变量的值设置为“?@material_number.literal? ”。最后机器人响应“哦,好的,材料编号是 $materialnumber.

问题是当用户输入像“123.123.123”这样的材料编号时,机器人认为材料编号是“123.123”。基本上它忽略了最后三位并提示返回“哦,好的,材料号是123.123”。

我能做些什么来解决这个困惑?

【问题讨论】:

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


    【解决方案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 ?>"
      }
    }
    

    【讨论】:

    • 谢谢 data_henrik,我按照你说的做了,现在它不会混合这两个单独的值,但是现在当用户输入“123.123”作为材料编号时,机器人不会将其识别为@material_number 实体的值。我不知道该怎么办...
    • 当我在模式值前后使用 !\w 时,机器人无法识别该值。
    • Henrik,非常感谢您的帮助。当我尝试复制粘贴您的代码时,Watson 指出“无效的 JSON 格式,无法保存更改”。我真的不明白为什么。
    • 我重新格式化了代码以便更好地复制,而不是可读性:)。它需要进入插槽的 JSON(您可能知道)。
    • Henrik,你真的太棒了!现在一切正常。还有一个问题。如果我需要使用模式 (\d{3}\.){3}\d{3} 再添加一个值“num3”怎么办。所以它将包含 12 位数字。我现在应该如何处理?
    猜你喜欢
    • 2019-02-24
    • 2019-02-15
    • 1970-01-01
    • 2019-08-31
    • 2019-01-13
    • 2019-11-24
    • 1970-01-01
    • 1970-01-01
    • 2019-11-21
    相关资源
    最近更新 更多