如何在Java中使用JSGF语法生成字符串?

时间:2014-05-28 13:59:25

标签: java grammar context-free-language

JSpeech Grammar Format允许用户为大括号中的单独字符串指定标记,如下所示:

 <jump> = jump { primitive jump }  [up] |
     jump [to the] (left { primitive jump_left } |right { primitive jump_right } );

 <effects> = nothing happens { NOTHING_HAPPENS } | ( [will] die | dies ) { OBJECT_DESTRUCTION } | (get|gets) new (coin|coins) { COIN_INCREASE };

在引用的specification的第4.6.1节中更详细地描述了使用标签。

Sphinx4 中,您可以使用 RuleParse 中的getTags()方法捕获这些标记。因此,如果用户说&#34; 跳到左边&#34;将返回以下标记&#34; 原始jump_left &#34;

现在,我想完全相反 - 给定标签,我想将它与字符串匹配。所以对于&#34; NOTHING_HAPPENS &#34;我想得到&#34; 没有任何事情发生&#34;或者&#34; OBJECT_DESTRUCTION &#34;一个有所有可能选择的arry:&#34; 会死,死,&#34;。

有没有这样的方法能够以这种方式解析语法文件,还是我必须对其进行硬编码?

1 个答案:

答案 0 :(得分:1)

我的解决方法是生成JSGF文件定义的所有可能的句子。这可以通过文档类在Sphinx中提供的dumpRandomSentences或getRandomSentence方法轻松完成,并将它们返回到识别器,该识别器将打印出标签。

我项目的示例代码:

    for (int i = 0; i < 20000; i++) {
        String utterance = grammar.getRandomSentence();
        String tags;
        try {
            tags = parser.getTagString(utterance);
            System.out.println(tags+" ==> "+utterance);

        } catch (GrammarException e) {
            error(e.toString());
        }
    }