【问题标题】:C# grammar and switch wildcardC# 语法和切换通配符
【发布时间】:2018-09-16 08:30:53
【问题描述】:

我想补充一点,只要它识别出“搜索 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 是什么。

提前致谢!

【问题讨论】:

  • 最快的解决方案是延迟说出X,并等待用户说出X,然后将其与Search 连接。用户说Search;他会等一下然后说X。您已经激活了Search 命令,然后您将搜索X。或者您可以删除开关并使用IF 语句来检查输入是否以搜索开头。如果是这样,您可以拆分字符串以获取搜索短语。
  • 由于很难知道最好等待多长时间,而且您选择的任何值都可能容易出错,为什么不两个为每种情况使用两个不同的关键字?

标签: c# switch-statement speech-recognition wildcard


【解决方案1】:

你必须做一个更复杂的语法。您选择的语法规则类型是选择一。它不完全适合您想要做的事情,因为您想要捕获关键字后面的内容。要捕获以下内容,您必须使用 SemanticResultKey 规则。这里解释一下:https://docs.microsoft.com/en-us/dotnet/api/system.speech.recognition.semanticresultkey?view=netframework-4.7.2

该示例与您想要的完全匹配:它从表达式“我的密码是.....”中提取密码

【讨论】:

  • 谢谢!但是我如何使用通配符将它放入我的语法中?当使用`@"search *" 时,它说Search ABCSearch *...
  • 你必须去掉 switch 语句。对于剩下的问题,执行我发布的代码,您将看到如何从表达式中提取数据。
  • 是的,但我如何将它纳入我的语法?那是在所有这些代码之前,在制作string input
  • 对不起,我的错误......我被你的帖子标题弄糊涂了。我更新了答案:)
  • 非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多