En una entrada anterior veíamos como interpretar los comandos de voz. Ahora vamos a ver hacer que el bot de respuesta lo más naturales posibles en lenguaje hablado.
La forma más sencilla y rápida es tener respuestas predefinidas. Lo malo de este sistema es que la respuesta es siempre igual y queda muy poco natural. Usando la librería jsBotVoice es tan sencillo como usar el modificador * delante de la cadena y esa cadena será enunciada literalmente.
voice.talk("*Este texto se lee literal");
Para aportar algo de variedad a la respuesta vamos a utilizar un modelo muy simple basado en diccionarios. La idea es que cada palabra de la frase pueda reemplazarse por varias expresiones similares, eligiéndose una al azar lo cual dota al bot de variedad en las respuestas. Lo primero será definir el diccionario.
var spanish_dictionary = { "hi": ["hola", "saludos"], "person": ["humano","ser"], "yes": ["si","afirmativo"], "no": ["no","negativo"], "ok": ["vale", "de acuerdo", "hecho"] };
Una vez definido para usarlo solo hemos de crear una frase con esos tokens
voice.talk("hi person");
Esta linea pueda dar varios posibles resultados:
hola humano
saludos humano
hola ser
saludos ser
Si queremos aladir alguna palabra que se lea de forma literal en lugar de interpretarla como un token podemos ponerle delante el modificador #
voice.talk("#Buenas person");
Posibles resultados:
buenas humano
buenas ser
Por otro lado podemos personalizar aun más las respuestas usando variables, para ello usamos el nombre de la variable precedido de un $ . Las variables han de ir almacenadas en el mapa voice.data
voice.data["name"] = "Cubiwan"; voice.talk("hi $name");
Posibles resultados:
hola cubiwan
saludos cubiwan
Más documentación y ejemplos en jsBotVoice .
Pingback: Arquitectura de un bot que interactúa por voz | Construyendo a Chispas
Pingback: Generar frases de forma automática a partir de textos | Construyendo a Chispas