在Bot中对用户的话语进行预处理,然后再将其转发给LUIS

时间:2019-09-28 09:02:28

标签: botframework luis

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

  • 1Mio的英语格式:1,000,000
  • 1Mio的德语格式:1.000.000
  • 1Mio的瑞士格式:1'000'000

不幸的是,LUIS没有瑞士文化,因此无法正确理解带有内置数字实体的1'000'000。因此,我的想法是对用户的话语进行预处理,然后将其转发给LUIS,如下所示:如果我看到一个瑞士千位分隔符(即'),其左侧至少一位数字,右侧至少3位数字,则删除该瑞士数字将发话语中的分隔符转发给LUIS ...,然后LUIS将正确识别它,因为清除了数以千计的分隔符。

有人知道如何在bot中执行此操作吗?还是在中间件中更好?我是BotFramework的新手,几乎迷路了。

谢谢!

1 个答案:

答案 0 :(得分:2)

是的,您可以在将活动传递给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之前对其进行修改。