在将用户话语转发到 LUIS 之前预处理机器人中的用户话语

Pre-process user utterances in bot before forwarding them to LUIS

我用德语构建了一个应该理解瑞士数字格式的机器人:

遗憾的是,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 之前修改它。