语法文件结构

语法文件必须遵循特定的 Speakeasy 结构才能正确解释文件的内容。

观看相关视频 (3:38)

以下是一个基本语法文件的示例:

#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”。