当前位置: 首页 > 编程语言 > C#

HowtoMixGrammar(Rules)andDictation(FreeSpeech)withSpeechRecognizerinC#分享

时间:2023-04-10 21:36:46 C#

HowtoMixGrammar(Rules)andDictation(FreeSpeech)withSpeechRecognizerinC#(和SpeechSynthesis)产品。http://msdn.microsoft.com/en-us/library/ms554855.aspxhttp://estellasays.blogspot.com/2009/04/speech-recognition-in-cnet.html但我觉得使用语法时我有点受限。不要误会我关于语法的意思,语法识别可以准确指出要注意哪些单词/短语,但是如果我想让它识别我没有注意到的东西怎么办?或者我想解析一个半预先确定的命令名称和半随机单词的短语?例如..场景A-我说“Google[oilspill]”,我希望它打开Google,搜索结果放在括号中,可以是任何内容。场景B-我说“找到[曼彻斯特]”,我希望它在谷歌地图或任何其他未预先确定的地方搜索曼彻斯特我希望它知道“谷歌”和“定位”是命令,它是之后的东西参数(可以是任何东西)。问题:有谁知道如何将预定语法(语音识别应该识别的词)与不在预定语法中的词混合?代码片段..使用System.Speech.Recognition;......SpeechRecognizerrec=newSpeechRecognizer();rec.SpeechRecognized+=rec_SpeechRecognized;varc=newChoices();c.Add("搜索");vargb=newGrammarBuilder(c);varg=newGrammar(gb);rec.LoadGrammar(g);rec.Enabled=true;......voidrec_SpeechRecognized(objectsender,SpeechRecognizedEventArgse){if(e.Result.Text=="search"){stringquery="如何识别语法中未定义的单词并将其传递到此处!";启动谷歌(查询);}}......privatevoidlaunchGoogle(stringterm){Process.Start("IEXPLORE","google.com?q="+term);你可以尝试这样的事情......它指定了一个已知命令列表......但你也可以使用后者的开放式听写。它需要在打开的字典之前有一个命令。但是你可以反转这个......并附加th但是,通过向命令类型(“”)添加一个空白,它也可以让你引导字典部分。选择commandtype=newChoices();commandtype.Add("搜索");命令类型.Add("打印");commandtype.Add("打开");commandtype.Add("定位");SemanticResultKeysrkComtype=newSemanticResultKey("comtype",commandtype.ToGrammarBuilder());GrammarBuildergb=newGrammarBuilder();gb.Culture=System.Globalization.CultureInfo.CreateSpecificCulture("en-GB");gb.Append(srkComtype);gb.AppendDictation();语法gr=新语法(gb);然后在您的识别器上仅使用结果文本等。您可以编写向结构添加更多选项和SemanticResultKeys以根据需要制作更复杂的模式。也是一个通配符(例如gb.AppendWildcard();)。你有两个选择:以上是C#学习教程:HowtoMixGrammar(Rules)andDictation(FreedomofSpeech)inC#withSpeechRecognizerTutorial,希望大家关注——可以使用GrammarBuilder::AppendDictation来使用自由文本的自由文本听写节点。问题在于,由于识别器没有任何上下文,因此识别质量不是最高的。您可以使用文本缓冲区节点并使用GrammarBuilder::Append(String,SubsetMatchingMode)提供一组项目。这将为识别器提供足够的上下文以获得高质量的识别,而无需每次都重建整个语法树。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: