如何使用sphinx字典作为语法文件

How to use sphinx dictionary as a grammar file

我正在开发 Java 语音到文本转换的应用程序。 已使用 sphinx 库和演示 helloworld 工作正常。 我已经编辑了语法文件并在其中附加了更多语法,它工作正常。

现在我想要的是它应该接受现实世界词典中存在的所有输入词,那么我应该怎么做呢?

我是否需要通过创建新规则将所有这些单词添加到我的语法文件中?

语法适用于短语数量有限的任务。在您的情况下,您需要使用 language model. Once build or obtained, it can be latter put to use with the call to Configuration#setLanguageModelPath().

您可以直接将声学模型和词典与实时语音识别器一起使用,而无需涉及语法文件的内容。 至于创建一个包含完整词典的语法文件,既无用又费时。 同样对于解码,扫描语法文件中的每个单词然后找到匹配项然后选择最佳的也将花费大量时间。 简单的解决方案是直接使用声学模态和字典而不指定语法。 可以看看sphinx给的demo

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

import edu.cmu.sphinx.api.Configuration;
import edu.cmu.sphinx.api.SpeechResult;
import edu.cmu.sphinx.api.StreamSpeechRecognizer;

public class TranscriberDemo {       

    public static void main(String[] args) throws Exception {

        Configuration configuration = new Configuration();

        configuration
                .setAcousticModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us");
        configuration
                .setDictionaryPath("resource:/edu/cmu/sphinx/models/en-us/cmudict-en-us.dict");
        configuration
                .setLanguageModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us.lm.bin");
LiveSpeechRecognizer recognizer = new LiveSpeechRecognizer(configuration);
// Start recognition process pruning previously cached data.
recognizer.startRecognition(true);
SpeechResult result = recognizer.getResult();
// Pause recognition process. It can be resumed then with startRecognition(false).
recognizer.stopRecognition();
        SpeechResult result;
        while ((result = recognizer.getResult()) != null) {
            System.out.format("Hypothesis: %s\n", result.getHypothesis());
        }
        recognizer.stopRecognition();
    }
}