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

问题描述 投票:3回答:2

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

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

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

  • 听写模式 - 一种无约束,自由形式的语音解释模式,它使用识别器为特定语言提供的内置语法。这是默认识别器。
  • 语法模式 - 将口语单词与一个或多个特定的无上下文语法(CFG)进行匹配。 CFG是一种定义一组特定单词的结构,以及可以使用的这些单词的组合。在基本术语中,CFG定义了对SR有效的句子。语法必须以预编译语法文件的形式由应用程序提供,或者在运行时以W3C语音识别语法规范(SRGS)标记或较旧的CFG规范的形式提供。 Windows SDK包含语法编译器:gc.exe。

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

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

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

.net grammar speech-recognition context-free-grammar sapi
2个回答
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
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.