快捷搜索: 王者荣耀 脱发

JSpeech Grammar Format 学习笔记

一、简介

JSpeech Grammer Format(JSGF), 是平台无关的用于语音识别的语法格式。语法用于确定语音识别器应该听什么并且描述用户可能想说什么。举个例子,JSGF描述了出去旅游场景,那么这个时候语义理解就只能理解这种场景,如果你一直在巴拉巴拉说去看某个电影,那真的只能是对牛弹琴了。

一个完整的语音对话过程可能是这样子的,JSGF常见的应用场景ASR和NLU对语义理解的规则。

二. 例子

通过将简单规则组合在一起,可以构建捕获用户所说内容的复杂语法。以下是带有完整标题和正文的语法示例。

5.1 例1,简单的命令和控制

本示例显示了使用两个基本语法定义了控制窗口的口头命令。同时,这里添加礼貌性使语音交互变得更加自然。

#JSGF V1.0; grammar com.acme.politeness; // Body public <startPolite> = (please | kindly | could you | oh mighty computer) *; public <endPolite> = [ please | thanks | thank you ];

上面定义的politeness语法开始和结束的礼貌规则,将在后面的对话定义中使用

#JSGF V1.0 ISO8859-1 en; grammar com.acme.commands; import <com.acme.politeness.startPolite>; import <com.acme.politeness.endPolite>; /** * Basic command. * @example please move the window * @example open a file */ public <basicCmd> = <startPolite> <command> <endPolite>; <command> = <action> <object>; <action> = /10/ open |/2/ close |/1/ delete |/1/ move; <object> = [the | a] (window | file | menu);

这里commands语法定义了一个public的命令basicCmd,由外部引入的startPolite和endPolite规则,和本地的三个private的command,action, object 规则组成。注意,action 规则中使用备选词汇和权重。因为basicCmd是public的,因此他可以被语义理解处理,即,下面的例子对话可以匹配此类规则

"open a window" "close file please" "oh mighty computer please open a menu"

5.2 例2,解析名字

下面的例子展示了如何使用完全限定名称。两个导入的语法都有定义color, 因此使用限定的或者完全限定的名字来区分。

#JSGF V1.0; grammar com.acme.selections; import <com.acme.pants.*>; import <com.sun.shirts.*>; <color> = <com.acme.pants.color> | <com.acme.shirts.color>; public <statement> = I like <color>;

最后规则中的color并不是模棱两可的,因为他使用了本地定义的color规则,而color由完全限制名字来定义,或者你可以使用限定名字写法如下:

<color> = <pants.color> | <shirts.color>;

5.3 例3, 文件注释

下面的例子将展示如何添加注释,分别有三种情况添加注释:语法生命添加注释,为导入规则添加注释,为规则定义添加注释。

#JSGF 1.0 ISO8559-1; /** * Define simple travel directives. * * @author Mary Contrary * @version 3.141beta */ grammar com.acme.travel; /** * Get a list of city names: <city>. */ import <com.acme.cities.*>; /** * A simple travel command * * @example go from sydney to tokyo to dublin * @example go from "san francisco" to bangkok */ public <travel> = go from <city> ( to <city> )+;
经验分享 程序员 微信小程序 职场和发展