【发布时间】:2014-03-22 01:18:27
【问题描述】:
用 VB.NET 编写的 Winforms 应用程序。我正在使用来自System.Speech.Recognition 的SpeechRecognitionEngine。
我正在寻找构建Grammar 的最佳方法。我的生成语法的方法传递了一个数字,表示有效对象的计数,因此是有效的数字范围。
可能的命令:
- 底部
- 顶部
- 之前
- 页面[上|下]
- [打开|保存|打印] #(其中数字在我的有效范围内)。
我所做的是创建了四个不同的Grammar 对象并将它们加载到我的SpeechRecognitionEngine 中。由于当前使用RecognitionResult 的代码的工作方式,我的两个Grammars 被命名为“Pages”,其中两个被命名为“Numbers”。我可以改变这些,它们就是这样进化的。我实际上不确定将两个具有相同名称的语法加载到引擎中是否可以工作,并且显然可以。
我有什么作品。不过我希望看看是否有更好的方法。我试图看看我是否可以将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
【问题讨论】:
标签: vb.net .net-4.5 speech-recognition grammar sapi