对话流 - 如何处理数字识别中的空白



在我的对话流中,我使用实体@sys.number来识别用户所说的12位数字。根据用户的拼写方式,它不会被识别为单个 12 位数字,但有时被识别为两个数字,3 和 9、6 和 6 或其他任何数字。但是,Dialogflow 将"123 456 789 123"识别为预期,这对我来说似乎是一个非常随机的行为。

如何使对话流将任何 12 位数字识别为 12 位数字?

到目前为止我尝试过:

  • 将必需的参数"number"设为列表,但这会使数字跳过零,以便"000111"将被识别为"111",这是不打算

  • 使 Intent 匹配任何数字,然后 @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来捕捉他们所说的任何内容。 在这一点上,将所有数字连接在一起可能会起作用,尽管您显然必须处理他们说的不是有效数字的情况。

或者让用户说"一千二百三十亿,四亿五千六百万,七十八万九千,六百六十六。 简单易行:-p

最新更新