2014-02-09 4 views
0

У меня есть этот код, чтобы создать пользовательскую грамматику и загрузить его в двигатель распознавания речиПризнать несколько вариантов грамматики

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); 

Можно ли сделать так, он распознает несколько вариантов, например, turn, on и lamp или мне пришлось бы писать во всех вариантах, я мог бы сказать это в моем массиве выбора?

+1

Ваш код не делать что-либо с помощью 'customDictationGrammar', просто создает объект и бросает это прочь? –

+0

Кроме того, этот пример показывает, как собрать порядок слов: http://msdn.microsoft.com/en-us/library/system.speech.recognition.grammarbuilder(v=vs.110).aspx –

ответ

1

Я бы разделил вашу грамматику на несколько частей - состояние (вкл./Выкл.), Существительное (лампу) и глагол (поворот). По мере того как ваша грамматика расширяется (я уверен, вы захотите включить другие вещи помимо лампы), вы можете легко обновить свою программу. (Кроме того, это позволяет легко связать 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 элемента и использовать repeat count для обеспечения минимального кол:

GrammarBuilder grammar = new GrammarBuilder(); 
Choices c = new Choices([verb, lamp, state]); 
grammar.Append(c, 2, 3); 
Grammar g = new Grammar(grammar); 
Смежные вопросы