News
: 22 novembre 2002 : rmutt 1.2 est sorti. Téléchargez-le pour UNIX et MacOS X.
"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.
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.
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.