Я думаю, что грамматика диктовки делает только транскрипцию. Он превращает речь в текст без извлечения семантического значения, потому что по определению грамматика диктовки поддерживает все слова и не имеет никаких ключей к вашему конкретному семантическому отображению. Вам нужно использовать пользовательскую грамматику, чтобы извлечь смысловое значение. Если вы предоставляете грамматику SRGS или встраиваете ее в код или с помощью инструментов SpeechServer, вы можете указать семантические сопоставления для определенных слов и фраз. Тогда распознаватель может извлечь смысловой смысл и придать вам семантическую уверенность.
Вы должны иметь возможность получить значение достоверности от распознавателя при распознавании, попробуйте System.Speech.Recognition.RecognitionResult.Confidence.
Файл справки, поставляемый с Microsoft Server Speech Platform 10.2 SDK, содержит более подробную информацию. (это API-интерфейс Microsoft.Speech для серверных приложений, который очень похож на API-интерфейс System.Speech для клиентских приложений) См. (http://www.microsoft.com/downloads/en/details.aspx?FamilyID=1b1604d3-4f66-4241-9a21-90a294a5c9a4.) или документацию Microsoft.Speech по адресу http://msdn.microsoft.com/en-us/library/microsoft.speech.recognition.semanticvalue(v=office.13).aspx
Для класса SemanticValue написано:
Распознавание всех речевых платформ
выходные данные двигателей обеспечивают действительные экземпляры
SemanticValue для всех признанных
вывод, даже фразы без явного
семантическая структура.
Экземпляр SemanticValue для
Фраза получается с помощью семантики
свойство в RecognizedPhrase
объект (или объекты, которые наследуются от
это, например RecognitionResult).
Объекты SemanticValue, полученные для
распознанные фразы без семантики
Структура характеризуется:
Не иметь детей (Количество 0)
Свойство Value равно нулю.
Искусственный уровень достоверности 1,0
(возвращается по доверию)
Как правило, приложения создают
экземпляр SemanticValue косвенно,
добавляя их к объектам грамматики
используя SemanticResultValue и
SemanticResultKey экземпляры в
в сочетании с выбором и
Объекты GrammarBuilder.
Прямое строительство
SemanticValue полезен во время
создание строго типизированных грамматик
Когда вы используете функции SemanticValue в грамматике, вы обычно пытаетесь отобразить разные фразы в одном значении. В вашем случае фраза «I.E» или «Internet Explorer» должна соответствовать одному и тому же семантическому значению. Вы устанавливаете выбор в своей грамматике, чтобы понять каждую фразу, которая может соответствовать определенному значению. Вот простой пример Winform:
private void btnTest_Click(object sender, EventArgs e)
{
SpeechRecognitionEngine myRecognizer = new SpeechRecognitionEngine();
Grammar testGrammar = CreateTestGrammar();
myRecognizer.LoadGrammar(testGrammar);
// use microphone
try
{
myRecognizer.SetInputToDefaultAudioDevice();
WriteTextOuput("");
RecognitionResult result = myRecognizer.Recognize();
string item = null;
float confidence = 0.0F;
if (result.Semantics.ContainsKey("item"))
{
item = result.Semantics["item"].Value.ToString();
confidence = result.Semantics["item"].Confidence;
WriteTextOuput(String.Format("Item is '{0}' with confidence {1}.", item, confidence));
}
}
catch (InvalidOperationException exception)
{
WriteTextOuput(String.Format("Could not recognize input from default aduio device. Is a microphone or sound card available?\r\n{0} - {1}.", exception.Source, exception.Message));
myRecognizer.UnloadAllGrammars();
}
}
private Grammar CreateTestGrammar()
{
// item
Choices item = new Choices();
SemanticResultValue itemSRV;
itemSRV = new SemanticResultValue("I E", "explorer");
item.Add(itemSRV);
itemSRV = new SemanticResultValue("explorer", "explorer");
item.Add(itemSRV);
itemSRV = new SemanticResultValue("firefox", "firefox");
item.Add(itemSRV);
itemSRV = new SemanticResultValue("mozilla", "firefox");
item.Add(itemSRV);
itemSRV = new SemanticResultValue("chrome", "chrome");
item.Add(itemSRV);
itemSRV = new SemanticResultValue("google chrome", "chrome");
item.Add(itemSRV);
SemanticResultKey itemSemKey = new SemanticResultKey("item", item);
//build the permutations of choices...
GrammarBuilder gb = new GrammarBuilder();
gb.Append(itemSemKey);
//now build the complete pattern...
GrammarBuilder itemRequest = new GrammarBuilder();
//pre-amble "[I'd like] a"
itemRequest.Append(new Choices("Can you open", "Open", "Please open"));
itemRequest.Append(gb, 0, 1);
Grammar TestGrammar = new Grammar(itemRequest);
return TestGrammar;
}