实体内的正则表达式 (IBM-WATSON)

Regex inside Entity (IBM-WATSON)

是否可以将实体放入正则表达式中? 例如,给出实体“@pizza-toppings" 包含浇头:

"topping": "<? input.text.extract('(?i)\.+(@pizza-toppings)(?-i)', 1) ?>"

因此,如果 @pizza-toppings 匹配 "onion",则 "(?i)\.+(@pizza-toppings)(?-i)" 将是 "(?i)\.+(onion)(?-i)"。如果它匹配 "cheese",那么它将是 "(?i)\.+(cheese)(?-i)",依此类推。

我一直在努力寻找解决方案,但到目前为止我什么也没找到。

未经测试,我注意到您将实体引用包含到字符串中。尝试做这样的事情:

"topping": "<? input.text.extract('(?i)\.+('+@pizza-toppings+')(?-i)', 1) ?>"

通常,当您使用模式实体时,这将匹配模式并使用实体定义中的硬编码值添加实体。但是如果你想要匹配的值,你应该按照文档建议的那样做(https://console.bluemix.net/docs/services/conversation/entities.html#creating-entities)并在节点响应部分添加一个创建上下文变量并将模式匹配位的值分配给该上下文的语句变量:

{
    "context" : {
        "topping": "<? @pizza-toppings.literal ?>"
    }
}

因此,如果您的披萨配料与洋葱匹配,则上下文变量配料的值为 "onion"。

例如,在此示例 https://github.com/IBM/watson-assistant-app-connect 中,有一个实体 @customerId 匹配客户 ID“[a-zA-Z\d]{15,18}”。

在 "Then check for:" 的对话节点 AppConnect 中,它检查 @customerId 实体。在 "Then set context:" 中,它将 $id 设置为 "",这是在上下文变量 $id 中设置与 @customerId 匹配的值的位置。