【问题标题】:Pull username from input text in Watson Conversation从 Watson Conversation 中的输入文本中提取用户名
【发布时间】:2017-09-19 21:12:38
【问题描述】:

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

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

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

问题是,当人们说“我的用户名是 janedoe12”时,我似乎无法解决 - 我仍在尝试退出“janedoe12”。我们不经常看到人们给我们用户名的其他方式(即没有人说“username janedoe12”或“my sn is janedoe12”),所以我们不太担心处理除此之外的案例。

这是我所拥有的:

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

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

【问题讨论】:

  • 试试extract('username\\s+is\\s+(.*)', 1)

标签: json regex watson-conversation watson


【解决方案1】:

很久以前我blogged about this

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

一旦检测到实体,就可以像这样直接引用输入。

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

对此进行扩展,因为您谈论的是用户名而不是人名。您将遇到与博客文章中提到的相同的问题。

那些存在。

  • 回答“我的名字是”
  • 拒绝透露姓名。
  • 问你为什么要这个名字。
  • 玩弄系统以获得笑话响应。

可能还有其他条件。

这里有两种方法可以解决它。

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

其次,有时简单地改写您与用户交谈的方式可以否定任何复杂的编码。如果我说“你的用户名是什么?”,有人可以如你所说的那样回应。

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

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

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

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

【讨论】:

    【解决方案2】:

    ('用户名\s+is\s+(.*)', 1)

    -来自 Wiktor Stribiżew

    【讨论】:

      猜你喜欢
      • 2018-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      • 1970-01-01
      • 1970-01-01
      • 2017-10-11
      • 1970-01-01
      相关资源
      最近更新 更多