1

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

  • 华生:好的!你想听什么样的音乐?

  • 用户:交响乐

  • Watson:好的,演奏交响乐

当用户说“我想听交响乐”而不只是“交响乐”时,您可以从 Watson 获得相同的响应,前提是:

  • Intent #i_want_to_hear 有示例:“交响乐”、“我想听摇滚”、“我想听爵士乐”

  • 实体@genre 具有值@genre:symphonic

  • 节点条件为@genre

  • 节点输出文本是“OK!播放@genre”

如果问题是关于自由文本(名称)而不是实体,我能否实现同样的稳健性?例如:

  • 华生:你叫什么名字?

  • 用户:安娜

  • 华生:很高兴认识你,安娜

如果节点条件为真并且输出文本为“很高兴认识你,input_text”,则这不适用于诸如“我的名字是 Anna”之类的答案。

我无法遵循上述@genre 方法,因为我无法为每个可能的名称创建具有不同值的实体“名称”。

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

  • 安娜

  • 我是安娜

  • 我的名字是安娜

  • 是安娜

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

谢谢

4

1 回答 1

0

input.text您可以使用.extract字符串类型中定义的方法从正则表达式中提取部分输入:

来自我们的文档

String.extract(String regexp, Integer groupIndex)

自定义方法。该方法返回由输入正则表达式的指定组索引提取的字符串。以下系列展示了 .extract 方法如何工作的示例:

input.text 是“Hello 123456”。

对话节点:

"context" : {
    "number_extract" : "<? input.text.extract('[\\d]+',0) ?>"
}

请注意,为了将 \d 处理为正则表达式,您必须在它之前插入另一个 \,以转义第二个 。

结果:

"context" : {
    "number_extract" : "123456"
}
于 2016-11-08T18:14:18.617 回答