JSGF文件只使用一个公共规则吗?

时间:2015-08-27 13:53:23

标签: grammar pocketsphinx

我在pocketsphinx中使用以下JSGF文件(法语抱歉):

#JSGF V1.0;
/**
* JSGF Grammar for music
*/
grammar music;

<launch_app>    = lance | ouvre;
<launch_radio>  = commence | débute | démarre;                                                      
<launch_artist> = met (du) | joue;

<app_list>      = spotify | youtube | soundcloud | deezer;
<radio_list>    = rock | folk | pop | classique | métal | triste | joyeuse | détendu;
<artist_list>   = moby | lori | kyo | shakira | pantera | mozart;

<name>  = music;

<radio_command> = <name> <launch_radio> une radio <radio_list>;
<app_command>   = <name> <launch_app> <app_list>;
<artist_command> = <name> <launch_artist> <artist_list>;

public <final_rule> = <radio_command> | <app_command> | <artist_command>;

它完美无缺。但是,如果我删除<final_rule>代码并使用多个public关键字,请执行以下操作:

#JSGF V1.0;
/**
* JSGF Grammar for music
*/
grammar music;

<launch_app>    = lance | ouvre;
<launch_radio>  = commence | débute | démarre;                                                      
<launch_artist> = met (du) | joue;

<app_list>      = spotify | youtube | soundcloud | deezer;
<radio_list>    = rock | folk | pop | classique | métal | triste | joyeuse | détendu;
<artist_list>   = moby | lori | kyo | shakira | pantera | mozart;

<name>  = music;

public <radio_command> = <name> <launch_radio> une radio <radio_list>;
public <app_command>   = <name> <launch_app> <app_list>;
public <artist_command> = <name> <launch_artist> <artist_list>;
不管我说什么,pocketphinx只承认三条公共规则中的一条。我觉得这种行为很奇怪,因为在使用这个语法文件时,pocketsphinx不会给我错误。 JSGF文件只需要一个公共关键字,还是链接到pocketshphinx?

1 个答案:

答案 0 :(得分:2)

是的,pocketsphinx默认只识别第一条规则。如果要使用其他规则,请参阅API中的config或name参数中的-toprule参数。

如果你想识别多个选择,你可以按照最终规则的构建方式构建语法,作为所有规则的选择:

 public <command> = <artist> | <music> | <action> ;