我正在使用XML语法文件来开发命令和控制应用程序。由于语法中有大约4000个条目,因此我无法将它全部放在一个文件中(当我尝试加载它时会出错)。我编写了多个XML语法文件,但是当我尝试加载多个文件时,它会替换以前加载的文件。也就是说,程序只识别第二个语法文件中的短语。谁能告诉我如何在单个语音识别应用程序中加载多个语法?
答案 0 :(得分:2)
您可以创建多个语法,您必须为它们提供不同的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;