Le pipotron

Le pipotron

> Programmation

Le pipotron est un algorithme qui permet de créer aléatoirement une phrase à partir de mots pré-définis mis bout à bout. Le but principal du pipotron est le divertissement, car le texte étant généré aléatoirement, il a généralement un sens et une sonorité étrange et amusante.

Avoir un pipotron peut paraître futile mais il peut, selon les cas, effrayer, faire rire, ou encore créer un état de sidération chez l'ennemi par son contenu incongru, le but étant chaque fois de déstabiliser l'adversaire et de profiter de la déconcentration occasionnée pour mettre en place une tactique qui mène à la victoire.

Pour créer un pipotron, il faut d'abord écrire une base de données (ou BDD), c'est-à-dire des tableaux contenant la liste des mots pouvant potentiellement faire partie de la phrase, puis l'algorithme lui-même qui va se charger de construire une phrase à partir de la BDD, en piochant des mots au hasard dedans. Bien sûr, le texte généré doit avoir une grammaire, une conjugaison et une orthographe correctes afin d'obtenir une phrase satisfaisante, bien que la signification elle-même puisse être insolite et décalée.

Le pipotron est un algorithme à la complexité extrêmement variable : il peut aussi bien ne produire qu'une simple phrase constituée d'un sujet pré-construit et d'un verbe que de faire des phrases complexes avec plusieurs propositions, des accords de verbes, la gestion du genre et du nombre, des compléments circonstanciels...

Exemple de pipotron rudimentaire

Voilà pour la théorie, maintenant un peu de pratique. Nous allons écrire un pipotron très simple (en LeekScript), comme la première catégorie citée ci-dessus.

La BDD Les phrases générées par notre pipotron seront composées :

nous allons donc avoir deux tableaux : un tableau sujets et un tableau verbes :

global sujets = []; global verbes = [];

C'est maintenant une des parties les plus ludiques de la fabrication d'un pipotron : le choix du contenu de la BDD. En effet, pour que nos phrases ne se ressemblent pas toutes, nous devons introduire le plus de mots possible dans notre BDD.

Dans sujets, par exemple, nous allons mettre les chaînes suivantes :

et dans verbes :

Ce sont des exemples, vous pouvez bien sûr mettre les mots que vous voulez dans votre BDD (à vous d'être inventif et original), mais ATTENTION, pour être sûr que la phrase soit correcte, ne mettez que des verbes et des sujets qui correspondent entre eux ! Par exemple, tous mes verbes sont conjugués à la troisième personne du singulier car tous mes sujets sont des groupes nominaux au singulier. Si j'avais mis "les chiens" au lieu de "le chien", j'aurais pu tomber sur une phrase du type "les chiens dort" qui est bien sûr incorrecte.

De plus, il est vraiment conseillé de ne mettre dans les tableaux que des chaînes du type précis que le nom du tableau laisse entendre. Par exemple, dans verbes, je n'ai mis que des verbes, et pas des verbes avec adverbe ("court rapidement" par exemple) ou avec COD. Dans sujets je n'ai pas mis de nom ou d'adjectif isolé, seulement des sujets complets. Cette précaution vous servira dans des pipotrons plus complexes à clarifier votre code et à limiter les erreurs grammaticales.

Nous avons donc à présent une BDD complète, composée de sujets et de verbes :

global sujets = [ "le chien", "un avion", "la grosse tarte", "Luke Skywalker", "un poney rose", "le kangourou de ma grand-mère", "un grand ballon velu rempli de mayonnaise roumaine" ]; global verbes = [ "court", "glisse", "crie", "grandit", "dort", "miroite", "s'assoit" ];

L'algorithme

Maintenant que nous avons notre BDD, nous pouvons passer à l'algorithme du pipotron, que nous placerons dans une fonction getPipotron. Notre algorithme doit :

Je vous conseille de créer une fonction randTab qui prend un valeur aléatoire dans un tableau non associatif. C'est donc la fonction qui va effectuer les fameux choix de mots aléatoires caractéristiques du pipotron. Elle devrait ressembler à ça :

function random(array){ return array[randInt(0, count(array))]; }

Nous pouvons à présent créer une variable phrase qui contiendra la phrase à dire :

function getPipotron(){ var phrase = random(sujets) + " " + random(verbes); } function random(array){ return array[randInt(0, count(array))]; }

Le problème c'est que notre phrase n'en est pas une. En effet, elle ne possède ni majuscule au début, ni point à la fin. Nous devons donc créer une fonction addPonctuation afin de traiter notre phrase :

function addPonctuation(@text){ text += "."; //majuscule text = toUpper(charAt(text, 0)) + substring(text, 1, length(text) - 1); }

Il ne reste plus qu'à appliquer cette fonction à notre phrase et à renvoyer phrase et notre pipotron est terminé !

global sujets = [ "le chien", "un avion", "la grosse tarte", "Luke Skywalker", "un poney rose", "le kangourou de ma grand-mère", "un grand ballon velu rempli de mayonnaise roumaine" ]; global verbes = [ "court", "glisse", "crie", "grandit", "dort", "miroite", "s'assoit" ]; function getPipotron(){ var phrase = random(sujets) + " " + random(verbes); addPonctuation(phrase); return phrase; } function random(array){ return array[randInt(0, count(array))]; } function addPonctuation(@text){ text += "."; //majuscule text = toUpper(charAt(text, 0)) + substring(text, 1, length(text) - 1); }

Nous aurions pu directement déclarer nos sujets avec une majuscule et mettre un point à la fin de verbes dans la BDD, mais la solution actuelle est plus dynamique et offre plus de souplesse. En effet, imaginons que nous voulions faire une phrase plus complexe avec un COD après le verbe. Si nos verbes étaient déjà "prépointés", il y aurait un point au milieu de la phrase, avant le COD, et le texte ne finirait pas par un point. Vous l'avez compris, ajouter la ponctuation après avoir créé la phrase est une bonne habitude à prendre pour quand vous créerez des pipotrons plus élaborés.

Comme vous pourrez le constater en testant ce pipotron, les combinaisons de phrases sont très limitées, et il n'est pas rare d'obtenir deux fois exactement la même phrase. Cela vient du fait que ce pipotron est vraiment très simple, il n'y a que 7 sujets * 7 verbes = 49 phrases possibles. C'est l'avantage de complexifier son pipotron : obtenir des phrases plus longues, plus variées, et plus drôles.

Quelques pipotrons de la communauté

Plus d'informations sur ce topic des pipotrons.

Note : je vois venir les pointilleux, je n'ai pas parlé de la différence entre l'aléatoire et le pseudo-aléatoire dans cette présentation. Oui, un vrai pipotron devrait n'être constitué en théorie que de choix véritablement aléatoires, alors que les fonctions rand et randInt renvoient en réalité des nombres pseudo-aléatoires. La différence est en l'occurrence négligeable, les fonctions employées font très bien l'affaire pour nos pipotrons.