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