【问题标题】:How to generate string using a JSGF grammar in Java?如何在 Java 中使用 JSGF 语法生成字符串?
【发布时间】:2014-07-17 19:16:09
【问题描述】:

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() 方法捕获这些标签。所以如果用户说“jump to left”下面的标签将被返回“primitive jump_left

现在,我想做完全相反的事情——给定标签,我想将它与字符串匹配。因此,对于“NOTHING_HAPPENS”,我想得到“什么都没有发生”,或者对于“OBJECT_DESTRUCTION”,我想得到一个包含所有可能选项的数组:“会死,死,死”。

有没有这样的方法可以解析语法文件,还是我必须硬编码?

【问题讨论】:

    标签: java grammar context-free-language


    【解决方案1】:

    我对此的解决方案是生成由 JSGF 文件定义的所有可能的句子。这可以通过 Sphinx 中的 Grammar 类提供的 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());
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-26
      • 2015-02-22
      • 2014-10-23
      • 1970-01-01
      • 2016-03-31
      相关资源
      最近更新 更多