Annonce

Réduire
Aucune annonce.

[Débutant] Chatterbot en Python

Réduire
X
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • [Débutant] Chatterbot en Python

    Bonjour à tous !
    Nouveau challenge pour débutant, l'objectif est de créer un chatterbot en Python.

    Qu'est-ce qu'un chatterbot ?

    Il s'agit d'une entité artificielle capable de discuter avec vous.
    Rien d'intelligent là dedans. Mais si vous le programmez correctement, il peut bluffer son interlocuteur jusqu'à lui faire croire qu'il est bien un humain.

    Exemple de discussion :
    IA: Bonjour, comment t'appelles tu ?
    You: Mon pseudo est Yarflam
    IA: Comment vas-tu Yarflam ?
    You: Bien.
    [...]

    Quelques liens pour tester :
    http://www.jabberwacky.com/
    http://demo.vhost.pandorabots.com/pa...9d8db85e36d4b9
    http://demo.vhost.pandorabots.com/pa...7237bf9e362fe0
    http://nlp-addiction.com/eliza/
    http://alicebot.blogspot.fr/

    Documentation

    Les chatterbots ont un algorithme similaire à SI A est dans B alors répondre C.
    Exemple:
    Code:
    #!/usr/bin/python3
    
    msg="Bonjour, comment vas-tu ?"
    # ...
    if "comment" in msg and "va" in msg: rep="Bien et toi ?"
    # ...
    print(rep)
    Après on peut l'améliorer en récupérant des valeurs (nom, âge, sexe, question précédente, etc ...) ou en donnant une réponse aléatoire. Même plus loin en mémorisant une réponse.

    Au fond tant que le robot n'est pas vraiment intelligent, vous avez l'imagination pour le combler de module complémentaire. Exemple : Gestion du bureau, répétition de tâche, traduction, affichage de la météo ... Your creativity is your way !

    Si vous avez besoin d'aide n'hésitez pas.
    Good luck !
    ~ Yarflam ~

    ❉ L'Univers se dirige vers son ultime perfection ❉

  • #2
    Wow pas mal, j'avais jamais pensé à programmer un truc du genre, mais moi j'suis plus que débutant, ça me parait compliqué l'algorithmique,mais ça à l'air intéressant, j'vais fouiller sur le fofo pour trouver (:
    Juste comme ça, tu le rentres dans quoi ton algo ?
    "L'intelligence artificielle n'est rien comparée à la stupidité naturelle"

    Commentaire


    • #3
      Le souci avec ce genre de bot c'est qu'il faut rentrer un grand nombre d'informations (réponses préparées). C'est pas tant le script qui est délicat, c'est le temps investi pour préparer les réponses et trouver une grosse batterie de questions que les gens seront supposément amenés à poser.
      sigpic

      Cyprium Download Link

      Plus j'étudie plus j'me rends compte que je n'sais rien.

      †|

      Commentaire


      • #4
        Exacte Sakarov !
        Bien que l'algorithme n'est pas à négliger. Pour récupérer ou stocker des informations dans la base de données, il faut concevoir une belle architecture.
        D'ailleurs je conseille aux futurs challengeurs de se documenter sur l'AIML. Qui est une base de donnée XML développé par le site internet Pandorabot pour faire fonctionner un bon nombre de bots en ligne.

        Juste comme ça, tu le rentres dans quoi ton algo ?
        Dans une boucle infinie à l'intérieur d'une class, pour plus de propreté.
        Après c'est une bonne occasion de prendre une feuille de brouillon avec un stylo et de commencer à réfléchir. Passer l'algorithme sur écrit, ça rend le schéma beaucoup simple à visualiser.

        Demain je donnerai une suite à la documentation.


        Petit exemple d'un chatterbot en Python.

        Bot.py

        Code:
        #!/usr/bin/python
        """
        
        Delta version 2.0
        Par Yarflam
        
        Python 2.7
        
        """
        import base64
        
        class ia:
         def __init__(self,file):
           self.file=file
           self.data=base64.b64decode(open(self.file,'r').read())
           self.mode=1
           print "\tIA: Bonjour !"
         def new_data(self):
           open(self.file,'w').write(base64.b64encode(self.data))
         def speak(self):
           while 1:
               self.msg=raw_input("\t>> ").lower().replace(',','')
               if self.msg[0] == '$': self.mode=0 if self.msg[1] == '0' else 1
               else: self.answer()
         def answer(self):
           if self.mode == 0:
               print "\tIA: Que dois-je repondre ?"
               self.ans=raw_input("\t$> ")
               self.data=self.data+base64.b64encode(self.msg+"\n"+self.ans)+"\n"
               self.new_data()
               print "\tIA: Merci !"
           else:
               self.count=0
               self.ans=""
               self.db=[0,self.data.split('\n'),'']
               while self.db[0] < len(self.db[1]):
                   self.db[2]=base64.b64decode(self.db[1][self.db[0]]).split("\n")
                   if self.vs() == 1: self.ans=self.db[2][1]
                   self.db[0]=self.db[0]+1
               if len(self.ans) == 0: print "\tIA: Je ne comprend pas."
               else: print "\tIA: "+self.ans
         def vs(self):
           i=[0,self.msg.split(' '),0,0]
           while i[0] < len(i[1]):
               if i[1][i[0]] in self.db[2][0]: i[2]=i[2]+1
               i[0]=i[0]+1
           i[3]=1 if i[2] > self.count else 0
           self.count=i[2]
           return i[3]
        
        bot=ia('data.txt')
        bot.speak()
        data.txt

        Code:
        YUdWc2JHOGdPeWtLVTJGc2RYUXVJRU52YlcxbGJuUWdkbUZ6TFhSMUlEOD0KWW1sbGJpQmxkQ0IwYjJrZ1B3cFRkWEJsY2lBaElFcGxJSE4xYVhNZ1pXNGdabTl5YldVdQo=
        Il existe deux modes : apprentissage et lecture.
        Par défaut il est sur le mode lecture. Pour l'activer en mode apprentissage, tapez '$0'. Et l'inverse '$1' pour mettre à nouveau le mode lecture.

        Vous pouvez aussi effacer le fichier data.txt pour supprimer la base de donnée.
        Bon challenge !
        Dernière modification par Yarflam, 12 avril 2013, 11h16.
        ~ Yarflam ~

        ❉ L'Univers se dirige vers son ultime perfection ❉

        Commentaire


        • #5
          Merci, c'est assez simple a réalisez le plus "long" et de rentrez toute les commandes.

          Commentaire

          Chargement...
          X