如何从用户输入中提取自由文本标记

时间:2016-09-13 10:00:39

标签: watson-conversation

如许多示例所示,您可以轻松地从响应中提取实体值,如下面的对话框所示:

  • 沃森:好的!你想听什么样的音乐?

  • 用户: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;每个可能的名称都有不同的值。

如果没有简单的解决方案,也许我可以在用户响应中使用最后一个字,因为它始终是以下之一:

  • 安娜

  • 我是安娜

  • 我的名字是安娜

  • 这是安娜

所以我的第二个问题是:如何从答案中提取最后一个单词以在输出文本和上下文中使用它?

由于

1 个答案:

答案 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"
}