a3nm's blog

Trois petits chats assistés par ordinateur

La chanson Trois petits chats est une ritournelle bien connue :

Trois p'tits chats, trois p'tits chats, trois p'tits chats, chats, chats,
Chapeau d'paille, chapeau d'paille, chapeau d'paille, paille, paille,
Paillasson, paillasson, paillasson, -son, -son,
Somnambule, somnambule, somnambule, -bule, -bule...

La chanson continue de la sorte, chaque vers répétant en première syllabe la dernière syllabe du vers suivant, pour généralement finir par revenir à "Trois p'tits chats". De façon amusante, les chansons de cette forme semblent rares dans d'autres langues.

zorun a eu la mauvaise idée de me poser la question : serait-il possible de générer des chansons de ce type, voire des chansons plus longues, de façon automatique ? Ce billet répond par l'affirmative à cette importante question. Voici un exemple de chanson générée automatiquement, avec 86 vers, en utilisant Lexique :

Lingala, lingala, lingala, -la, -la,
Laticlave, laticlave, laticlave, -clave, -clave,
Clavecin, clavecin, clavecin, -cin, -cin,
Sainte nitouche, sainte nitouche, sainte nitouche, -touche, -touche,
Touchotter, touchotter, touchotter, -ter, -ter,
Télégramme, télégramme, télégramme, -gramme, -gramme,
Graminée, graminée, graminée, -née, -née,
Nécessaire, nécessaire, nécessaire, -saire, -saire,
Cervidés, cervidés, cervidés, -dés, -dés,
Démesure, démesure, démesure, -sure, -sure,
Zurichois, zurichois, zurichois, -chois, -chois,
Quadrature, quadrature, quadrature, -ture, -ture,
Turquerie, turquerie, turquerie, -rie, -rie,
Richissime, richissime, richissime, -sime, -sime,
Symétrie, symétrie, symétrie, -trie, -trie,
Triqueballe, triqueballe, triqueballe, -balle, -balle,
Baliveau, baliveau, baliveau, -veau, -veau,
Vocalise, vocalise, vocalise, -lise, -lise,
Liséré, liséré, liséré, -ré, -ré,
Réticule, réticule, réticule, -cule, -cule,
Culbuto, culbuto, culbuto, -to, -to,
Taurobole, taurobole, taurobole, -bole, -bole,
Bolcheviks, bolcheviks, bolcheviks, -viks, -viks,
Victimaire, victimaire, victimaire, -maire, -maire,
Mercredi, mercredi, mercredi, -di, -di,
Dipsomanes, dipsomanes, dipsomanes, -manes, -manes,
Managers, managers, managers, -gers, -gers,
Jerricane, jerricane, jerricane, -cane, -cane,
Canapé, canapé, canapé, -pé, -pé,
Pécheresse, pécheresse, pécheresse, -resse, -resse,
Restaurant, restaurant, restaurant, -rant, -rant,
Rancissure, rancissure, rancissure, -sure, -sure,
Survenue, survenue, survenue, -nue, -nue,
Numismate, numismate, numismate, -mate, -mate,
Matelot, matelot, matelot, -lot, -lot,
Locataires, locataires, locataires, -taires, -taires,
Thermostat, thermostat, thermostat, -stat, -stat,
Talmudiste, talmudiste, talmudiste, -diste, -diste,
Dysthymie, dysthymie, dysthymie, -mie, -mie,
Misogyne, misogyne, misogyne, -gyne, -gyne,
Gynéco, gynéco, gynéco, -co, -co,
Connétable, connétable, connétable, -table, -table,
Tableautin, tableautin, tableautin, -tin, -tin,
Tintamarre, tintamarre, tintamarre, -marre, -marre,
Marabout, marabout, marabout, -bout, -bout,
Boulangère, boulangère, boulangère, -gère, -gère,
Gerberas, gerberas, gerberas, -ras, -ras,
Radicale, radicale, radicale, -cale, -cale,
Califat, califat, califat, -fat, -fat,
Phallophore, phallophore, phallophore, -phore, -phore,
Formica, formica, formica, -ca, -ca,
Capitale, capitale, capitale, -tale, -tale,
Thalamus, thalamus, thalamus, -mus, -mus,
Muscadine, muscadine, muscadine, -dine, -dine,
Dynamo, dynamo, dynamo, -mo, -mo,
Monoplaces, monoplaces, monoplaces, -places, -places,
Placebo, placebo, placebo, -bo, -bo,
Bogomiles, bogomiles, bogomiles, -miles, -miles,
Milonga, milonga, milonga, -ga, -ga,
Galalithe, galalithe, galalithe, -lithe, -lithe,
Liturgie, liturgie, liturgie, -gie, -gie,
Gyrophare, gyrophare, gyrophare, -phare, -phare,
Pharmacie, pharmacie, pharmacie, -cie, -cie,
Silicate, silicate, silicate, -cate, -cate,
Catalpa, catalpa, catalpa, -pa, -pa,
Palikare, palikare, palikare, -kare, -kare,
Carambar, carambar, carambar, -bar, -bar,
Barricade, barricade, barricade, -cade, -cade,
Caducée, caducée, caducée, -cée, -cée,
Séfarade, séfarade, séfarade, -rade, -rade,
Radical, radical, radical, -cal, -cal,
Calamines, calamines, calamines, -mines, -mines,
Minéral, minéral, minéral, -ral, -ral,
Rallumage, rallumage, rallumage, -mage, -mage,
Magistrat, magistrat, magistrat, -trat, -trat,
Traversine, traversine, traversine, -sine, -sine,
Cinéma, cinéma, cinéma, -ma, -ma,
Martingale, martingale, martingale, -gale, -gale,
Galoubet, galoubet, galoubet, -bet, -bet,
Betterave, betterave, betterave, -rave, -rave,
Ravioli, ravioli, ravioli, -li, -li,
Libérale, libérale, libérale, -rale, -rale,
Ralenti, ralenti, ralenti, -ti, -ti,
Tisserande, tisserande, tisserande, -rande, -rande,
Rendement, rendement, rendement, -ment, -ment,
Mandoline, mandoline, mandoline, -line, -line,
Lingala, lingala, lingala, -la, -la,

Le reste de ce billet donne plus de détails sur la façon dont cette chanson a été calculée ; le code est également disponible.

J'utilise Lexique, que je trie en mettant d'abord les formes non-dérivées (e.g., le singulier avant le pluriel, même s'il y a parfois des erreurs), puis par ordre de fréquence décroissance (pour privilégier les mots courants en faveur des mots rares, même si le programme n'hésitera pas à utiliser un mot rare quand c'est la seule manière d'aller d'une syllabe à une autre).

Lexique indique heureusement des informations de découpage en syllabes au niveau phonétique et orthographique, donc il est facile de retenir les mots de trois syllabes. Je ne retiens que les noms, à peu près comme dans la chanson originale (mais il y a là encore des erreurs). Je ne garde que les mots de lexique avec des informations de découpage complètes (elles sont parfois absentes dans Lexique).

La chanson originale contient, outre des noms, des groupes nominaux (par exemple "Trois p'tits chats"), que Lexique ne contient pas. J'ai envisagé de tenter de récupérer de tels groupes (par exemple, à partir de titres d'articles Wikipédia), qu'il faudrait ensuite consolider avec Lexique, mais finalement je ne l'ai pas fait, eu égard par exemple à la difficulté qu'il y aurait à déterminer si les élisions entre un mot et le suivant sont possibles.

Je filtre encore les mots : étant donné qu'en répétant la dernière syllabe on veut toujours garder une consonne avant, on peut éliminer tous les mots qui commencent par une voyelle, ou qui se terminent par deux sons vocaliques en succession (par exemple "hévéa" ou "casoar").

J'observe ensuite que, dans la chanson originale, on aime bien répéter un 'e' muet final sur les lignes paires (par exemple "pail-leuh", "somnambu-leuh"). J'identifie les 'e' muets en testant pour une finale en 'e' ou "es" qui ne soit pas précédée de 'i', 'u', ou 'é', et je décide d'imposer l'alternance entre de telles finales et des mots qui n'en disposent pas, un peu comme l'alternance entre rimes féminines et masculines en poésie (les règles diffèrent, cependant, par exemple "-ie" est tout de même une finale féminine en poésie).

Je considère qu'un mot u peut être atteint à partir d'un mot v si la dernière syllabe de la prononciation v, entière, est un préfixe de la prononciation de u. Ainsi, j'impose que la dernière syllabe soit entièrement préservée, afin de pouvoir la répéter ("radiogramme, -gramme, -gramme", et non "radiogramme, -ramme, -ramme"), mais on peut aboutir à un mot dont la première syllabe est suivie de davantage de sons consonantiques que la finale du vers précédent.

J'obtiens ainsi un graphe orienté de 205 sommets et 629 arêtes : pour chaque passage d'un couple "syllabe, genre" (masculin ou féminin) à l'autre, je ne retiens que le premier mot qui le permet dans la liste d'entrée (donc, normalement, le plus courant). Ce graphe a été écrémé pour ne conserver que les sommets accessibles et co-accessibles pour un point de départ arbitrairement choisi. J'interdis également, par souci esthétique, les arêtes qui restent sur la même syllabe en changeant de genre, e.g., "trinitrine"

Je recherche ensuite un cycle dans ce graphe, que je tente de rendre aussi grand que possible, mais je lui interdis de passer deux fois par la même paire "syllabe, genre", parce que dans ce cas on peut raccourcir la chanson. Ce problème d'optimisation est difficile : il est en fait NP-dur, vu qu'on peut facilement y réduire celui de la recherche d'un cycle hamiltonien. Je ne connais pas de manière simple d'approximer ce problème pour chercher un grand cycle, donc j'ai à la place implémenté une approche naïve qui énumère tous les chemins par parcours en profondeur. Cette approche génère le cycle de longueur 86 que j'utilise pour formatter les paroles ensuite. Sans doute peut-on en trouver un plus long ; c'est certainement le cas si on tente de corriger Lexique pour pouvoir conserver les mots avec des données incomplètes...

À titre expérimental (et pour récompenser le lecteur patient qui est parvenu jusqu'ici), j'ai tenté de combiner la mélodie avec le système de synthèse vocale Festival. Malheureusement, je ne sais pas comment lui indiquer la prononciation des paroles, et je ne peux donc indiquer que les paroles sous forme orthographique, qui est par ailleurs interprétée comme de l'anglais par le logiciel, avec des problèmes manifestes de gestion des caractères accentués. Le résultat se passe de commentaires...

comments welcome at a3nm<REMOVETHIS>@a3nm.net