我正在学习视觉基础,我正在修补语音识别。我试图让一个有多个规则的语法工作,但没有成功。我创建了一个包含3条规则的语法,[搜索,颜色和根]根规则只包含其他2条规则中的SrgsRuleRef
个。
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。”
有什么想法吗?
答案 0 :(得分:0)
将规则添加到其他规则时,使用规则.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
...
希望这有助于将来。