【问题标题】:SAPI rule enumerationSAPI 规则枚举
【发布时间】:2016-11-19 09:08:10
【问题描述】:

我一直在使用 Microsoft Speech API(SAPI,5.3)为我的应用程序(显然是 Windows,C++,Win8 SDK)添加语音识别支持,除了一些与加载语法文件有关的跳跃之外,它正在工作很好。

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

目前我只是自己解析 XML 并提取规则名称,但这并不是一个完整的解决方案;我需要同时支持 XML 二进制语法配置文件,后者避开了我目前的解决方法。

任何有 SAPI 经验的人都知道我可以如何做到这一点?

【问题讨论】:

  • 您在这里试图实现的更高层次的目标是什么? (AKA - 为什么你认为你需要枚举 SAPI 规则?)
  • 感谢您的回复,埃里克。简而言之,我需要根据加载的语法规则预先验证我拥有的其他数据。此其他数据按名称引用规则,因此在加载此其他数据时,我想验证数据引用的语法规则(名称)实际上是否有效。
  • 除了前面提到的 XML 处理之外,我可以(并且已经)通过简单地不验证然后将规则添加到通过 SAPI 识别回调遇到的“已知集”来获得,但是对于捕获数据错误,这不是一个非常强大的解决方案。

标签: c++ sapi


【解决方案1】:

似乎IspRecoGrammar::GetRule() 仍然可以满足您的需求。拥有一组已知良好的规则名称,当您加载其他数据时,如果规则名称不在已知的良好名称集中,请使用IspRecoGrammar::GetRule() 验证规则名称。如果有效,则将其添加到集合中。 (您也可能有一组已知的坏名字。)

【讨论】:

  • 好建议,我没有想到要从那个方向去做。这肯定会解决手头的问题(预先存在的数据验证)。展望未来,我们可能希望提供一个已知规则列表来编写所述引用数据,这将使我们回到规则枚举的第一方位。我想,据你所知,没有办法列举规则?我自己相当深入的互联网搜索没有发现任何东西或任何人尝试类似的东西。
  • @SBD 做了一些检查,大部分语法编译工作都是在SAPI接口的引擎端完成的;这意味着在语法编译期间完成的任何规则枚举都是在内部完成的,并且没有任何其他客户端接口用于规则枚举。
  • 感谢您的调查。显然,到目前为止还没有明确的需求。也许未来的版本会提供这种设施(这似乎很容易公开)。现在,我将按照建议进行验证,并在我到达时越过另一座桥。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2017-06-21
  • 1970-01-01
  • 2011-05-07
  • 2022-07-13
  • 2015-05-02
  • 2017-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多