在将用户话语转发到 LUIS 之前预处理机器人中的用户话语
Pre-process user utterances in bot before forwarding them to LUIS
我用德语构建了一个应该理解瑞士数字格式的机器人:
- 1Mio 的英文格式:1,000,000
- 1Mio 的德语格式:1.000.000
- 1Mio 的瑞士格式:1'000'000
遗憾的是,LUIS 没有瑞士文化,因此无法正确理解带有内置数字实体的 1'000'000。所以我的想法是在将用户话语转发给 LUIS 之前对其进行预处理,如下所示:如果我看到一个瑞士千位分隔符(即 '),左侧至少有一位数字,右侧有 3 位数字,则删除瑞士千位在将其转发给 LUIS 之前从话语中分离出分隔符...然后 LUIS 将正确识别它,因为数字已清除千位分隔符。
有人知道如何在机器人中执行此操作吗?或者更好的中间件?我是 BotFramework 的新手,几乎迷路了。
谢谢!
是的,您可以在将 activity 传递给 LUIS 之前对其进行修改。您只需要想出合适的正则表达式来查找和替换 '.例如,这是一个机器人,我将其作为 onTurn 函数的一部分进行更新,使用我认为适合您的正则表达式替换进行更新(在 nodejs 中):
async onTurn(context) {
if (context.activity.type === ActivityTypes.Message) {
context.activity.text = context.activity.text.replace(/(?<=\d{1})'(?=\d{3})/g,'')
const dc = await this.dialogs.createContext(context);
const results = await this.luisRecognizer.recognize(context);
这里的正则表达式正在寻找前面有一位数字的 ' 字符(如果它不止一个就可以,比如在数字中间),然后是 3 位数字。实际上,您可能只需要 /'(?=\d{3})/g
就可以了,这是一个 ' 后跟三位数字。
如果您使用 C# 或不同的回合处理程序,同样适用,您只需在将 activity.text 传递给 LUIS 之前修改它。
我用德语构建了一个应该理解瑞士数字格式的机器人:
- 1Mio 的英文格式:1,000,000
- 1Mio 的德语格式:1.000.000
- 1Mio 的瑞士格式:1'000'000
遗憾的是,LUIS 没有瑞士文化,因此无法正确理解带有内置数字实体的 1'000'000。所以我的想法是在将用户话语转发给 LUIS 之前对其进行预处理,如下所示:如果我看到一个瑞士千位分隔符(即 '),左侧至少有一位数字,右侧有 3 位数字,则删除瑞士千位在将其转发给 LUIS 之前从话语中分离出分隔符...然后 LUIS 将正确识别它,因为数字已清除千位分隔符。
有人知道如何在机器人中执行此操作吗?或者更好的中间件?我是 BotFramework 的新手,几乎迷路了。
谢谢!
是的,您可以在将 activity 传递给 LUIS 之前对其进行修改。您只需要想出合适的正则表达式来查找和替换 '.例如,这是一个机器人,我将其作为 onTurn 函数的一部分进行更新,使用我认为适合您的正则表达式替换进行更新(在 nodejs 中):
async onTurn(context) {
if (context.activity.type === ActivityTypes.Message) {
context.activity.text = context.activity.text.replace(/(?<=\d{1})'(?=\d{3})/g,'')
const dc = await this.dialogs.createContext(context);
const results = await this.luisRecognizer.recognize(context);
这里的正则表达式正在寻找前面有一位数字的 ' 字符(如果它不止一个就可以,比如在数字中间),然后是 3 位数字。实际上,您可能只需要 /'(?=\d{3})/g
就可以了,这是一个 ' 后跟三位数字。
如果您使用 C# 或不同的回合处理程序,同样适用,您只需在将 activity.text 传递给 LUIS 之前修改它。