此文分析离线语音识别的语义规则文件,即BNF文件,一般放在Android Studio的Assets文件夹下。本大侠使用的是科大讯飞的语音识别SDK,所以以下所有规则在此SDK下实测有效
1、结构
简单的说,BNF文件分为五个部分:
- 文档标示头;(不要去改就对了)
- 语法名称;
- 槽声明;
- 主规则(可引用子规则);
- 文档主体(具体的定义槽、引用规则)
2、定义
2.1 文档标示头
这个不细说,按默认来就好,它定义了文档的版本和编码格式,注意文档的内容必须和这里声明的编码格式统一。
#BNF+IAT 1.0 UTF-8;
2.2、 语法名称
一个文件只能有一个语法名称,作为这个BNF文件的一个识别名称。
(借助此名称可通过名称识别接口在不同的场景调用不同的语法规则,此功能未实测)
!grammar name;//定义语法名称
2.3、 槽声明
就是一个个坑,理解为活字印刷时的那些小坑,里面必须填入各种文字才行,非常方便动态修改识别命令。声明完槽后在文档底部的底部部分具体去定义每个声明过的槽的具体内容。这样语音识别引擎就会根据槽的内容去动态匹配你的指令。
!slot <name>;
2.4、 主规则
首先声明一个主规则名称
!start <ruleName>
然后为这个规则定义详细的识别规则,注意名称要和刚才声明的一样。
<ruleName>:<controlTV>|<controlAir>|<controlLight>;
//冒号后面都是一些引用规则,引用规则由一系列槽组成。