SAPI规则枚举 我一直在使用微软语音API(SAPI,5.3)来向我的应用程序(Windows,很明显,C++,Win8SDK)增加语音识别支持,除了一些与加载语法文件有关的环跳,它工作得很好。

SAPI规则枚举 我一直在使用微软语音API(SAPI,5.3)来向我的应用程序(Windows,很明显,C++,Win8SDK)增加语音识别支持,除了一些与加载语法文件有关的环跳,它工作得很好。,c++,sapi,C++,Sapi,然而,我很难弄清楚如何从从文件加载的语法中枚举规则(或者如果可能的话)。显然,当您手动/动态构建语法时,您是在自己创建规则。然而,似乎没有办法从从文件加载的语法中枚举规则。ISPRecogram::GetRule()似乎是我能找到的最接近查询规则的东西,但它用于检索单个已知规则(它需要规则名称或id) 目前,我只是自己解析XML并提取规则名称,但这并不是一个完整的解决方案;我需要同时支持XML和二进制语法配置文件,后者避开了我目前的工作 任何有SAPI经验的人都知道我可以如何做到这一点?似乎is

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

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


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

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

你在这里想要达到的更高层次的目标是什么?(又名-为什么你认为你需要列举SAPI规则?)。简而言之,我需要根据加载语法的规则预先验证我拥有的其他数据。这些其他数据按名称引用规则,因此在加载这些其他数据时,我想验证这些数据引用的语法规则(名称)是否确实有效。除了前面提到的XML处理之外,我可以(并且已经)通过简单地不验证规则,然后将规则添加到“已知集”来获得因为它们是通过SAPI识别回调遇到的,但这不是一个捕获数据错误的非常健壮的解决方案。很好的建议,我没有想到从这个方向去做。这肯定会解决当前的问题(预先存在的数据验证)。展望未来,可能会出现这样的情况,例如,我们希望提供一个用于编写所述引用数据的已知规则列表,这将使我们在规则枚举方面回到原点。我想,据你所知,没有办法列举规则?我自己相当深入的互联网搜索没有发现任何东西或任何人尝试类似的东西。@SBD我做了一些检查,大部分语法编译工作都是在SAPI接口的引擎端完成的;这意味着在语法编译期间完成的任何规则枚举都是在内部事务中完成的,并且没有任何其他用于规则枚举的客户端接口。感谢您的关注。显然,到目前为止还没有明确的需求;也许未来的版本将提供该功能(这似乎是一件很容易公开的事情)。现在,我将按照建议进行验证,并在到达另一座桥时跨越另一座桥。再次感谢。