Olivier Clavel - Staf14 - Rapport.

"The Bat bot !"

ou comment se familiariser à l'emploi des expressions régulières


Le but de cet exercice était de construire un agent capable de reconnaitre certaines structures syntaxiques de la langue naturelle et de fournir une réponse. Ces structures sont définies sous la forme d'expressions régulières.

J'ai construit mon robot sur le Moo. J'ai choisi cet endroit parce que je m'y trouve assez souvent et que cela me donnait l'occasion de comprendre un peu plus la philosophie de programmation dans le Moo. Je suis parti d'un robot générique déjà existant, c'est à dire que tous le programme de "matching" existait déjà. Il ne restait donc plus qu'à modifier les expressions aux quelles le robot réagit. Comme mon bureau est un grotte, j'ai trouvé naturel de la doter d'une chauve-souris. Le nom "The Bat" (simple traduction) c'est imposé de lui même

Les features du robot

S'il est en activité, le robot écoute ce qui se passe dans la piece ou il se trouve. Il peut donc réagir à toute chaine de caractère résultant de :

Je signalerais immediatement que le robot peut être mis en sommeil. En effet, la conversation peut devenir fort ennuieuse, surtout si on discute à plusieurs dans la pièce. Le bot se "sent obligé" de répondre à chaque chaine de caractère qu'il rencontre.

Le type de structures aux quelles le bot peut répondre son divisées en trois catégories :

Chaque fois que le bot reçoit une chaine de caractère, il l'analyse et cherche une structure correspondante dans l'ordre décrit ci-dessus (pats => keywords => guestresponses => questionresponses > randomresponses). S'il trouve un structure correspondante, il donne la réponses associée (s'il n'y en a qu'une) ou choisi aléatoirement dans la liste.

Mon robot a une fonction essentielle : amuser les gens. Je l'ai cependant doté de quelques connaissances en spéléologie (une chauve souris dans une grotte se devait de connaitre quelques bases !). Il peut donc répondre, pour certains mots prédéfinis, à des questions de la forme "qu'est ce que...." ou "c'est quoi.....".

Hormis ces quelques connaissances très précises, il peut reconnaitre des structures générales comme "je pense que...." et fournir une réponse adaptée ("si tu penses que...., alors je te crois". Cependant, on touche ici aux limites de mes expressions régulière. Imaginons la phrase suivante : "Je pense que je vais aller me coucher". La réponse => "Si tu penses que je vais aller me coucher, alors je te crois".

Faire un analyseur de syntaxe n'est pas chose aisée. Comment faire reconnaitre la personne à laquelle le verbe est conjugué, transformer à la bonne personne pour la réponse ? Je comprend mieux pourquoi les correcteurs de grammaire ne sont pas encore au point.

Si la conversation de mon robot est très limité, en revanche je suis sur d'une chose : mon utilisation de la fonction "recherche-remplace" dans Emacs va devenir beaucoup plus efficace !

Tips pour la programmation

L'objet bot est doté d'un petite interface de programmation en ligne de commandes qui peut être utile pour commencer et comprendre comment il fonctionne. Cependant, Un fois que l'on a compris comment il fonctionne, il devient beaucoup plus aisé d'éditer ses variables dans un editeur de texte et de les envoyer sur le moo en un seul bloc (sans parler du temps de connexion qui devient beaucoup plus court).

Pour voir le contenu d'une variable, taper ";#<objnumber>.<variable>"

Pour changer le contenu d'une variable, taper ";#<objnumber>.<variable> = <contenu>"

Par exemple, pour voir le contenu de la variable "pats" sur mon robot (numéro 5858), je tape ";#5858.pats"

ATTENTION :