语法文件结构
语法文件必须遵循特定的 Speakeasy 结构才能正确解释文件的内容。
以下是一个基本语法文件的示例:
#BNF+EM V2.1;
/*
GRAMMAR: usa_states.bnf
说明:
此为可识别美国境内某些州的语法文件。
我可以说什么?
您可以说出美国境内的以下任何州。
*/
!grammar usa_states;
!start <state>;
<state>:
阿拉巴马州
| 阿拉斯加州
| 康涅狄格州
| 佛罗里达州
| 爱达荷州
| 堪萨斯州
| “新泽西州”
|“New York”;
#BNF+EM V2.1;
每个语法文件必须以 #BNF+EM V1.1; 等语句开始,其中确定了 Speakeasy 应如何处理语法文件。 无需修改此行。
/* */ 或 //
要创建注释(引擎所忽略的信息),可以在行中以 // 开头或将文本包含在 /* 和 */ 标记中。 可以编辑说明和我可以说什么?部分,以说明对语法文件所作出的更改。
!grammar [filename]
如果要更改语法文件的名称,命令 !grammar
必须使用新的文件名称。 例如,如果文件名称更改为 VoicePick.bnf,命令将为: !grammar VoicePick;。
!start <state>;
!start 命令指定了使用语法时语法中哪些措辞组将可用。在以上示例中,引擎将监听 <state> 规则中的所有措辞。 如果存在多个规则且命令仅参考一个规则,则会忽略所有其他规则。
<state>: Alabama | Connecticut |...
<state>: 与最后的 ; 之间列出的单词和短语是该语法将接受的措辞。每个词语或语句必须由 |(“或”符号)分隔。 可以在同一行中列出所有条目并进行垂直对齐以便于编辑。
要改进可能类似的措辞(如“New York”和“New Jersey”)的识别效果,请将语句包含在""(引号)中。 这将强制 Speakeasy 引擎根据用户响应对比更接近的可接受语句。
多规则
在某些语法文件中,主规则还分为各个子部分,以便管理措辞。 如果文件中包含多个规则,请确保所有规则包含在 !start 行中所使用的规则中。
!start <Speech>;
<Speech>: <YesNo> | <Maybe>;
<YesNo>: yes | no;
<Maybe>: maybe;
在此示例中,<Speech> 规则包含 <YesNo> 和 <Maybe> 规则,因此引擎将会监听 <YesNo> 规则和 <Maybe> 规则中的所有措辞。
相似措辞
如果拥有音似的词语,可能识别效果会比较差。 要改进识别效果,请使用较长的明显不同的语句。 例如,不应使用“faster”和“fastest”,而是替换为“go faster”和“warp speed”。