逐个字母拼写

Spell letter by letter

我正在构建一个 Android 应用程序,它将通过使用 语音转文本 来获取用户输入。

用户将输入代码,如 'AA001'、'BC022'、'AD011' 等。我已经能够打开语音识别 Activity 并从中获取用户输入(下面的片段,来自 here),但它 returns 个单词。

我需要一种设置方法,以便只获取用户实际输入的字母和数字。

private void promptSpeechInput() {
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
            RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
    intent.putExtra(RecognizerIntent.EXTRA_PROMPT,
            getString(R.string.speech_prompt));
    try {
        startActivityForResult(intent, REQ_CODE_SPEECH_INPUT);
    } catch (ActivityNotFoundException a) {
        Toast.makeText(getApplicationContext(),
                getString(R.string.speech_not_supported),
                Toast.LENGTH_SHORT).show();
    }
}

你不能用 Google 引擎做到这一点。您可以使用 CMUSphinx 等其他引擎来实现。在那里你可以指定一个语法来只识别字母和数字,语法应该是这样的:

#JSGF V1.0;
grammar alphadigits;
public <letters> = (one | two | three | four | ... | a. | b. | c. | d. ... | z.)*;

这样的语法 return 你只会比 Google 本地 API.

更准确的数字

为了更好的识别准确性,还建议在语法中添加字母组合而不是字母。例如,如果您想要 "aa",则将 "aa" 添加到语法中。字母太短,无法可靠识别。