在Watson Conversation

时间:2017-09-19 21:12:38

标签: json regex watson-conversation watson

作为我们的Watson Conversation流程的一部分,我们有一个节点要求我们将用户名放入上下文变量中。

大多数人只是给我们他们的用户名(janedoe12),使用此代码处理得很好。

{
  "context": {
    "username": "<?input_text?>"
  },
  "output": {
    "text": {
      "values": [
        "Hi $username!"
      ]
    }
  }
}

问题是当人们说“我的用户名是janedoe12”时,我似乎无法解决 - 我仍然试图拔出'janedoe12'。我们还没有经常看到人们给我们用户名的许多其他方式(即没有人说“用户名janedoe12”或“我的sn是janedoe12”),所以除了这个之外我们并不太担心处理案例。

这就是我所拥有的:

{
  "context": {
    "username": "<?input.text.extract('(?<=username is ).*')?>"
  },
  "output": {
    "text": {
      "values": [
        "Hi $username!"
      ]
    }
  }
}

我觉得问题可能是我使用了错误的RegEx风格,但我不太清楚如何从这里开始。我可以很好地使用此节点,但它会将 $ username 作为 null 返回。有人对如何设计这个有任何建议吗?

2 个答案:

答案 0 :(得分:1)

很久以前我blogged about this

值得庆幸的是,事情发生了一些变化,让您更轻松。有一个名为@sys-person的BETA系统实体。它可以拿起一个人的名字。

一旦检测到权利,您就可以直接引用输入。

"username": "<? @sys-person ?>"

要扩展这一点,因为您正在谈论的是用户名而不是人名。您将遇到与博文中提到的相同的问题。

那些存在。

  • 回答“我的名字是”
  • 拒绝透露姓名。
  • 问你为什么要这个名字。
  • 使用系统获取笑话回复。

可能还有其他条件。

以下是两种接近它的方法。

首先,如果他们必须登录与聊天机器人交谈,您可以将应用程序层移交给用户名对话。这意味着您不需要询问此人,它将来自有效区域。

其次,有时简单地重写你如何与用户说话可以否定任何复杂的编码。如果我说“你的用户名是什么?”,有人可以按你提到的那样回复。

但是,如果我说“请输入您的6位数用户ID”,那么人们更有可能只输入他们的ID。

此时您可以使用以下方法进行扫描。

"username": "<? input.text.extract('^[A-Za-z0-9_]{6}') ?>"

如果您未检测到用户ID,则可以提示他们输入正确的用户ID。

答案 1 :(得分:0)

('username \ s + is \ s +(。*)',1)

- 来自WiktorStribiżew