GSL文件是VXML语音识别中用到的一种特定格式的文件。其格式如下:
1.GSL内部定义和外部定义.
内部定义是在VXML文档中完全用
GSL推荐的扩展名为.gsl.解释器也识别.grammar的扩展名.如果直接在VXML文档中定义grammar,一定要用CDATA括起来,否则VXML文档无法识别.如下:
...grammar header...
...grammar rule definitions...
]]>
外部GSL文件不应该包含CDATA部分,格式如下:
;GSL2.0
...grammar rule definitions...
2.GSL中的注释。
GSL中的注释可以出现在任何地方,注释用分号开始,分号后的内容将会被全部忽略.例如:
; this is a comment
RuleName [rule expansion] ; this is a comment, after a non-comment
3.GSL中的保留字.
AND-n, OR-n, OP-n, KC-n, PC-n 以上是GSL的保留字,不能够将它们定义为规则的名字.n是个整数.
4.GSL的头部声明.
GSL文件可迟盯以用一个self-identifying header开始,来说明GSL grammar的版本。可以不写,要是有必须用
;GSL2.0
开头。ABNF和XML语法都限制一个grammer元素只能识别语音输入和DTMF中的一种,而不允许一个grammer同时包括语音输入和DTMF。GSL文件没有这个限制,任何的GSL语法都可以在同一个grammar元素,甚至同一个识别规则中,同时包括DTMF和语音输入。XML默码哪和认使用的是第一个public 语法规则。
5.基本规则定义.
一个语法规则,包含两个部分。
第一规则的名字,这个名字可以在别的语法规则中引用。
第二 和该规则相关的可能的话音输入。
大多数的语法规则,包括一系列的用户可能说的词语,语法规则扩展部分,一般用[]括起来。例如:
city[南京 "北京" 呼和浩特]
该规则的名字是city,语法规则扩展部分是可选的名字。如果用户说,南京 ,北京或呼和浩特,该语法就匹配上了。语法名称是一个字符串,用来标示这个语法规则。同一个grammar中的语法规则名称,必须不一样,但是相同的语法规则名称可以用在不同的grammar中。外部定义语法,所有的语法规则必须有名字,内部语法定义中,如果只有一个语法规则,可以没有名字,否则都必须有名字。语音规则名称大小写敏感,下面的字符都可以用在语音规则名称中。
-(连字符) _(下划线) ‘(单引号) @(at符) .(句号)
特殊的语法规则。GSL有三个预定义的规则。
NULL 和
Trigger = [NULL 北京 上海]
Trigger = (VOID 北京 上海])
6.语法规则定义的作用域。
每一个规则都有一个作用域,private 或 public.public 修饰的语法规则对外部可见,外部引用可以用名称指定一个public 语法规则。private语法规则只在 包含它的grammar中可见,而且只能被在同一个grammar中的其他的语法规则引用。 把一个语法规则标示为public的
格式为:RuleName:public ruleExpansion
没有标示为public 的就是private的语法。如果一个grammar中,没有一个语法规则标示为public,那么所有的语法规则都是public的。如果有一个标示了public ,那么其余的都是private。GSL中的根语法规则是第一个标示为public的语法规则。如果都没标示,默认是第一个。下面的例子,定义了一个public 语法规则Snapper,和两个private语法规则,SnapperType和FishColors。根语法规则是Snapper。
SnapperType [mutton FishColors]
FishColors [black gray red]
Snapper:public (SnapperType snapper)
7.语法规则的递归。 GSL文件中可以定义直接或间接引用自身的语法规则。
; Rule that refers to itself directly
Digits [Digit (Digit Digits)]
Digit [0 1 2 3 4 5 6 7 8 9]
; Rule that indirectly refers to itself
NounPhrase (Noun ?PrepositionalPhrase)
PrepositionalPhrase (Preposition NounPhrase)
写此类语法时要注意,GSL不支持左递归,也就是说不能定义第一个子部分包含语法规则本身的语法规则。这是为了确保解释器不会进入无穷递归,来匹配一个语法规则。
; 合法
Digits [Digit (Digit Digits)]
Digits [(Digit Digits) Digit]
; 不合法
Digits [(Digits Digit) Digit]
Digits [Digit (Digits Digit)]
语音规则扩展部分。声音标示符(英语)应该使用小写字母,数字,-(连字符) _(下划线) ‘(单引号) @(at符) .(句号).如果使用其他的特殊符号(空格除外),必须用“”双引号括起来。下面是几条简单地规则:
1。避免缩写。例如,用usa 代替 USA ,用vxml代替 VXML。
2。展开缩写。例如,用street代替st.。用doctor代替dr.。
3。把标点拼出来。
4。把大于9的数拼出来。
DTMF标示符。
键 DTMF标示符
0 dtmf-0
1 dtmf-1
2 dtmf-2
3 dtmf-3
4 dtmf-4
5 dtmf-5
6 dtmf-6
7 dtmf-7
8 dtmf-8
9 dtmf-9
* dtmf-star
# dtmf-pound
例如:[(小王)(dtmf-4 dtmf-9 dtmf-7 dtmf-3)]
{
用户或者说“小王”或者连续的按4973 都能正确匹配。
语法规则的引用。
引用 格式
本地语义规则 语义规则名
本地语义规则的变量 语义规则名:变量名
用URL指定根语义规则名
用URL指定语义规则
特定规则
PrimaryColors ( ?Shades [red blue green])
Shades [ dark light ]
PrimaryColors [ ( ?[dark light] [red blue green] ) ]
引用和宏替换差不多。上面两个等价。本地引用有两种形式。
RuleName
RuleName:variableName
第二个将会用RuleName的返回值替换。
外部引用也有两种形式。
; 指定外部语法为根grammar
; 引用外部语法规则
<../fish.gram#butterflies>
语法规则的综合使用。
选择:[ 北京 南京 呼和浩特]
序列:(what is coral) // sequence of tokens
(Question Subject) // sequence of rule references
(Subject is Type) // sequence of tokens and rule references
重复:语法 行为
?expr 可选的
*expr 重复该表达式0或更多次.
+expr 重复该表达式1或更多次.
例如:
Gear = [鞋 裤子 袜子 帽子 手套 围巾]
Action = [买 购买]
MakeRequest = (我想Action +Gear ?(和Gear) )
下面的都是匹配项。
我想买手套.
我想买手套和围巾.
我想购买手套,围巾,裤子.
可以无限制的写下去,但是用户不可能永远地说下去,如果对结果设定范围,语音识别效果会更好。用户不可能说重复的名字。把上面的改为如下,只说1-5次。
MakeRequest = (我想Action +Gear 我想Action +Gear ? (和Gear) (和Gear) (和Gear) (和Gear) )
权值:权值可以任意设 2, 2.5, 0.8, 或.4。大于1说明该选项可能性比较大。如果没有指定,各项的可能性是一样的。
格式: grammarExpression~probability
例如:
[cat~3.1415 dog fish~.25]
[fish~10 (angel fish)~2 anthia~0.1]
也可以把权值加到? + * 上面,这与一般的权值不一样。格式:
语法 描述
?expr~.75 75%会说一次.
+expr~.75 不说,要是说了,75%的可能说第二次,类推。
*expr~.75 75%的可能说第一次,第一次说了,75%的可能说第二次,类推。
例如:
; the word "angel" is optional and is not very likely to occur.
?angel~0.25 fish
; the rule reference can occur 0 or more times and it is
; very likely it will occur more than once.
*Digit~.8
赋值语句。用{}括起来。
两种形式,
需要注意的是return 只能用于子语法规则,如果是根grammar则不能包含return 语句。
slot的例子:
;GSL 2.0;
ColoredOjbect:public (Color Object)
Color [
[red pink] {
[yellow canary] {
[green khaki] {
]
Object [
[truck car] {
你可以试试欧朋浏览器。