如何在SrgsGrammar中使用多个SrgsRules?

逻辑8

我正在学习视觉基础知识,并且正在研究语音识别。我正在尝试让多个规则一起工作的语法,但没有成功。我用3个规则([搜索,颜色和根])创建了一个语法,根规则仅对SrgsRuleRef其他2个规则中的每一个都包含s。

    Private Sub setColors()
        reco.UnloadAllGrammars()

        Dim gram As New Recognition.SrgsGrammar.SrgsDocument

        Dim searchRule As New Recognition.SrgsGrammar.SrgsRule("Search")
        Dim searchRef As New Recognition.SrgsGrammar.SrgsRuleRef(searchRule)
        searchRule.Add(New Recognition.SrgsGrammar.SrgsOneOf("search", "serch"))
        searchRule.Add(Recognition.SrgsGrammar.SrgsRuleRef.Dictation)
        searchRule.Scope = Recognition.SrgsGrammar.SrgsRuleScope.Public

        Dim colorRule As New Recognition.SrgsGrammar.SrgsRule("color")
        Dim colorRef As New Recognition.SrgsGrammar.SrgsRuleRef(colorRule)
        Dim colorList As New Recognition.SrgsGrammar.SrgsOneOf("red", "green", "blue")
        colorRule.Add(colorList)
        colorRule.Scope = Recognition.SrgsGrammar.SrgsRuleScope.Public

        Dim rootRule As New Recognition.SrgsGrammar.SrgsRule("root")
        rootRule.Scope = Recognition.SrgsGrammar.SrgsRuleScope.Public
        rootRule.Add(searchRef)
        rootRule.Add(colorRef)

        gram.Rules.Add(rootRule)
        gram.Rules.Add(colorRule)
        gram.Rules.Add(searchRule)

        gram.Root = rootRule

        reco.LoadGrammar(New Recognition.Grammar(gram))
    End Sub

如果我将“ searchRule”或“ colorRule”设置为语法的根,则无论哪个设置都可以工作-所以我知道规则是独立运行的-当在“ rootRule”中时,它们只是没有响应。 ”

有任何想法吗?

逻辑8

我终于想出了答案:

将规则添加到另一个规则时,.Add不能使用规则,但是可以使用规则.Elements.Add

此外,仅添加规则参考还不完整(至少在我看来是这样)。我必须先将引用转换为项目,然后再添加它。

最后,我将两个规则/项目SrgsOneOf添加到,然后将OneOf添加到规则。

这是问题中的代码应如何正常工作的样子:

    ...

    Dim rootRule As New Recognition.SrgsGrammar.SrgsRule("root")
    rootRule.Scope = Recognition.SrgsGrammar.SrgsRuleScope.Public

    Dim colorItem As New Recognition.SrgsGrammar.SrgsItem(colorRef) ' <--- '
    Dim searchItem As New Recognition.SrgsGrammar.SrgsItem(searchRef) ' <--- '

    Dim opts As New Recognition.SrgsGrammar.SrgsOneOf(colorItem, searchItem) ' <--- '

    rootRule.Elements.Add(opts) ' <--- '

    gram.Rules.Add(rootRule)
    gram.Rules.Add(colorRule)
    gram.Rules.Add(searchRule)

    gram.Root = rootRule

    ...

希望这对以后的人有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章