News : 22 novembre 2002 : rmutt 1.2 est sorti. Téléchargez-le pour UNIX et MacOS X.  

 

Qu'est-ce que rmutt ?  

 

"rmutt" est un générateur de texte aléatoire à partir de grammaires non contextuelles (a.k.a. réseaux récursifs de transition). Il a pour modèle le récent grand "moteur dada" d'Andrew C. Bulhak, qu'il a utilisé pour écrire l'hilarant Postmodern Thesis Generator.

 

J'ai utilisé le moteur de dada pour écrire generic sports page generator pour newspoetry.com. Bien que le moteur de dada ne soit pas en cours de développement actif, cela fonctionne très bien et je le recommande fortement.  

 

J'avais écrit ces générateurs dans divers langages depuis environ 1983. L'incarnation la plus récente avant rmutt a été une version Perl basée sur "Bonzo" d'Adam Caïn, un pilote de moteur de steganographie.  

J'ai utilisé cela pour écrire les gastronomiquement bizarres "Surrecipe" et wine review generator.

Rmutt est baptisé du nom de l'alter ego de Marcel Duchamp, Richard Mutt qui est responsable du l'"urinoir" prêt à l'emploi, un polisson infâme d'artiste dadaiste.  Voici un grand site de Duchamp (en français).

Rmutt ne doit pas être confondu avec le lecteur de courrier mutt d'UNIX.  

 

Ce que rmutt fait et comment il le fait

 

rmutt prend comme entrée un ensemble de règles grammaticales écrites par l'utilisateur, dont chacune représente un ensemble de choix qui peuvent être faits à un niveau particulier de description grammaticale.

Par exemple une grammaire pourrait indiquer qu'une "personne" peut être "Fred" ou "Jennifer".

rmutt fait alors ces choix aléatoirement, ayant pour résultat le texte qui se conforme à la grammaire mais est par ailleurs imprévisible.  

 

Les grammaires dans rmutt n'ont pas besoin d'avoir un quelconque rapport à la grammaire d'un langage humain. Par exemple, rmutt peut être employé pour produire des instructions textuelles pour la production de graphiques ou de musique.  

 

rmutt diffère de mes efforts précédents, et est semblable au moteur dada, en ce qu'il tient compte du comportement contextuel. En d'autres termes, ses grammaires ne sont pas réellement sans contexte. Par exemple un choix fait dans une règle peut affecter la définition d'une autre règle. En outre, des transformations textuelles peuvent être appliquées à la sortie des règles.   

 

Un exemple simple  

 

Voici une grammaire simple de rmutt. Pour une explication de la syntaxe voyez la documentation.

 

s: np " " vp ".";
np: art " " noun | propn;
art: "the" | "a";
noun: "cat" | "dog";
propn: "Joe" | "Beth";
vp: iv | tvp;
iv: "meowed" | "barked";
tvp: tv " " np;
tv: "scolded" | "loved";

 

Chaque règle a un nom et est définie comme un ensemble de choix, séparé par des barres verticales. Chaque choix est défini comme un ordre de ce que le nom d'une règle peut appeler à ce point dans la grammaire, ou une chaîne de caractères littérale à imprimer.  Dans la première règle, "s" est défini comme "np" suivi d'un espace suivi d'un "vp" suivi d'un point. Dans la deuxième règle, le "np" est défini en tant que l'un ou l'autre "art" suivi d'un espace suivi d'un "nom" ; ou un "propn". Et ainsi de suite. Voici des exemples de chaînes de caractères produites par rmutt avec cette grammaire :

 

Joe barked.
a cat scolded the dog.
Joe loved the dog.
Beth scolded Beth.
Beth meowed.
Joe loved a dog.
a dog barked.

 

 

Vous pouvez voir que la sortie à chaque point dépend des règles appelées pendant que rmutt traverse la hiérarchie des choix.

Maintenant ajoutons quelque chose de simple pour démontrer que les règles n'ont pas besoin d'avoir un rapport hiérarchique strict l'une avec l'autre.

Dans cet exemple nous ajoutons un "tvp" qui inclut un "s" :

 

s: np " " vp ".";
np: art " " noun | propn;
art: "the" | "a";
noun: "cat" | "dog";
propn: "Joe" | "Beth";
vp: iv | tvp;
iv: "meowed" | "barked";
tvp: tv " " np
| "said that " s;
tv: "scolded" | "loved";

Cette sorte de circularité est parfaitement légale dans rmutt. Voici des exemples de chaînes produites par cette grammaire :

Joe scolded Beth.
Beth said that Joe meowed..
a cat barked.
a dog said that a cat meowed.
Beth said that a cat said that Joe said that the dog meowed....

Notez que dans la dernière chaîne de caractères d'exemple, le "s" supérieur a contenu un "s" qui a contenu son propres "s" qui lui-même a contenu un "s".

C'est permis selon la grammaire, puisque n'importe quel "s" peut contenir un autre "s". En fait, rmutt fonctionnerait indéfiniment comme ceci s'il n'y avait aucun choix disponible ne contenant pas le "s" inclus.

Voyez-vous un problème avec la grammaire ? Il y a des points multiples après les exemples contenant "said that". C'est parce qu'il y a un point dans la définition de "s", ainsi n'importe quelle chaîne de caractères contenant plus d'un "s" aura des points multiples . On peut y remédier ainsi :

top: s ".";
s: np " " vp;

np: art " " noun | propn;
art: "the" | "a";
noun: "cat" | "dog";
propn: "Joe" | "Beth";
vp: iv | tvp;
iv: "meowed" | "barked";
tvp: tv " " np | "said that " s;
tv: "scolded" | "loved";

Cet exemple simple est juste un aperçu de ce que rmutt peut faire.

Pour plus d'information voyez la documentation en ligne et essayez la demo.

rmutt et ce site Web ©2001-2002 par  Joe Futrelle.

rmutt peut être librement utilisé et distribué tant qu'aucune modification du nom de l'auteur n'est faite.

traduction française : ©2003 Jean-Pierre Le Moine.