在Android上限制语音识别结果

我正在创建一个应用程序,允许人们说话并在几个选项(字符串)之间进行选择。 我在使用Android语音识别器符合我的想法时遇到了一些问题。

有没有办法只将“有效”参数传递给SpeechRecognizer并让它在“最佳”匹配之间进行选择?

我不需要代码,我只需要一些指导,因为我的google-fu似乎今天失败了。

我们在http://kaljurand.github.io/Grammars/上描述了我们对此问题的解决方案,例如,请查看本页链接的论文:

Kaarel Kaljurand,TanelAlumäe。 基于语音识别的用户界面中的受控自然语言(CNL 2012)

基本思路是:

  1. 不要使用谷歌的语音识别器,因为你不能(目前)将语言模型(例如语法)传递给它(在我们的例子中,它也不支持我们想要使用的输入语言);
  2. 所以你需要实现自己的语音识别器(例如基于Sphinx )并使其接受语法作为输入的一部分;
  3. 实现语法。 如果它是一个简单的可接受短语列表,那么JSGF将作为语法描述语言,对于更复杂的语法,我推荐Grammatical Framework (你可以自动编译成JSGF或有限状态自动机);
  4. 通过添加将语法传递给识别器的方法来实现扩展RecognizerIntent API的Android应用程序。 你可以在Kõnele上找到它。

在你的情况下,这一切可能都是一种矫枉过正。 谷歌搜索结果的后处理(正如@gregm建议的那样)肯定更容易实现。 但是,如果您想扩展到更复杂和/或多语言的语言模型,那么我们的方法肯定提供了所需的模块化和表达能力。

不,没有这样的参数,谷歌语音识别不够灵活。 您可以使用CMUSphinx等外部语音识别工具包