Générateur de textes aléatoires cohérents (chaînes de markov)

Description

Suite à une question sur le forum (http://www.cppfrance.com/forum/sujet-HELP-GETLINE-STRING-CHAR-CONVERSION-TYPES_1467414.aspx) et quelques échanges en message privé, je poste cette source.
Ce petit outil permet de générer un texte cohérent, aléatoirement, à partir d'un corpus de texte. L'algorithme utilisé exploite les chaînes de Markov. Derrière ce nom très technique se cache un algorithme très simple et pourtant très efficace.

Soit le texte suivant: "un gentil chien aime un gentil maître"

On peut donc générer la liste d'association suivante:
(un, gentil) => chien maître
(gentil, chien) => aime
(chien, aime) => un
(aime, un) => gentil
(gentil, maître) => EOF

Ensuite, en partant de (un, gentil):
On avance en choisissant un élément aléatoirement à chaque fois:
Ce qui ici donnera deux possibilités:
- un gentil maître. EOF
- un gentil chien aime un gentil maître. EOF

En utilisant de gros corpus, on peut arriver à de très bons résultats.

Conclusion :

Compilation:
g++ -W -Wall -pedantic -O3 main.cc TextGenerator.cc -o markov
Utilisation:
./markov [option] <files>

Options:
-c: Nombre de caractères au maximum (0 => infini)
-w: Nombre de mots au maximum (0 => infini)
-l: Nombre de lignes au maximum (0 => infini)

Exemple:
./markov -w 100 fichier1.txt fichier2.txt fichier3.txt dossier/fichier4.txt
./markov -l 5 data/*.txt

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.