有没有一种方法可以检查说出的命令是否包含特定的';关键词';在windows中进行语音识别

本文关键字:包含特 关键词 语音识别 windows 是否 命令 一种 方法 检查 有没有 | 更新日期: 2023-09-27 18:20:35

例如,目前我对如何说出一个句子/命令有很多不同的变体。如果我想要明天的约会,我可以说"明天的约会是什么?"因为我在申请表中已经记下了语法。然而,我不能说"明天的日期是什么?"或"明天的日子是什么。有没有办法检查口语命令是否包含某些"关键字",如"明天"answers"日期"。这将有所帮助,因为这样你就可以说任何话,只要识别引擎听到关键词,它就会执行命令。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Speech.Recognition;
namespace Test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            SpeechRecognitionEngine recoEngine = new SpeechRecognitionEngine();
            Choices generalCommands = new Choices();
            generalCommands.Add(new string[] { "what is tomorrow's date", "whats tomorrows date", "what will tomorrows date be" });
            GrammarBuilder gBuilder = new GrammarBuilder();
            gBuilder.Append(generalCommands);
            Grammar grammar = new Grammar(gBuilder);
            recoEngine.LoadGrammar(grammar);
            recoEngine.SetInputToDefaultAudioDevice();
            recoEngine.RecognizeAsync(RecognizeMode.Multiple);
            recoEngine.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(SpeechRecognized);
        }
        private void SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
            string speech = e.Result.Text;
            switch (speech)
            {
                case "what is tomorrow's date":
                case "whats tomorrows date":
                case "what will tomorrows date be":
                    MessageBox.Show(DateTime.Now.AddDays(1).ToString());
                    break;
            }
        }
    }
}

正如你所看到的,我有三种不同的方式可以要求明天的日期。我想让它检查语音中的关键词,然后执行命令。我试过这种

if (speech.Contains("tomorrow's") && speech.Contains("date")
{
    //...
}

为了做到这一点,我确实改变了语法,但仍然没有奏效。我希望我已经把这一点说得足够清楚,我将感谢任何答复或评论。

有没有一种方法可以检查说出的命令是否包含特定的';关键词';在windows中进行语音识别

也许,您可以设置一个if语句,而不是为所说的内容设置switch语句,例如:

if (speech.Contains("tomorrow") && speech.Contains("date"))
{
    MessageBox.Show(DateTime.Now.AddDays(1).ToString());
}

这将允许更多的灵活性,例如,"明天的日期是什么?"或"给我明天的日期。"

我意识到这真的很晚了,你可能已经离开了,但我把这个消息留给未来可能好奇的人。

您可以使用正则表达式。不要切换,而是执行:

Regex.Match(speech, @"'btomorrow(')*s'b's+'bdate'b", RegexOptions.IgnoreCase)

这将匹配您的三种情况,以及以下情况,例如:

  • "明天的日期"
  • "明天的日期"
  • "明天的日期"
  • "明天的日期"

不匹配:

  • "明天约会"
  • "明天约会"

然而,我不能说"明天的日期是什么?"或"明天的日子是什么。

要回答这个问题,可以在语法中插入占位符,请参阅AppendWildcard上的文档。然而,为了获得最佳准确性,建议在语法中包含所有可能的选择,这样您将能够准确地处理用户输入,并了解如何处理不同的用户请求。你通常可以花十分钟写下所有可能的变体,并很好地涵盖各种可能性。