2016-11-19 48 views
-1

我一直在使用Microsoft Speech API(SAPI,5.3)为我的应用程序(Windows,显然,C++,Win8 SDK)添加语音识别支持,除了一些与加载语法有关的箍跳转文件工作得很好。SAPI规则枚举

但是,我无法弄清楚如何枚举从文件加载的语法中的规则(或者甚至可能)。显然,当您手动/动态地构建语法时,您自己正在创建规则。但是,没有出现是从文件加载的语法中枚举规则的一种方法。 IspRecoGrammar :: GetRule()似乎是我能够查找规则的最接近的东西,但它旨在用于检索单个已知规则(它需要规则名称或ID)。

目前我只是简单地解析XML并拔出规则名称,但这不是一个完全的解决方案;我需要支持XML 二进制语法配置文件,后者避开了我目前的解决方法。

任何有SAPI经验的人都知道我会怎样做到这一点?

+0

你试图在这里实现的更高层次的目标是什么? (AKA - 为什么你认为你需要列举SAPI规则?) –

+0

感谢您的回复,Eric。总之,我需要预先验证其他数据,以反对加载的语法的规则。这些其他数据通过名称引用规则,因此在加载其他数据时,我想验证数据引用的语法规则(名称)实际上是有效的。 – SBD

+0

除了前面提到的XML处理之外,我可以(并且已经)通过简单地不验证然后将规则添加到“已知集合”,因为它们是通过SAPI识别回调遇到的,但这不是一个非常强大的解决方案捕获数据错误。 – SBD

回答

0

看起来好像IspRecoGrammar::GetRule()仍然会做你所需要的。有一套已知的良好规则名称,当您加载其他数据时,如果规则名称不在已知好名称集合中,请使用IspRecoGrammar::GetRule()验证规则名称。如果有效,请将其添加到设置中。 (你也可以有一组已知的坏名字。)

+0

好的建议,我从没有想过从这个方向去看它。这肯定会解决手头的问题(预先存在的数据验证)。在向前思考的时候,可能会出现这样的情况:我们想要提供一个已知规则列表来创作所述引用数据,这将使我们回到规则枚举的正方形。我认为,就你所知,没有办法列举规则?我自己相当深的互联网搜索没有发现任何东西或任何尝试类似的东西。 – SBD

+0

@SBD我做了一些检查,大部分的语法编译工作都在SAPI接口的引擎端完成;这意味着在语法编译期间完成的任何规则枚举都是在内部事务中完成的,并且规则枚举中没有任何其他客户端接口。 –

+0

感谢您的关注。显然,在这一点上还没有明确的需要。也许未来的版本将提供设施(这似乎是一件容易揭露的事情)。现在,我将按照建议进行验证,并在我遇到它时跨过另一座桥。再次感谢。 – SBD