Dialogflow - 如何处理数字识别中的空白
Dialogflow - How to handle blanks in number recognition
在我的 Dialogflow 中,我使用实体 @sys.number 来识别用户说出的 12 位数字。根据用户拼写数字的方式,它不会被识别为单个 12 位数字,但有时会被识别为两个数字,3 和 9、6 和 6 或其他任何数字。但是,Dialogflow 按预期识别“123 456 789 123”,这对我来说似乎是一种非常随机的行为。
如何让 Dialogflow 将任意 12 位数字识别为 12 位数字?
到目前为止我尝试过的:
将所需参数"number"设为列表,但这会使数字跳过零,因此“000111”将被识别为“111”,这不是预期的
使意图匹配任何数字,然后是@sys.any,它可以是任何字符串,并尝试将其与开头的数字连接起来。并没有真正起作用,因为我必须提供任何给定的可能性,将任何 12 位数字拆分为长度为 1 到 12 的前导数字,然后是数字和数字的任意组合。它也会首先接受字母
- 使意图匹配最多 12 个单个数字。这是有问题的,因为如果这些数字是直接连续的,它不会提供任何信息。另外,提供足够的训练数据来识别这个是非常繁琐的。
Google 为用户输入数字时的每次停顿添加空格,这就是为什么您的数字有时会出现随机空白的原因。
当我必须识别由 9 个字符(字母或数字)组成的产品代码时,我遇到了类似的问题。在我的方法中,我使用 @sys.any 参数作为输入。一旦用户输入了一个字符串,我就从输入中删除了所有的空格,这样我就能把这个句子拼成一个片段。之后我使用正则表达式提取代码。
const response = conv.parameters.input;
// remove whitespaces
const textWithoutWhitespaces = response.replace(/\s/g,"");
// Look into the string for a 12 digit number
const regExp = new RegExp(/\d{12}/g);
const result = regExp.test(textWithoutWhitespaces);
if(result === true) {
// continue
}
else {
// error
};
如果找不到输入,我会 conv.ask() 并要求用户重新输入。否则我会继续代码。
让你的话语以数字结尾有意义吗?
如果是这样,我可能会尝试确保将数字放在末尾,然后我们@sys.any 来捕捉他们说的任何内容。到那时,将所有数字连接在一起可能会奏效,但显然你必须处理他们说的不是有效数字的情况。
或者让用户说 "One hundred and twenty three billion, four hundred and fifty six million, seven hundred and eighty nine thousand, six hundred and sixty six." 简单易行 :-p
在我的 Dialogflow 中,我使用实体 @sys.number 来识别用户说出的 12 位数字。根据用户拼写数字的方式,它不会被识别为单个 12 位数字,但有时会被识别为两个数字,3 和 9、6 和 6 或其他任何数字。但是,Dialogflow 按预期识别“123 456 789 123”,这对我来说似乎是一种非常随机的行为。
如何让 Dialogflow 将任意 12 位数字识别为 12 位数字?
到目前为止我尝试过的:
将所需参数"number"设为列表,但这会使数字跳过零,因此“000111”将被识别为“111”,这不是预期的
使意图匹配任何数字,然后是@sys.any,它可以是任何字符串,并尝试将其与开头的数字连接起来。并没有真正起作用,因为我必须提供任何给定的可能性,将任何 12 位数字拆分为长度为 1 到 12 的前导数字,然后是数字和数字的任意组合。它也会首先接受字母
- 使意图匹配最多 12 个单个数字。这是有问题的,因为如果这些数字是直接连续的,它不会提供任何信息。另外,提供足够的训练数据来识别这个是非常繁琐的。
Google 为用户输入数字时的每次停顿添加空格,这就是为什么您的数字有时会出现随机空白的原因。
当我必须识别由 9 个字符(字母或数字)组成的产品代码时,我遇到了类似的问题。在我的方法中,我使用 @sys.any 参数作为输入。一旦用户输入了一个字符串,我就从输入中删除了所有的空格,这样我就能把这个句子拼成一个片段。之后我使用正则表达式提取代码。
const response = conv.parameters.input;
// remove whitespaces
const textWithoutWhitespaces = response.replace(/\s/g,"");
// Look into the string for a 12 digit number
const regExp = new RegExp(/\d{12}/g);
const result = regExp.test(textWithoutWhitespaces);
if(result === true) {
// continue
}
else {
// error
};
如果找不到输入,我会 conv.ask() 并要求用户重新输入。否则我会继续代码。
让你的话语以数字结尾有意义吗?
如果是这样,我可能会尝试确保将数字放在末尾,然后我们@sys.any 来捕捉他们说的任何内容。到那时,将所有数字连接在一起可能会奏效,但显然你必须处理他们说的不是有效数字的情况。
或者让用户说 "One hundred and twenty three billion, four hundred and fifty six million, seven hundred and eighty nine thousand, six hundred and sixty six." 简单易行 :-p