Speech macro diccionario


Speech macro diccionario lo que hace es buscar en una pagina el significado de una palabra, sin embargo no es sólo un comando de petición y respuesta sino que consulta si la palabra a buscar es la correcta o no.

Además, guarda un txt en una carpeta específica para que la próxima vez que se consulte por una misma palabra, esta no sea buscada en internet sino que en ese txt guardado.

El siguiente es el macro detallando algunas partes. (Sólo deben quitar el texto seguido de las //, copiar a un txt y luego a un macro, ya que es posible se copie con un formato que no reconocerá el macro).

El macro

Etiquetas de inicio

<?xml version=”1.0″ encoding=”UTF-16″?>
   <speechMacros>

Pregunta y guarda el valor de la pregunta

<command>
   <listenFor>[Chris] que significa […]</listenFor> //El comando para consultar a nuestro asistente ([Chris] contiene el nombre que pongamos en <rule name=”Chris”> por la palabra representada por […])
   <waitFor seconds=”0.2″/> //Esperamos 0.2 segundos
   <setState name=”p_quesign” value=”{[…]}”/> //Guardamos el valor […] con el nombre p_quesign para reutilizarlo mas adelante
   <setState name=”quesign” value=”activa” /> //Confirmamos que el comando de pregunta esta activo
   <speak>¿Desea el significado de {[p_quesign]} ?</speak>  //El asistente consulta si la palabra guardada es la que deseamos busque su significado
</command>

Ejecuta el vbscript para buscar la palabra consultada

<command>
   <stateIsSet name="quesign" value="activa" /> //Utilizamos un “if”. Si la pregunta está activa, haremos lo que sigue
   <listenFor>[Correct]</listenFor> //Si confirmamos o decimos que es correcto (según <rule name=”Correct”>)
   <speak>Un momento señor</speak>
   <waitFor seconds=”1″/>
   <script language="VBScript"> //Trabajará un vbscript que buscará la palabra y la guardará en un txt para luego reproducirla (de texto a voz)
      <![CDATA[
         Dim fso
         Set fso = CreateObject("Scripting.FileSystemObject")
         If (fso.FileExists("RUTA_DONDE_SE_GUARDARA_EL_ARCHIVO\{[p_quesign]}.txt")) Then
            EstadoDeArchivo = True
         Else
            EstadoDeArchivo = False
         End If
         If EstadoDeArchivo = False then
            Dim objFSO, IE
            Dim objOtF
            Proceso = Command.ResolveProperties("{[p_quesign]}")
            On Error Resume Next
            Set objFSO = CreateObject("Scripting.FileSystemObject")
            Set IE = CreateObject("InternetExplorer.Application")
            Set WshShell = CreateObject("WScript.Shell")
            IE.Navigate "http://www.wordreference.com/definicion/" & Proceso
            IE.Visible = False
            Do While IE.Busy
            Application.wait(2.0)
            Loop
            For Each text In IE.Document.getElementsByTagName("ol")
               With objFSO.OpenTextFile("RUTA_DONDE_SE_GUARDARA_EL_ARCHIVO\{[p_quesign]}.txt", 8, True)
               .WriteLine text.innerText
           End With
           Next
           IE.Quit
           line = "RUTA_DONDE_SE_GUARDARA_EL_ARCHIVO\{[p_quesign]}.txt"
           txt = fso.OpenTextFile(line, 1).ReadAll
           txt.writeline txt
           txt.Close
           Application.Speak("" & txt )
        Else
           line = "RUTA_DONDE_SE_GUARDARA_EL_ARCHIVO\{[p_quesign]}.txt"
           txt = fso.OpenTextFile(line, 1).ReadAll
           Application.Speak("" & txt )
           Application.wait(1.5)
           Application.Speak("Lectura finalizada")
        end if
     ]]>
   </script>
   <setState name="p_quesign" /> //Reseteamos la palabra buscada (queda en nada)
   <setState name="quesign" /> //Desactivamos el comando
</command>

Verifica la palabra a buscar

<command>
   <stateIsSet name="quesign" value="activa" /> //Si el comando está activo y decimos
   <listenFor>No […]</listenFor> //No y luego la palabra
   <setState name="p_quesign" value="{[…]}"/> //Guardará la nueva palabra
   <setState name="quesign" value="activa" /> //Activará el nuevo comando
   <speak>¿Desea el significado de {[p_quesign]}?</speak> //Preguntará si es la palabra correcta
</command>

Cancelar lectura

<command>
   <stateIsSet name="quesign" value="activa" />
   <listenFor>[Stop] lectura</listenFor> //Con este comando cancelamos la lectura
   <listenFor>No</listenFor>
   <setTextFeedback>Lectura cancelada</setTextFeedback>
   <setState name="p_quesign" />
   <setState name="quesign" />
   <speak speakFlags="2">Lectura cancelada</speak>
   <waitFor seconds="1"/>
</command>

Regla para háblame

<rule name="Hablame">
   <list>
      <p>hablame</p>
      <p>habla</p>
      <p>cuentame</p>
      <p>dime que sabes</p>
      <p>qué sabes</p>
   </list>
</rule>

Regla para quienes

<rule name="Quienes">
   <list>
      <p>quien es</p>
      <p>sabes que es</p>
      <p>que es</p>
      <p>sabes quien es</p>
      <p>que puedes decirme de</p>
      <p>que me puedes decir de</p>
   </list>
</rule>

Regla para de

<rule name="De">
   <list>
      <p>de</p>
      <p>sobre</p>
   </list>
</rule>

Regla para stop

<rule name="Stop">
   <list>
      <p>cancelar</p>
      <p>detener</p>
      <p>parar</p>
      <p>estop</p>
      <p>terminar</p>
      <p>finalizar</p>
   </list>
</rule>

Regla para correcto

<rule name="Correct">
   <list>
      <p>si</p>
      <p>sí</p>
      <p>correcto</p>
      <p>es correcto</p>
      <p>así es</p>
      <p>afirmativo</p>
   </list>
</rule>

Regla para chris

<rule name="Chris">
   <list>
      <p>Christine</p>
   </list>
</rule>

Firma RSA y cierra de etiqueta de inicio

   <Signature>
      ACÁ VA EL CÓDIGO GENERADO DE LOS SPEECH MACROS
   </Signature>
</speechMacros>

Como pueden ver, speech macro diccionario ayuda a crear interacción con el asistente al dar la posibilidad de guardar palabras o comandos hasta que sean solicitados nuevamente. Por ejemplo: Si creamos un macro en el que el asistente consulte nuestro nombre, podemos guardarlo hasta que le preguntemos si lo recuerda.

Pueden descargar el macro de ESTE LINK.

Si lo descargan, no olviden cambiar la firma RSA del final y la ruta donde guardará el txt. También deben activar IExplore, ya que utiliza ese navegador en segundo plano para realizar la búsqueda de la palabra.