1

JSpeech 语法格式允许用户在大括号中为单独的字符串指定标签,如下所示:

 <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 };

参考规范的第 4.6.1 节更全面地描述了使用标签。

Sphinx4 中,您可以使用RuleParsegetTags()中的方法捕获这些标签。因此,如果用户说“向左跳转”,则将返回以下标签“原始 jump_left

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

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

4

1 回答 1

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());
        }
    }
于 2014-06-27T12:56:22.157 回答