首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有没有办法强制Google Speech api只返回单词作为响应?

有没有办法强制Google Speech api只返回单词作为响应?
EN

Stack Overflow用户
提问于 2017-03-14 19:30:11
回答 2查看 3.1K关注 0票数 18

我正在使用Googles这个api:

https://www.google.com/speech-api/v2/recognize?output=json&lang="+ language_code+"&key="My key“

用于语音识别,它工作得很好。

问题出在数字上,也就是说,如果我说one two three four,结果将是1234,如果我说one thousand two hundred thirty four,结果仍然是1234

另一个问题是,在其他语言中,德语中的单词elfeleven。如果你说elf,结果是11,而不是elf。

我知道我们无法控制api,但有没有什么参数或技巧可以添加到这个api中,以强制它只返回文字。

响应有时会有正确的结果,但并不总是如此。

这些是样例回答

1)当我说“一二三四”

代码语言:javascript
复制
{"result":[{"alternative":[{"transcript":"1234","confidence":0.47215959},{"transcript":"1 2 3 4","confidence":0.25},{"transcript":"one two three four","confidence":0.25},{"transcript":"1 2 34","confidence":0.33333334},{"transcript":"1 to 34","confidence":1}],"final":true}],"result_index":0}

2)当我说“1,234”时

代码语言:javascript
复制
{"result":[{"alternative":[{"transcript":"1234","confidence":0.94247383},{"transcript":"1.254","confidence":1},{"transcript":"1284","confidence":1},{"transcript":"1244","confidence":1},{"transcript":"1230 4","confidence":1}],"final":true}],"result_index":0}

我所做的一切。

检查结果是否为数字,然后将每个数字按空格拆分,并检查结果数组中是否存在相同的序列。例如,在这个例子中,结果1234变成了1 2 3 4,并将搜索结果数组中是否有类似的序列,然后将其转换为words.In 2,如果没有1 2 3 4,则将坚持使用原始结果。

这就是代码。

代码语言:javascript
复制
 String numberPattern = "[0-9]";
  Pattern r1 = Pattern.compile(numberPattern);
  Matcher m2 = r1.matcher(output);
  if (m2.find()) {
      char[] digits2 = output.toCharArray();
      String digit = "";
      for (char c: digits2) {
          digit += c + " ";
      }

      for (int i = 1; i < jsonArray2.length(); i++) {
          String value = jsonArray2.getJSONObject(i).getString("transcript");
          if (digit.trim().equals(value.trim())) {
              output = digit + " ";
          }
      }
  }

所以问题是,当我说“十三四八”时,这种方法会将13拆分为三,因此不是一个可靠的解决方案。

更新

我尝试过新的cloud vision api (https://cloud.google.com/speech/),它比v2好一点。one two three four的结果就是文字本身,我的变通方法也适用于它。但是当我说thirteen four eight的时候,它仍然是和v2一样的结果。

而且精灵在德语中还只有11岁。

我也尝试了speech_context,但也不起作用。

EN

回答 2

Stack Overflow用户

发布于 2017-03-15 21:03:42

看看这个question and answer

您可以给API "speech context“提示,如下所示:

代码语言:javascript
复制
"speech_context": {
  "phrases":["zero", "one", "two", ... "nine", "ten", "eleven", ... "twenty", "thirty,..., "ninety"]
 }

我想这也适用于其他语言,比如德语。

代码语言:javascript
复制
"speech_context": {
  "phrases":["eins", "zwei", "drei", ..., "elf", "zwölf" ... ]
 }
票数 2
EN

Stack Overflow用户

发布于 2017-03-25 19:14:36

您可能需要自己将数字(而不是数字)转换为单词。因为在大多数语言(例如英语、德语)中都有一些逻辑,所以你可以用算法的方法来做这件事。

请参阅How to convert number to words in java

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42784797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档