将多个语音.识别.语法合并为1



使用VB.NET编写的Winforms应用程序。我使用System.Speech.Recognition中的SpeechRecognitionEngine

我正在寻找最好的方法来构建Grammar。生成语法的方法传递了一个数字,表示有效对象的计数,从而表示有效的数字范围。

可能的命令:

  • 顶部
  • 页面(上|下)
  • [打开|保存|打印]#(其中数字在我的有效范围内)。

我所做的是创建四个不同的Grammar对象并将它们加载到SpeechRecognitionEngine中。由于当前使用RecognitionResult的代码的工作方式,我的两个Grammar被命名为"Pages",其中两个被命名为"Numbers"。我可以改变它们,它们就是这样进化的。实际上,我不确定是否将两个同名的语法加载到引擎中会工作,显然它可以。

What I have works然而,我希望看看是否有一个更好的方法。我试着看看我是否能把ChoicesChoices结合起来,做出一种复合选择,但我似乎无法在脑海中做出正面或负面的选择,所以没有真正取得任何进展。

那么,我该如何改进呢?我知道我可以将语法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

可以通过中间的GrammarBuilder对象嵌套Choices对象。

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);

相关内容

  • 没有找到相关文章

最新更新