【问题标题】:Exception when word is missing in the dictionary字典中缺少单词时的异常
【发布时间】:2016-01-07 12:52:57
【问题描述】:

我尝试了演示应用程序,它运行良好,但是当我尝试集成我自己的 .jsgf 语法文件时,当我尝试使用 .lm 文件对同一个字典进行相同操作时,它会出现错误,它运行良好。

我提到了PocketSphinx android demo runtime exception 链接,但它并没有帮助我

下面是sn-p的代码:

private void setupRecognizer(File assetsDir) throws IOException {
        // The recognizer can be configured to perform multiple searches
        // of different kind and switch between them
        File modelsDir = new File(assetsDir, "models");
        mRecognizer = defaultSetup()
                .setAcousticModel(new File(assetsDir, "en-us-ptm"))
                .setDictionary(new File(assetsDir, "cmudict-en-us.dict"))
                .setRawLogDir(assetsDir)
                .setKeywordThreshold(1e-10f)
                .setFloat("-beam", 1e-30f)
                .setBoolean("-allphone_ci", true)
                .getRecognizer();
        mRecognizer.addListener(this);
        File languageModel = new File(assetsDir, "commands_gram.gram");
        mRecognizer.addGrammarSearch(COMMANDS, languageModel);
    }

以下是错误

E/cmusphinx: ERROR: "fsg_search.c", line 141: The word 'next' is missing in the dictionary
E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1

Process: java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818) 
Caused by: java.lang.RuntimeException: Decoder_setJsgfFile returned -1
at edu.cmu.pocketsphinx.PocketSphinxJNI.Decoder_setJsgfFile(Native Method)
at edu.cmu.pocketsphinx.Decoder.setJsgfFile(Decoder.java:139)
at edu.cmu.pocketsphinx.SpeechRecognizer.addGrammarSearch(SpeechRecognizer.java:234)
at com.package.ui.SphinxSpeechRecognizerActivity.setupRecognizer(SphinxSpeechRecognizerActivity.java:284)
at com.package.ui.SphinxSpeechRecognizerActivity.access$400(SphinxSpeechRecognizerActivity.java:29)
at com.package.ui.SphinxSpeechRecognizerActivity$3.doInBackground(SphinxSpeechRecognizerActivity.java:239)
at com.package.ui.SphinxSpeechRecognizerActivity$3.doInBackground(SphinxSpeechRecognizerActivity.java:233)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818) 

我还意识到,我使用的任何 .jsgf 语法文件都没有检测到字典中的最后一个单词。在我更改为我自己的 .jsgf 语法文件后它工作正常之前它给出了异常

【问题讨论】:

    标签: pocketsphinx-android


    【解决方案1】:

    这一行:

    E/cmusphinx: ERROR: "fsg_search.c", line 141: The word 'next' is missing in the dictionary 
    

    告诉您需要将“下一个”这个词添加到字典中。您在 JSGF 语法中使用了这个词,但字典中没有它。单词区分大小写,因此您需要确保使用正确的大小写。

    【讨论】:

    • 我在字典中有这个词,但它仍然给出这个错误。我已经使用 Sphinx 知识库生成器 [lmtool.3a] 构建了字典,默认情况下它以大写形式提供单词及其音素。在这种情况下,我是否必须专门将字典单词转换为小写?
    • 问题是我必须自己将所有字典单词转换为小写然后才起作用,但是如果您有大量单词,这会变得很麻烦
    【解决方案2】:

    我可能知道你的问题。 您必须使语法正确,例如空格和制表符。 我建议你检查你的语法块或制表符。 对不起我的英语不好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 1970-01-01
      • 2016-02-09
      • 2016-01-17
      相关资源
      最近更新 更多