Java 有没有办法强迫谷歌语音api只返回单词作为响应?

Java 有没有办法强迫谷歌语音api只返回单词作为响应?,java,android,speech-recognition,google-speech-api,Java,Android,Speech Recognition,Google Speech Api,我正在使用谷歌的api:- "+ 语言代码+“&key=“我的钥匙” 用于语音识别,效果很好 问题在于数字,即如果我说1234,结果将是1234 如果我说1234,结果仍然是1234 另一个问题是,对于其他语言,即德语中的单词elf是eleven。如果你说elf,结果是11,而不是elf 我知道我们对api没有控制权,但是否有任何参数或黑客可以添加到此api,以迫使它只返回单词 响应有时有正确的结果,但并不总是正确的 这些是样本回答 1) 当我说“一二三四” 2) 当我说“一千二百三十四” 我所

我正在使用谷歌的api:-

"+ 语言代码+“&key=“我的钥匙”

用于语音识别,效果很好

问题在于数字,即如果我说
1234
,结果将是
1234
如果我说
1234
,结果仍然是
1234

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

我知道我们对api没有控制权,但是否有任何参数或黑客可以添加到此api,以迫使它只返回单词

响应有时有正确的结果,但并不总是正确的

这些是样本回答

1) 当我说“一二三四”

2) 当我说“一千二百三十四”

我所做的一切

检查结果是否为数字,然后按空格分割每个数字,并检查结果数组中是否有相同的序列。例如,在这种情况下,结果1234变为1 2 3 4,并将搜索结果数组中是否有类似的序列,然后将其转换为单词。在第二种情况下,没有1 2 3 4,因此将保留原始结果

这是代码

 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 + " ";
          }
      }
  }
String numberPattern=“[0-9]”;
模式r1=模式.compile(numberPattern);
匹配器m2=r1。匹配器(输出);
if(m2.find()){
char[]digits2=output.toCharArray();
字符串数字=”;
用于(字符c:digits2){
数字+=c+“”;
}
for(int i=1;i
所以问题是,当我说“十三四八”时,这个方法会把13分成一个三,因此不是一个可靠的解决方案

更新

我尝试了新的cloud vision api(),它比v2稍好一点。
1234
的结果是单词本身,我的变通方法也适用于这些单词。但是当我说十三四八时,结果还是和v2一样

而且elf在德语中仍然是11岁

还尝试了同样无效的
speech\u context

看看这个

您可以给API“语音上下文”提示,如下所示:

"speech_context": {
  "phrases":["zero", "one", "two", ... "nine", "ten", "eleven", ... "twenty", "thirty,..., "ninety"]
 }
我想这也适用于其他语言,比如德语

"speech_context": {
  "phrases":["eins", "zwei", "drei", ..., "elf", "zwölf" ... ]
 }

您可能需要自己将数字(而不是数字)转换为文字。由于大多数语言(如英语、德语)中都有一些逻辑,因此您可以使用算法方法来实现这一点


我没有使用云语音api,语音api v2没有此参数,但我仍然可以切换到云api。但是这并不实用,我不能给出所有这些数字作为提示。用户可以说出任何数字。我的应用程序中还有20种语言。哦,我没有注意到你正在使用v2。不确定它是否有用,但你不需要给出所有的数字,只需要给出唯一的单词。你不需要通过“二十一”,因为你已经分别通过了“二十”和“一”。这将使短语的数量保持在50以下,您最多可以发送500个短语。我在将数字转换为单词方面没有问题。我唯一的问题是我无法区分“1”“2”“3”“4”和1234,因为在这两种情况下,来自谷歌的结果都是1234,因此结果将转换为“壹仟贰佰叁拾四”。语音上下文以何种方式不起作用?如果有什么能帮助你达到你想要的结果,那就是语言环境。
"speech_context": {
  "phrases":["zero", "one", "two", ... "nine", "ten", "eleven", ... "twenty", "thirty,..., "ninety"]
 }
"speech_context": {
  "phrases":["eins", "zwei", "drei", ..., "elf", "zwölf" ... ]
 }