Create and Access Semantic Content

While performing recognition, a speech recognition engine returns recognition results to the speech application that include semantic information about the recognized speech input, as well as the text of recognized words and phrases. The semantic information contained in a recognition result is often more meaningful to an application than the recognized text. You can author semantic content and the code that retrieves semantics from recognition results to provide actionable information to your application.

Although the speech recognition engine generates some semantic content by default, you can create the semantic structure for recognized speech by assigning the semantic values and semantic keys that the speech recognition engine returns in the recognition result. The mechanism for authoring semantic content depends on the process you use to author a grammar.

Create Dynamic Grammars Programmatically

Create Static Grammars as Files

An application registers to be notified of events that the speech recognition engine raises when it is processing speech input. A SpeechRecognizer or SpeechRecognitionEngine instance raises the SpeechHypothesized, SpeechRecognitionRejected, or SpeechRecognized events to provide information about a recognition operation. Event arguments for these events are provided by, respectively, the SpeechHypothesizedEventArgs, SpeechRecognitionRejectedEventArgs, and SpeechRecognizedEventArgs classes. All three of these classes inherit from the RecognitionEventArgs class. Importantly, all three classes inherit the Result property on RecognitionEventArgs.

You can access the Result property using the second parameter, which is usually named e, on the event handler. The following example shows an empty handler for the SpeechRecognized event. Event handlers for the SpeechHypothesized and SpeechRecognitionRejected events are similar.

void sr_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
  // Handle SpeechRecognized event.

The Result property is a reference to a RecognitionResult instance, which has properties that contain information about alternate recognition results, the audio associated with the recognized phrase, the degree of certainty for the recognized phrase, and a number of other items of interest about the recognized phrase.

Semantics is an important property of RecognitionResult that contains a reference to a SemanticValue instance, which can be thought of as a collection of key/value pairs that represents the semantic organization of a recognized phrase. You can access the keys and values for the semantics of a recognition result using the IDictionary<String, SemanticValue>.Keys and IDictionary<String, SemanticValue>.Values properties, respectively.

The following illustration shows the properties on RecognitionResult and SemanticValue classes, which you can access using the Result property.