【问题标题】:Pre-process user utterances in bot before forwarding them to LUIS在将用户话语转发到 LUIS 之前在机器人中预处理用户话语
【发布时间】:2019-10-01 03:23:22
【问题描述】:

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

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

很遗憾,LUIS 没有瑞士文化,因此无法正确理解带有内置数字实体的 1'000'000。所以我的想法是在将用户话语转发到 LUIS 之前对其进行预处理,如下所示:如果我看到一个瑞士千位分隔符(即'),左边至少有一位数字,右边至少有 3 位数字,然后删除瑞士千位在将其转发到 LUIS 之前将其从话语中分离出来......然后 LUIS 将正确识别它,因为数字已清除千位分隔符。

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

谢谢!

【问题讨论】:

  • 你能列出你使用的SDK和版本吗?

标签: botframework azure-language-understanding


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2020-02-05
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多