1

XML 文法ファイルを使用して、コマンド アンド コントロール アプリケーションを開発しています。文法には約 4000 のエントリがあるため、1 つのファイルにすべてを含めることはできません (ロードしようとするとエラーが発生します)。複数の XML 文法ファイルを作成しましたが、複数のファイルを読み込もうとすると、以前に読み込んだファイルが置き換えられます。つまり、プログラムは 2 番目の文法ファイルの句のみを認識します。単一の音声認識アプリケーションに複数の文法をロードする方法を誰か教えてもらえますか?

4

1 に答える 1

3

複数の文法を作成できますが、それらに異なる ID を与える必要があります。これらのスニペットは 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;
于 2009-09-16T05:29:09.437 に答える