具有基于自定义SRGS的语法的自由格式文本

时间:2011-11-04 07:47:54

标签: .net grammar speech-recognition context-free-grammar sapi

我正在尝试开发基于语音的应用程序,该应用程序将接受用户输入作为语音并根据输入执行某些操作。这是我第一次尝试这项技术,我正在开发它。

我使用dotnet 4附带的Microsoft SAPI来识别语音。到目前为止,我已经了解了它支持的两种模式。

  

语音识别(SR)有两种操作模式:

     
      
  • 听写模式 - 一种不受约束的自由形式的演讲   使用内置语法的解释模式   特定语言的识别器。这是默认识别器。

  •   
  • 语法模式 - 将口语单词与一个或多个特定的无上下文语法(CFG)进行匹配。 CFG是定义a的结构   具体的单词集,以及这些单词的组合即可   用过的。在基本术语中,CFG定义了有效的句子   SR。语法必须以应用程序的形式提供   预编译的语法文件或在运行时以W3C的形式提供   语音识别语法规范(SRGS)标记或更早   CFG规范。 Windows SDK包含一个语法编译器:   gc.exe。

  •   

基本上,无论我用语法指定什么单词,引擎都只能识别那些。但我也希望包含一些自由格式文本和结构化语法。一个例子可以是人的名字。如果我想从语音中捕获名称,我需要在语法中指定该名称,但如果应用程序对任何人开放都不可能。

有没有办法可以提取一些不是语法一部分的文本?

如何让系统识别句子,例如“我的名字是加里,我25岁”。这个名字绝对是什么,我如何在我的语法中定义它?

2 个答案:

答案 0 :(得分:3)

您可以将听写模式与语法模式混合,请参阅MSDN中的此示例:

http://msdn.microsoft.com/en-us/library/ms723634(v=vs.85).aspx

<GRAMMAR>
    <!-- command to handle first and last names with semantic properties -->
    <!-- By using semantic properties, the application can ignore all of
        the text returned, except for the text associated with the dictation
        tags' semantic properties "PID_FirstName" and "PID_LastName" -->
    <RULE ID="SubmitName" TOPLEVEL="ACTIVE">
        <P>
            my first name is
            <!-- Note the implicit maximum is only one word -->
            <DICTATION PROPID="PID_FirstName"/>
            and my last name is
            <!-- Note the implicit maximum is two words -->
            <DICTATION PROPID="PID_LastName" MAX="2"/>
        </P>
    </RULE>
</GRAMMAR>

答案 1 :(得分:1)

看看GARBAGE special rule。我不确定你会如何检索与垃圾部分匹配的单词,但我很确定有办法。

如果你弄清楚我是否对这个问题感兴趣,请告诉我:)。