代码之家  ›  专栏  ›  技术社区  ›  lat94 Sadiq

Regex内部实体(IBM-WATSON)

  •  1
  • lat94 Sadiq  · 技术社区  · 7 年前

    是否可以将实体放在正则表达式中? 例如,给予实体“ @pizza-toppings"

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

    那么,如果 @pizza-toppings "(?i)\.+(@pizza-toppings)(?-i)" "(?i)\.+(onion)(?-i)" . 如果匹配的话 "cheese" "(?i)\.+(cheese)(?-i)" 等等等等。

    我一直在想办法,但到目前为止我什么也没找到。

    2 回复  |  直到 7 年前
        1
  •  2
  •   data_henrik    7 年前

    在我注意到您将实体引用包含到字符串中之后,没有进行测试。尝试这样做:

    "topping": "<? input.text.extract('(?i)\.+('+@pizza-toppings+')(?-i)', 1) ?>"
    
        2
  •  1
  •   DSeager    7 年前

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

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

    因此,如果您的比萨配料与洋葱相匹配,您的上下文变量topping的值将为“洋葱”。

    例如,在本示例中 https://github.com/IBM/watson-assistant-app-connect

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