BNF语音识别文件格式简介

此文分析离线语音识别的语义规则文件,即BNF文件,一般放在Android Studio的Assets文件夹下。本大侠使用的是科大讯飞的语音识别SDK,所以以下所有规则在此SDK下实测有效

1、结构

简单的说,BNF文件分为五个部分:

  1. 文档标示头;(不要去改就对了)
  2. 语法名称;
  3. 槽声明;
  4. 主规则(可引用子规则);
  5. 文档主体(具体的定义槽、引用规则)

2、定义

2.1 文档标示头

这个不细说,按默认来就好,它定义了文档的版本和编码格式,注意文档的内容必须和这里声明的编码格式统一。

#BNF+IAT 1.0 UTF-8;
  • 1

2.2、 语法名称

一个文件只能有一个语法名称,作为这个BNF文件的一个识别名称。 
(借助此名称可通过名称识别接口在不同的场景调用不同的语法规则,此功能未实测)

!grammar name;//定义语法名称
  • 1

2.3、 槽声明

就是一个个坑,理解为活字印刷时的那些小坑,里面必须填入各种文字才行,非常方便动态修改识别命令。声明完槽后在文档底部的底部部分具体去定义每个声明过的槽的具体内容。这样语音识别引擎就会根据槽的内容去动态匹配你的指令。

!slot <name>;
  • 1

2.4、 主规则

首先声明一个主规则名称

!start <ruleName>
  • 1

然后为这个规则定义详细的识别规则,注意名称要和刚才声明的一样。

<ruleName>:<controlTV>|<controlAir>|<controlLight>;
//冒号后面都是一些引用规则,引用规则由一系列槽组成。
  • 1
  • 2

2.5、 文档主体

这个地方放两样东西,引用规则和槽定义。 
看例子:

<controlTV>:<open><TV>;//引用规则

<TV>:电视|电视机;//槽的具体定义
<open>:打开|开了|开起来|开|开一下;
  • 1
  • 2
  • 3
  • 4
  • 5

结构很简单,基本就这五个部分,比较麻烦的是规则定义部分。文档规定只能定义一个主规则,所以可以在主规则中引用子规则来减少代码量。

特别注意:名称不能超过15个字符,命名不能重复。

最后上一个完整的例子

#BNF+IAT 1.0 UTF-8;
!grammar call;//定义语法名称
!slot <TV>;//被控制的物体和物体的某种属性
!slot <airCondition>;
!slot <temperature>;
!slot <vol>;
!slot <hold>;
!slot <open>;
!slot <shutDown>;
//以下是想要让物体达到的状态
!slot <close>;
!slot <tempUp>;
!slot <tempDown>;
!slot <volTurnUp>;
!slot <volTurnDown>;

!start <smartHome>;//定义开始规则,下面一行为规则的具体内容
//主规则,系统只认主规则
<smartHome>:<controlTV>|<controlAir>;
//被引用的子规则,注意变量命名不能超过15个字符
<controlTV>:<open><TV>|[<hold>]<TV><open>|<close><TV>|[<hold>]<TV><close>;
<controlAir>:<open><airCondition>|[<hold>]<airCondition><open>|<close><airCondition>|[<hold>]<airCondition><close>;
<controlLight>:<open><light>|[<hold>]<light><open>|<close><light>|[<hold>]<light><close>;
<volControl>:[<vol>]<volTurnDown>|[<vol>]<volTurnUp>|[<hold>]<vol><close>;
<tempControl>:<temperature><tempUp>|<temperature><tempDown>;

//为声明过的槽,定义具体的名称
<TV>:电视|电视机;
<airCondition>:空调;
<temperature>:温度;
<vol>:声音|音量;
<hold>:把;
<open>:打开|开了|开起来|开|开一下;
<close>:关闭|关掉|关了|关|关一下;
<tempUp>:高点|调高;
<tempDown>:低点|调高;
<volTurnUp>:重点|重点|重一点|重一点|大点|大一点;
<volTurnDown>:轻点|小点|小一点|轻一点;
<shutDown>:关闭系统|退出;

猜你喜欢

转载自blog.csdn.net/c1194758555/article/details/80865362
BNF