【问题标题】:Loading multiple grammar files in SAPI 5.1在 SAPI 5.1 中加载多个语法文件
【发布时间】:2010-11-26 19:22:44
【问题描述】:

我正在使用 XML 语法文件来开发命令和控制应用程序。由于语法中有大约 4000 个条目,我不能将它们全部放在一个文件中(当我尝试加载它时会出错)。我已经编写了多个 XML 语法文件,但是当我尝试加载多个文件时,它会替换之前加载的文件。也就是说程序只识别第二个语法文件中的短语。谁能告诉我如何在单个语音识别应用程序中加载多个语法?

【问题讨论】:

    标签: speech-recognition sapi


    【解决方案1】:

    你可以创建多个语法,你必须给他们不同的 ID。 这些 sn-ps 在 Delphi 中,但您可以适应:

      // init
      FGrammar1 := SpSharedRecoContext1.CreateGrammar(1); // ID 1
      FGrammar1.CmdLoadFromFile('CommandMemo1.xml', SLODynamic);
      FGrammar2 := SpSharedRecoContext1.CreateGrammar(2); // ID 2
      FGrammar2.CmdLoadFromFile('CommandMemo2.xml', SLODynamic);
      // start
      FGrammar1.CmdSetRuleIdState(0, SGDSActive);
      FGrammar2.CmdSetRuleIdState(0, SGDSActive);
    ...
      // in the onRecognition event, test the grammar Id
      case Result.PhraseInfo.GrammarId of
        1: if SameText(Txt, 'erase memo') then
             Memo1.Text := ''
           else
           if SameText(Txt, 'select memo') then
             Memo1.SelectAll;  
        2: if SameText(Txt, 'copy memo') then
             CopyToClipboard(Memo1.Text)
           else
           if SameText(Txt, 'paste memo') then
             Memo1.Text := PasteFromClipboard;
        else
          raise Exception.Create('bad GrammarId');
      end;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-30
      • 1970-01-01
      • 2012-10-01
      • 1970-01-01
      相关资源
      最近更新 更多