Есть ли способ заставить Google Speech api возвращать только слова в качестве ответа?

Я использую Googles для этого api: –

Https://www.google.com/speech-api/v2/recognize?output=json&lang= "+ language_code +" & key = "Мой ключ"

Для распознавания речи, и он работает очень хорошо.

Проблема связана с числами, т. Е. Если я скажу, что one two three four результат будет 1234 и если я скажу one thousand two hundred thirty four результат будет равен 1234 .

Другая проблема заключается в том, что с другими языками, то есть elf на немецком языке является eleven . Если вы говорите, что elf составляет 11 , то вместо эльфа.

Я знаю, что у нас нет контроля над api, но есть ли какие-либо параметры или хаки, которые мы можем добавить к этому api, чтобы заставить его возвращать только слова.

Ответ несколько раз имеет правильный результат, но не всегда.

Это пример ответов

1) Когда я говорю «один два три четыре»,

 {"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) Когда я говорю «тысяча двести тридцать четыре»,

 {"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 и будет искать, если в массиве результатов есть аналогичная последовательность, а затем преобразовать его в слова. Во втором случае нет 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 + " "; } } } 

Поэтому проблема заключается в том, что я говорю «тринадцать четыре восемь», этот метод разделит 13 на три и, следовательно, не будет надежным решением.

Обновить

Я попробовал новое облачное зрение api ( https://cloud.google.com/speech/ ), и это немного лучше, чем v2. Результат для one two three four – это слова, для которых работает мой обход. Но когда я говорю thirteen four eight это все тот же результат, что и в v2.

А также эльфим по-прежнему 11 на немецком языке.

Также попробовал speech_context который тоже не работал.

    Взгляните на этот вопрос и ответ .

    Вы можете дать подсказки API «речевой контекст», например:

     "speech_context": { "phrases":["zero", "one", "two", ... "nine", "ten", "eleven", ... "twenty", "thirty,..., "ninety"] } 

    Я предполагаю, что это может работать и на других языках, например на немецком.

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

    Возможно, вам придется преобразовать числа (а не цифры) в слова самостоятельно. Поскольку на большинстве языков существует некоторая логика (например, английский, немецкий), вы можете сделать это с помощью алгоритмического подхода.

    См. Раздел Как преобразовать число в слова в java