繁体   English   中英

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来捕捉他们所说的内容。 到那时,将所有数字连接在一起可能是可行的,尽管您显然必须处理它们说的不是有效数字的情况。

或使用户说“ 123亿,456.65亿,79.89万,666.6”。 简单容易:-p

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM