C# 用c语言通过语音进行谷歌搜索#

C# 用c语言通过语音进行谷歌搜索#,c#,speech-recognition,google-search,C#,Speech Recognition,Google Search,我正在制作自己的jarvis程序,当我说“搜索”+我想要的东西时 打开谷歌搜索“某物”。这里是我的代码…(我不会全部粘贴) private void Form1\u加载(对象发送方,事件参数e) { _recognizer.setInputOdeFaultAudioDevice(); _recognizer.LoadGrammar(新语法(新语法生成器(新选项)(File.ReadAllLines(@“C:\Users\Cpyros\Desktop\lefteris\Commands.txt“)

我正在制作自己的jarvis程序,当我说“搜索”+我想要的东西时 打开谷歌搜索“某物”。这里是我的代码…(我不会全部粘贴)

private void Form1\u加载(对象发送方,事件参数e)
{
_recognizer.setInputOdeFaultAudioDevice();
_recognizer.LoadGrammar(新语法(新语法生成器(新选项)(File.ReadAllLines(@“C:\Users\Cpyros\Desktop\lefteris\Commands.txt“)));
_recognizer.SpeechRecognized+=新事件处理程序(_recognizer_SpeechRecognized);
_识别器.RecognizeAsync(RecognizeMode.Multiple);
}
void _recognizer _SpeechRecognized(对象发送方,SpeechRecognizedEventArgs e)
{
int ranNum=rnd.Next(1,10);
字符串语音=e.Result.Text;
开关(语音)
{
//问候
案例“你好”:
案例“你好,贾维斯”:
如果(ranNum<6){JARVIS.Speak(“你好,先生”);}
如果(ranNum>5){JARVIS.Speak(“Hi”);}
打破
案例“再见”:
案例“再见贾维斯”:
案例“结束”:
案例“close jarvis”:
JARVIS.Speak(“直到下一次”);
Close();
打破
“jarvis”案:
如果(ranNum<5){QEvent=”“;JARVIS.Speak(“是的先生”);}
如果(ranNum>4){QEvent=”“;JARVIS.Speak(“Yes?”);}
打破
//网站
案例“开放facebook”:
系统.诊断.进程.启动(“http://www.facebook.com");
打破
案例“开放谷歌”:
进程启动(“https://www.google.gr/?gws_rd=cr");
贾维斯,说(“好的先生”);
System.Windows.Forms.SendKeys.SendWait(“^%”);
打破
在这里,我想添加一个类似“搜索”+我想搜索的东西的案例。。。

有什么想法吗?

谷歌有一个查询字符串,您可以使用它直接进入用户输入的搜索字符串。例如:

(多亏了Matt R,我才知道还有
https://www.google.com/search?q=test+和+此类

然后,您可以使用之前谷歌案例陈述的修改:

default:
    if (speech.Contains("search for")
    {
        Process.Start("https://www.google.com/#q=" + userInput);
        ...
您必须确保
userInput
首先通过

string userInput = System.Web.HttpUtility.UrlEncode(input);

由于开关参数文本与case语句不匹配,如果它在“search for”之后有搜索项,则可以将其作为您的
默认
语句:

default:
    if (speech.ToLower().Contains("search for")) // See if the string contains the 'search for' string.
    {
         string query = speech.Replace("search for", ""); // Remove the 'search for' text.
         // Old code (does not make the text fully URL safe)
         // query = query.Replace(' ', '+'); 
         query = System.Web.HttpUtility.UrlEncode(query);
         string url = "https://www.google.com.au/search?q=" + query;
         System.Diagnostics.Process.Start(url);
    }
    break;

这将不起作用,因为您的“grammarbuild”无法识别未加载到“grammarbuild”中的单词我也在尝试这一点。

我有相同的源代码。您必须在default commands.txt中添加对命令的搜索,并确保custom commands.cs中没有与短语相关的任何内容。正如Nikki O之前所说,这将不起作用,因为您的GrammarBuilder中没有单词。您可以简单地加载多个或者干脆做:

default:
    if (speech.ToLower().Contains("search for")) // See if the string contains the 'search for' string.
    {
         var dictationGrammar= new DictationGrammar();
            sre.LoadGrammarAsync(dictationGrammar);
string url = "https://www.google.com.au/search?q=" + dictationGrammar;

     System.Diagnostics.Process.Start(url);

    }
    break;

这将加载不在默认语法中的听写文本。我没有测试此代码,但这应该可以工作。

+
替换空格很好,但这不是唯一需要替换的非法字符。这就是为什么我建议
UrlEncode
想想看,是的,URL编码应该是m太好了。我会更新答案的。谢谢你的回答,但它不是在搜索,我说:“搜索facebook”,它根本不是在搜索,我是c#:p的新手,谢谢你的答案!但是当我说“搜索facebook(例如)”时它打开了谷歌,但没有进行搜索。@xXjarvisXx,我已经更新了我的答案。你的问题是
搜索facebook
搜索
不一样。使用
包含
应该可以做到这一点。但是,正如马特所说,你应该确保你使用的是
ToLower()
或类似的,这样大写字母就不会让你失望。再次感谢你的回答,但它不起作用:/,无论如何,我希望有一天我能找到窍门:P
default:
    if (speech.ToLower().Contains("search for")) // See if the string contains the 'search for' string.
    {
         var dictationGrammar= new DictationGrammar();
            sre.LoadGrammarAsync(dictationGrammar);
string url = "https://www.google.com.au/search?q=" + dictationGrammar;

     System.Diagnostics.Process.Start(url);

    }
    break;