C#语法和switch通配符
C# grammar and switch wildcard
我想补充一点,每当它识别出 'search X' 时,它就会搜索 'X',但我不知道如何将其添加到语法中,或者如何用我的 switch 语句做这样的事情。
private void Form1_Load(object sender, EventArgs e)
{
Choices commands = new Choices();
commands.Add(new string[] { "hello", "start chrome", "search" });
GrammarBuilder gBuilder = new GrammarBuilder();
gBuilder.Append(commands);
gBuilder.Culture = new System.Globalization.CultureInfo("en-GB");
Grammar grammar = new Grammar(gBuilder);
recEngine.LoadGrammarAsync(grammar);
recEngine.SetInputToDefaultAudioDevice();
recEngine.SpeechRecognized += RecEngine_SpeechRecognized;
}
private void RecEngine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
switch (e.Result.Text)
{
case "hello":
synthesizer.SpeakAsync("Hello! How are you doing today?");
break;
case "start chrome":
Process.Start("http://www.google.com");
break;
case "search":
SearchChrome("search");
break;
}
}
static void SearchChrome(string searchterm)
{
Process.Start("https://www.google.com/search?q=" + searchterm);
}
所以我想添加到我的语法 "Search X" 和我的案例 "Search X" 中,用它搜索 X 是什么。
提前致谢!
你必须做一个更复杂的语法。您选择的语法规则类型是 Choice one。它并不完全适合您想做的事情,因为您想捕获关键字后面的内容。要捕获以下内容,您必须使用 SemanticResultKey 规则。在这里解释:https://docs.microsoft.com/en-us/dotnet/api/system.speech.recognition.semanticresultkey?view=netframework-4.7.2
该示例完全符合您的要求:它从表达式 "My password is ....."
中提取密码
我想补充一点,每当它识别出 'search X' 时,它就会搜索 'X',但我不知道如何将其添加到语法中,或者如何用我的 switch 语句做这样的事情。
private void Form1_Load(object sender, EventArgs e)
{
Choices commands = new Choices();
commands.Add(new string[] { "hello", "start chrome", "search" });
GrammarBuilder gBuilder = new GrammarBuilder();
gBuilder.Append(commands);
gBuilder.Culture = new System.Globalization.CultureInfo("en-GB");
Grammar grammar = new Grammar(gBuilder);
recEngine.LoadGrammarAsync(grammar);
recEngine.SetInputToDefaultAudioDevice();
recEngine.SpeechRecognized += RecEngine_SpeechRecognized;
}
private void RecEngine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
switch (e.Result.Text)
{
case "hello":
synthesizer.SpeakAsync("Hello! How are you doing today?");
break;
case "start chrome":
Process.Start("http://www.google.com");
break;
case "search":
SearchChrome("search");
break;
}
}
static void SearchChrome(string searchterm)
{
Process.Start("https://www.google.com/search?q=" + searchterm);
}
所以我想添加到我的语法 "Search X" 和我的案例 "Search X" 中,用它搜索 X 是什么。
提前致谢!
你必须做一个更复杂的语法。您选择的语法规则类型是 Choice one。它并不完全适合您想做的事情,因为您想捕获关键字后面的内容。要捕获以下内容,您必须使用 SemanticResultKey 规则。在这里解释:https://docs.microsoft.com/en-us/dotnet/api/system.speech.recognition.semanticresultkey?view=netframework-4.7.2
该示例完全符合您的要求:它从表达式 "My password is ....."
中提取密码