簡體   English   中英

識別多種語法選擇

[英]Recognize multiple grammar choices

我有這段代碼可以設置自定義語法,並將其加載到語音識別引擎中

DictationGrammar customDictationGrammar = new DictationGrammar();
customDictationGrammar.Name = "Dictation";
customDictationGrammar.Enabled = true;
GrammarBuilder grammar = new GrammarBuilder();
grammar.Append(new Choices("turn", "on", "off",  "lamp"));
grammar.Culture = ri.Culture;
Grammar g = new Grammar(grammar);



spRecEng.LoadGrammar(g);
spRecEng.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(spRecEng_SpeechRecognized);
spRecEng.SpeechRecognitionRejected += new EventHandler<SpeechRecognitionRejectedEventArgs>(spRecEng_SpeechRecognitionRejected);

spRecEng.SetInputToAudioStream(source.Start(), new SpeechAudioFormatInfo(EncodingFormat.Pcm, 16000, 16, 1, 32000, 2, null));
spRecEng.RecognizeAsync(RecognizeMode.Multiple);

是否有可能使它能夠識別多個選項,例如turnonlamp或者我必須寫所有我可以在Choices數組中說的變量嗎?

我會將您的語法分為多個部分-狀態(打開/關閉),名詞(燈)和動詞(轉彎)。 隨着語法的擴展(我很確定您將要打開燈以外的其他功能),可以輕松地更新程序。 (此外,這可以很容易地結合SemanticResultKeys的各種零件和SemanticResultValues在零件的各種選項,這樣你就不必解析英文文本。)

GrammarBuilder state = new GrammarBuilder();
state.Append(new Choices("on", "off"));
state.Culture = ri.Culture;
GrammarBuilder noun = new GrammarBuilder();
noun.Append(new Choices("lamp"));
noun.Culture = ri.Culture;
GrammarBuilder verb = new GrammarBuilder();
verb.Append(new Choices("turn"));
verb.Culture = ri.Culture;   

GrammarBuilder grammar = new GrammarBuilder();
grammar.Append(verb);
grammar.Append(lamp);
grammar.Append(state);
Grammar g = new Grammar(grammar);

如果您確實希望用戶說“熄燈”或其他任何單詞順序,那么您仍然可以分開這些部分,但是可以使用Choices元素將它們組合起來,並使用重復計數來強制執行最小計數:

GrammarBuilder grammar = new GrammarBuilder();
Choices c = new Choices([verb, lamp, state]);
grammar.Append(c, 2, 3);
Grammar g = new Grammar(grammar);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM