作为我们的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 返回。有人对如何设计这个有任何建议吗?
答案 0 :(得分:1)
值得庆幸的是,事情发生了一些变化,让您更轻松。有一个名为@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