用VB.NET编写的Winforms应用程序,我使用的是来自System.Speech.Recognition的SpeechRecognitionEngine。
我正在寻找构建Grammar的最佳方法。生成语法的方法传递一个数字,表示有效对象的计数,因此是一个有效的数字范围。
可能的命令:
我所做的是创建四个不同的Grammar对象并将它们加载到我的SpeechRecognitionEngine中。由于当前使用RecognitionResult的代码的工作方式,我的两个Grammar被命名为“页面”,其中两个命名为“数字”。我可以改变这些,它们就是这样进化的。实际上,我不确定是否将两个名称相同的语法加载到一个引擎中,而且很明显,它是工作的。
我的作品。然而,我希望看看是否有更好的方法。我试着看看能否将Choices与Choices结合起来,形成一种复合选择,但我似乎无法在我的头脑中做出正面或反面的选择,因此它并没有真正取得任何进展。
那么,我该如何改进这一点呢?我知道我可以将语法3和语法4结合在一起,但我还不想改变任何东西,因为我在解析RecognitionResult时试图保留语法名。我真的很想将我的所有选项组合成一个具有相同名称的单一语法,并在可能的情况下修改我的其他代码。
Private Sub LoadGrammars(count As Integer)
'// Open, Print and Save each must be followed by a number in the range of 1 to count
Dim gb As New GrammarBuilder()
gb.Append(New Choices("Open", "Print", "Save"))
Dim numChoices As New Choices '// create Choices with each number in the range
Dim y() As String = Enumerable.Range(1, count).Select(Function(t) t.ToString()).ToArray()
numChoices.Add(y)
gb.Append(numChoices)
Dim g As New Grammar(gb)
g.Name = "Numbers"
'// Page must be followed by Up or Down
Dim gb2 As New GrammarBuilder()
gb2.Append("Page")
gb2.Append(New Choices("Up", "Down"))
Dim g2 As New Grammar(gb2)
g2.Name = "Pages"
Dim gb3 As New GrammarBuilder()
gb3.Append("Prior")
Dim g3 As New Grammar(gb3)
g3.Name = "Numbers"
Dim gb4 As New GrammarBuilder()
gb4.Append(New Choices("Bottom", "Top"))
Dim g4 As New Grammar(gb4)
g4.Name = "Pages"
_engine.LoadGrammar(g)
_engine.LoadGrammar(g2)
_engine.LoadGrammar(g3)
_engine.LoadGrammar(g4)
End Sub发布于 2014-03-21 17:17:39
您可以通过遍历中间的Choices对象来嵌套GrammarBuilder对象。
Choices对象具有一个接受GrammarBuilders数组的构造函数,而GramarBuilder对象有一个接受Choices对象的构造函数。您可能希望使用SemanticResultKeys和SemanticValues,这样您就可以知道实际说了什么(我不想说明)。
我不是VB.net专家,所以语法可能不在这里;但是看起来如下所示:
Dim numChoices As New Choices '// create Choices with each number in the range
Dim y() As String = Enumerable.Range(1, count).Select(Function(t) t.ToString()).ToArray()
numChoices.Add(y)
gb.Append(numChoices)
Dim g As New Grammar(gb)
g.Name = "Numbers"
'// Page must be followed by Up or Down
Dim gb2 As New GrammarBuilder()
gb2.Append("Page")
gb2.Append(New Choices("Up", "Down"))
Dim gb3 As New GrammarBuilder()
gb3.Append("Prior")
Dim gb4 As New GrammarBuilder()
gb4.Append(New Choices("Bottom", "Top"))
Dim gbArray() as GrammarBuilder(4) = {gb1, gb2, gb3, gb4};
Dim g as new Grammar(new GrammarBuilder(new Choices(gbArray)));
g.Name = "All"
_engine.LoadGrammar(g);https://stackoverflow.com/questions/22542578
复制相似问题