Java 有没有办法强迫谷歌语音api只返回单词作为响应?
我正在使用谷歌的api:- "+ 语言代码+“&key=“我的钥匙” 用于语音识别,效果很好 问题在于数字,即如果我说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) 当我说“一千二百三十四” 我所
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" ... ]
}