如许多示例所示,您可以轻松地从响应中提取实体值,如下面的对话框所示:
沃森:好的!你想听什么样的音乐?
用户:Symphonic
Watson:好的,玩symphonic
当用户说'#34;我希望听到交响乐"而不仅仅是" Symphonic"时,您可以从Watson得到相同的回复,前提是:
意图#i_want_to_hear有例子:" Symphonic","我想听听Rock","我想听Jazz"
实体@genre具有价值@genre:symphonic
节点条件是@genre
节点输出文本为"好的!播放@ genre"
如果问题是关于自由文本(名称)而不是实体,我能否实现相同的稳健性?例如:
沃森:你叫什么名字?
用户:Anna
Watson:很高兴认识你,Anna
如果节点条件为真并且输出文本为&#34;很高兴见到你,输入文字&#34;,这不会对答案有效,例如&#34;我的名字是Anna&#34;。< / p>
我无法遵循上述@genre方法,因为我无法创建实体&#34; name&#34;每个可能的名称都有不同的值。
如果没有简单的解决方案,也许我可以在用户响应中使用最后一个字,因为它始终是以下之一:
安娜
我是安娜
我的名字是安娜
这是安娜
所以我的第二个问题是:如何从答案中提取最后一个单词以在输出文本和上下文中使用它?
由于
答案 0 :(得分:0)
您可以使用在字符串类型中定义的input.text
方法,使用regexp从.extract
中提取部分输入:
来自我们的doc:
<强> String.extract(String regexp, Integer groupIndex)
强>
自定义方法。此方法返回由输入正则表达式的指定组索引提取的字符串。以下系列显示了.extract方法如何工作的示例:
input.text是“Hello 123456”。
DialogNode:
"context" : {
"number_extract" : "<? input.text.extract('[\\d]+',0) ?>"
}
请注意,为了将\ d作为正则表达式处理,您必须在它之前插入另一个\来转义第二个。
结果:
"context" : {
"number_extract" : "123456"
}