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

Entradas populares