Búsqueda de Google a través de voz en c #

Estoy creando mi propio progtwig jarvis y cuando digo “buscar” + algo quiero abrir Google y buscar “algo”. Aquí mi código … (no lo pego todo)

private void Form1_Load(object sender, EventArgs e) { _recognizer.SetInputToDefaultAudioDevice(); _recognizer.LoadGrammar(new Grammar(new GrammarBuilder(new Choices(File.ReadAllLines(@"C:\Users\Cpyros\Desktop\lefteris\Commands.txt"))))); _recognizer.SpeechRecognized += new EventHandler(_recognizer_SpeechRecognized); _recognizer.RecognizeAsync(RecognizeMode.Multiple); } void _recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) { int ranNum = rnd.Next(1, 10); string speech = e.Result.Text; switch (speech) { //GREETINGS case "hello": case "hello jarvis": if (ranNum  5) { JARVIS.Speak("Hi"); } break; case "goodbye": case "goodbye jarvis": case "close": case "close jarvis": JARVIS.Speak("Until next time"); Close(); break; case "jarvis": if (ranNum  4) { QEvent = ""; JARVIS.Speak("Yes?"); } break; //WEBSITES case "open facebook": System.Diagnostics.Process.Start("http://www.facebook.com"); break; case "open google": Process.Start("https://www.google.gr/?gws_rd=cr"); JARVIS.Speak("Okay sir"); System.Windows.Forms.SendKeys.SendWait("^%."); break; here i want to add a case like "search for" + the thing i want to search... 

¿algunas ideas?

Google tiene una cadena de consulta que puede usar para ir directamente a una cadena de búsqueda de entrada de usuario. Tomemos como ejemplo lo siguiente:

https://www.google.com/#q=test+and+such

(Gracias a Matt R, aprendí que también hay https://www.google.com/search?q=test+and+such )

Luego puede usar una modificación de su statement de caso anterior de Google:

 default: if (speech.Contains("search for") { Process.Start("https://www.google.com/#q=" + userInput); ... 

Deberá asegurarse de que userInput esté codificado en URL primero haciendo

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

Como el texto del argumento de cambio no coincidirá con una statement de caso si tiene elementos de búsqueda después de ‘buscar’, puede poner esto como su statement por default :

 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; 

Esto no funcionará porque su “grammarbuild” no reconoce las palabras que no están cargadas en su “grammarbuild”. (Creo) Todavía estoy intentando esto también.

Tengo el mismo código fuente. debe agregar el comando de búsqueda en el archivo command.txt predeterminado y asegurarse de que no tiene nada en los comandos.cs personalizados relacionados con la frase

Como dijo Nikki O antes, esto no funcionará ya que no tienes palabras en tu GrammarBuilder. Puedes simplemente cargar gramática múltiple o simplemente hacer:

 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; 

Esto cargará su texto de dictado que no está en su gramática predeterminada. No probé este código pero esto debería funcionar.

Intereting Posts