programación en Julia Pt1: Chatbot
programación en Julia Pt1: Chatbot
Este es el primero de 3 programas que hice para familiarizarme con Julia, espero que les sea de utilidad, para esta pequeña serie de blogs seleccione aplicaciones que considero de un interés personal.
Chatbot
Un chatbot es un programa que puede llevar una conversación con un un ser humano, este tipo de programas se utilizan comúnmente en las áreas de atención al cliente, estos programas pueden variar en su estructura y complejidad, para contextos bien definidos suelen funcionar muy bien pero en una charla abierta la complejidad del contexto suele ser el talón de Aquiles de estos algoritmos, aun así existen algunos que han superado la "prueba de Turing" (remarco especialmente las comillas), entre los chatbots mas famosos podemos encontrar a ELIZA que fue un parte aguas en su época.
Maquinas de estado
Las maquinas de estado visto de una manera muy simplificada son abstracciones que cuentan con varios estados, cuando estas maquinas reciben una entrada la evalúan y decide a que estado pasa, estas maquinas son las mas utilizadas para hacer chatbots en la industria debido a su simplicidad aunque no estan libres de problemas.
A continuación se puede ver el diagrama simplificado del chatbot "Julia".
Regex
Las Regex o expresiones regulares (Regular Expression) son un tipo de dato que es de mucha utilidad para evaluar cadenas de texto, un regex sirve para formular las condiciones que debe cumplir una cadena y este puede ser evaluado.
Estos son los Regex del chatbot "Julia".
#Regex
afirmacion=r"(si|claro|afirmativo)"i
negacion=r"(no|negativo)"i
famosos=r"(famosos|populares)"i
catnip=r"(catnip|droga|hierba)"i
egipto=r"(egip)"i
salud=r"(sano|salud|cuidados|consejo|tip)"i
astronauta=r"(astronauta|cosmonauta|espacial|espacio)"i
marinero=r"(marinero|marino|naval|acuatico)"i
britanico=r"(britanico|british|ingles)"i
regresar=r"(otras cosas|regresar|retroceder|atras)"i
Código
Técnicamente este tipo de chatbots relativamente sencillos es considerado como una de las Inteligencias Artificiales mas sencillas aunque esto aun cae controversia ya que no es capaz de aprender, la controversia es debido a la definición mas conservadora de que es IA.
Este es el código del chatbot "Julia".
#state machine
state=0
while state!=11
if state==0
println("Hola me llamo Julia mucho gusto 😃")
state=1
elseif state==1
println("¿quieres aprender sobre gatitos? 🐱")
o=readline(stdin)
if match(afirmacion, o)!=nothing
state=2
elseif match(negacion, o)!=nothing
state=10
else
println("perdon no te entendi 😬")
end
elseif state==2
println("¡¡Yay!! a mi tambien me encantan los gatitos 😸 ")
println("¿quieres apender de gatos famosos? ✨ ")
println("¿los efectos del catnip en tu michi? 🌿 ")
println("¿los gatitos en el antiguo Egipto? ☥ ")
println("¿algunos consejos sobre como mantener sano a tu gatito? 💖 ")
o=readline(stdin)
if match(famosos, o)!=nothing
state=3
elseif match(catnip, o)!=nothing
state=4
elseif match(egipto, o)!=nothing
state=5
elseif match(salud, o)!=nothing
state=6
else
println("perdon no te entendi 😬")
end
elseif state==3
println("Conosco tres gatos que te podrian interesar")
println("Una gatita astronauta 🌔")
println("Un gato marinero 🌊")
println("Un gato que trabaja para el gobierno britanico 👑")
println("¿o quieres aprender otras cosas sobre los gatos? 🔙")
o=readline(stdin)
if match(astronauta, o)!=nothing
state=7
elseif match(marinero, o)!=nothing
state=8
elseif match(britanico, o)!=nothing
state=9
elseif match(regresar, o)!=nothing
state=2
else
println("perdon no te entendi 😬")
end
elseif state==4
println("El catnip o hierba gatera es una planta que tiene")
println("efectos psicotropicos en los gatos, dependiendo el")
println("caso puede causar que los michis se pongan juguetones")
println("o se relajen, esta hierba es inofensiva para ellos y")
println("hay gatos a los que no les causa efecto, de igual manera")
println("a los gatos que aun no han llegado a su madurez sexual")
println("no les causa efecto, siempre que le des catnip a tu michi")
println("debe ser con supervision para evitar accidentes 🌿")
println("¿quieres aprender mas sobre gatitos?")
o=readline(stdin)
if match(afirmacion, o)!=nothing
state=2
elseif match(negacion, o)!=nothing
state=10
else
println("perdon no te entendi 😬")
end
elseif state==5
println("Los gatos en el antiguo egipto eran considerados")
println("como la encarnacion de la diosa Bastet, lo que")
println("les dio un estatus de criaturas sagradas, en la")
println("ciudad de Bubastis se constuyo el mas importante")
println("templo dedicado a Baset y era considerado el centro")
println("del culto a los gatos ☥")
println("¿quieres aprender mas sobre gatitos?")
o=readline(stdin)
if match(afirmacion, o)!=nothing
state=2
elseif match(negacion, o)!=nothing
state=10
else
println("perdon no te entendi 😬")
end
elseif state==6
println("¡¡¡ recuerda si tienes alguna preocupacion por")
println("tu michi debes ir inmediatamente al veterinario!!!")
println("El mejor consejo que te puedo dar es que estes muy")
println("atento a cualquier cambio en el comportamiento de")
println("tu gato, estos cambios pueden deberse a estres")
println("o a que tenga algun dolor")
println("¿quieres aprender mas sobre gatitos?")
o=readline(stdin)
if match(afirmacion, o)!=nothing
state=2
elseif match(negacion, o)!=nothing
state=10
else
println("perdon no te entendi 😬")
end
elseif state==7
println("Félicette una gata blanquinegra, fue el primer")
println("ejemplar de gato en ser enviado al espacio exterior")
println("fue lanzada el 18 de octubre de 1963 por Francia")
println("¿quieres aprender mas sobre gatitos?")
o=readline(stdin)
if match(afirmacion, o)!=nothing
state=2
elseif match(negacion, o)!=nothing
state=10
else
println("perdon no te entendi 😬")
end
elseif state==8
println("Sam el Insumergible era el nombre del gato de un")
println("barco alemán que al parecer prestó servicio en la")
println("Marina Real británica y la Kriegsmarine alemana durante")
println("la Segunda Guerra Mundial, llegando a estar a bordo")
println("de tres buques y sobrevivir al hundimiento de todos ellos")
println("¿quieres aprender mas sobre gatitos?")
o=readline(stdin)
if match(afirmacion, o)!=nothing
state=2
elseif match(negacion, o)!=nothing
state=10
else
println("perdon no te entendi 😬")
end
elseif state==9
println("El Ratonero Jefe de la Oficina del Gabinete es el título")
println("oficial del gato residente del Primer Ministro del Reino")
println("Unido en 10 de Downing Street, el cargo actual lo tiene")
println("Larry Cameron")
println("¿quieres aprender mas sobre gatitos?")
o=readline(stdin)
if match(afirmacion, o)!=nothing
state=2
elseif match(negacion, o)!=nothing
state=10
else
println("perdon no te entendi 😬")
end
elseif state==10
println("Nos vemos pronto 😸")
state=11
else
state=0
end
end
Espero que este pequeño blog te sea de utilidad, puedes descargar el código del repositorio https://gitlab.com/josekun13/demosjulia
Si quieres ver mas de mis proyectos puedes checar www.jose-navarro.info
También pueden seguirme en twitter @navarro_joselo
Comentarios
Publicar un comentario