Как дать пользовательской грамматике больший приоритет, чем грамматике диктовки в SAPI?

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


person n00b    schedule 25.06.2012    source источник


Ответы (1)


Класс Grammar имеет два свойства Вес и Приоритет. Вы можете назначить больший вес грамматике, которую вы создали, и меньший вес - грамматике диктовки, которую вы используете. Или, если у вас есть несколько пользовательских грамматик, вы можете использовать свойство priority, чтобы указать, что одна грамматика имеет приоритет над другой. См. Следующий пример;

// Create a Grammar for recognizing numeric digits.
Grammar digitsGrammar = CreateDigitsGrammar();
digitsGrammar.Name = "Digits Grammar";
digitsGrammar.Priority = 2;
digitsGrammar.Weight = 0.6f;

// Create a Grammar for recognizing fractions.
Grammar fractionsGrammar = CreateFractionsGrammar();
fractionsGrammar.Name = "Fractions Grammar";
fractionsGrammar.Priority = 1;
fractionsGrammar.Weight = 1f;

// Create an in-process speech recognizer.
SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine();

recognizer.SpeechRecognized +=new EventHandler<SpeechRecognizedEventArgs>(
recognizer_SpeechRecognized);

// Load the digits and fractions Grammar objects.
 recognizer.LoadGrammar(digitsGrammar);
 recognizer.LoadGrammar(fractionsGrammar);

 // Start recognition.
 recognizer.SetInputToDefaultAudioDevice();
 recognizer.RecognizeAsync(RecognizeMode.Multiple);
person alan turing    schedule 29.08.2013