例如,目前我有很多不同的变化,我可以说一个句子/命令。如果我想要明天的约会,我可以说“明天的约会对象是什么?”因为我在申请中将其作为语法。但是,我不能说“明天的约会对象是什么?”或者“明天的约会是什么?”因为我的语法中没有它们。有没有办法检查口头命令是否包含某些“关键字”,如“明天”和“日期”。这会有所帮助,因为那时你可以说什么,只要识别引擎听到关键字,它就会执行命令。
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")
{
//...
}
要做到这一点,我确实改变了我的语法,但它仍然无法正常工作。我希望我已经明确表达了这一点,我将不胜感激任何答案或意见。
答案 0 :(得分:2)
也许,您可以将if语句设置为:
,而不是为所述内容设置switch语句。if (speech.Contains("tomorrow") && speech.Contains("date"))
{
MessageBox.Show(DateTime.Now.AddDays(1).ToString());
}
这将允许更多的灵活性,例如“明天的日期是什么?”或“给我明天的约会。”
我意识到这已经很晚了,你可能已经开始了,但是我想把这个听到未来可能会好奇的人。
答案 1 :(得分:0)
您可以使用正则表达式。 而不是切换,请执行:
Regex.Match(speech, @"\btomorrow(')*s\b\s+\bdate\b", RegexOptions.IgnoreCase)
这将匹配您拥有的三种情况,以及以下情况,例如:
不匹配:
答案 2 :(得分:0)
然而,我不能说“明天的约会对象是什么?”或者“明天的约会是什么?”因为我的语法中没有它们。
要回答这个问题,可以在文法中插入占位符,请参阅AppendWildcard上的文档。但是,为了获得最佳准确性,建议在语法中包含所有可能的选择,这样您就能够准确地处理用户输入并了解如何处理不同的用户请求。你通常可以花十分钟时间编写所有可能的变体并获得很好的可能性。