【问题标题】:Regex inside Entity (IBM-WATSON)实体内部的正则表达式 (IBM-WATSON)
【发布时间】:2018-11-13 12:47:08
【问题描述】:

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

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

所以,如果@pizza-toppings 匹配“洋葱”,那么"(?i)\.+(@pizza-toppings)(?-i)" 将是"(?i)\.+(onion)(?-i)"。如果匹配"cheese",那么它将是"(?i)\.+(cheese)(?-i)"等等。

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

【问题讨论】:

  • 您的意思是在对话节点中评估的正则表达式中吗?你能添加更多关于你想要完成的细节吗?
  • 是的,我在一个对话节点中。字符串"toppings" 将被分配与提取的返回
  • 而且它是只有 1 顶。不是浇头。我编辑了问题并进行了更改。
  • 因此,如果它与实体@pizza-toppings 内的顶部匹配,则该值将分配给字符串"topping"
  • 为什么要这么做?也许有不同的方式...你可以先尝试组合模式字符串,然后使用带有字符串作为参数的变量吗?

标签: regex ibm-cloud chatbot watson-conversation spring-el


【解决方案1】:

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

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

【讨论】:

  • 您发送给我的 sn-p 中缺少某些内容。在这里:('+@pizza-toppings'+')。我尝试正确更改它,但没有成功运行。
【解决方案2】:

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

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

因此,如果您的披萨浇头与洋葱匹配,则您的上下文变量浇头将具有值“洋葱”。

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

在“然后检查:”的对话节点 AppConnect 中,它检查 @customerId 实体。在“然后设置上下文:”中,它将 $id 设置为“”,这是在上下文变量 $id 中设置与 @customerId 匹配的值的位置。

【讨论】:

  • 是的,这会解决它。这就是我设法完成它的方法。但是,我认为我要求的解决方案还不可用,对吧? t
猜你喜欢
  • 2019-02-22
  • 2019-02-24
  • 1970-01-01
  • 1970-01-01
  • 2017-01-29
  • 2021-03-21
  • 1970-01-01
  • 2013-08-26
  • 2019-01-16
相关资源
最近更新 更多