Dans sa vidéo, David Louapre évoque la possibilité de tirer des lettres au hasard afin de pouvoir créer des mots. Penchons-nous sur cette possibilité.
Complétez le code ci-dessous afin que votre programme puisse générer des mots de 6 lettres (les caractères qui composent le mot sont choisis au hasard).
var tabLettres=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","é","è"];
var nbLettre=6;
function setup(){
noCanvas;
var bouton=createButton("Créer un mot");
bouton.mousePressed(creationMot);
}
function draw(){}
function creationMot(){
var chaine="";
...
...
...
createP(chaine);
}
Vous devriez obtenir ceci :
Pour vous aider :
Vous pouvez constater que les "mots" générés sont, pour la plupart, imprononçables (pour un francophone).
Nous allons donc mettre en place la technique développée par David Louapre dans sa vidéo, en utilisant les chaînes de Markov
Commençons par télécharger un fichier texte contenant 336531 mots français sur le site de Christophe Pallier (voir ici). Pour des raisons d'encodage de caractères, téléchargez directement ce fichier : liste_mots.txt (clic droit "Enregistrer sous").
Une fois le téléchargement terminé, placez ce fichier texte dans le même répertoire que le fichier script.js
À l'aide d'un éditeur de texte (par exemple gedit sous GNU/linux), ouvrez le fichier précédemment téléchargé
Voici une (toute petite) partie des mots que vous devriez trouver dans ce fichier :
a
à
abaissa
abaissable
abaissables
abaissai
abaissaient
abaissais
abaissait
abaissâmes
abaissant
abaissante
...
Analysez puis testez le code suivant :
var tabMots;
var chaineMots="";
function preload(){
tabMots=loadStrings("liste_mots.txt");
}
function setup(){
noCanvas;
for (i=0; i<tabMots.length;i++){
chaineMots=chaineMots+tabMots[i]+" ";
}
createP(chaineMots);
}
Vous devriez obtenir ceci :
Voici quelques éléments pour vous aidez dans votre analyse du code du "À faire vous-même 2.4" :
La ligne tabMots=loadStrings("liste_mots.txt"); permet de charger les mots contenus dans le fichier listes_mot.txt. Chaque mot est "rangé" dans un tableau ("tabMots"), voici à quoi ressemble le début de ce tableau :
tableau "tabMots" : ["a","à","abaissa","abaissable","abaissables","abaissai","abaissaient","abaissais","abaissait","abaissâmes","abaissant","abaissante",...]
Ce tableau n'est pas directement utilisable, c'est pour cela que nous plaçons chacun de ces mots dans une chaîne de caractères ("chaineMots"). Chaque mot étant séparé du mot suivant par un espace.
Analysez puis testez le code suivant :
var tabMots;
var chaineMots="";
var tabLettres=[];
function preload(){
tabMots=loadStrings("liste_mots.txt");
}
function setup(){
noCanvas;
for (i=0; i<tabMots.length;i++){
chaineMots=chaineMots+tabMots[i]+" ";
}
for (i=0;i<chaineMots.length;i++){
lettre=chaineMots.charAt(i)
tabLettres.push(lettre);
}
createP(tabLettres);
}
Rappel : chaineMots.charAt(i) permet de récupérer le caractère situé en position i dans la chaine de caractères "chaineMots"
Dans ce programme nous avons "découpé" les mots en lettres (et en "espace") et placé chacune de ces lettres (et ces espaces) dans un tableau ("tabLettres").
Nous obtenons un tableau qui va ressembler à cela :
["a"," ","à"," ","a","b","a","i","s","s","a"," ","a","b","a","i","s","s","a","b","l","e",...]