我用德语构建了一个机器人,该机器人应该了解瑞士的数字格式:
不幸的是,LUIS没有瑞士文化,因此无法正确理解带有内置数字实体的1'000'000。因此,我的想法是对用户的话语进行预处理,然后将其转发给LUIS,如下所示:如果我看到一个瑞士千位分隔符(即'),其左侧至少一位数字,右侧至少3位数字,则删除该瑞士数字将发话语中的分隔符转发给LUIS ...,然后LUIS将正确识别它,因为清除了数以千计的分隔符。
有人知道如何在bot中执行此操作吗?还是在中间件中更好?我是BotFramework的新手,几乎迷路了。
谢谢!
答案 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之前对其进行修改。