1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
| <!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Compter le nombre doccurrences de chaque mot d'un texte</title>
<style>
body { font-family: Arial, Helvetica, sans-serif; }
table { border-collapse: collapse; margin: 1em;}
td { border: 1px solid grey; padding: .2em .5em;}
</style>
</head>
<body>
<div id="mon-texte" style="display:none;">
C'est l'évadé du Névada <br /> Qui s'évada dans la vallée <br />
Dans la vallée du Névada <br /> Qu'il dévala pour s'évader <br />
Sur un vilain vélo volé <br /> Qu'il a volé dans une villa <br />
Et le valet qui fut volé <br /> Vit l'évadé qui s'envola <br />
<br />
Avec un vélo <br /> 'Faut pas s'évader <br />
Parce que c'est crevant <br /> Et puisqu'on peut crever <br />
<br />
Si l'évadé du Névada <br /> S'est évadé dans la vallée <br />
C'est qu'il pensait au lit d'Éva <br /> Et le voulait pour s'y lover <br />
Sur le divan de la Diva <br /> On vit l'évadé s'affaler <br />
Mais quand Éva le revit là <br /> Elle le vida pour l'éviter <br />
<br />
Quand on est cocu <br /> 'Faut téléphoner <br />
Ou télégraphier <br /> Avant de se pointer <br />
<br />
C'est l'évadé du Névada <br /> Qui s'énerva dans la vallée <br />
Il se leva devant Éva <br /> Pour lui filer une belle volée <br />
Et c'est Éva qui s'alita <br /> Pendant que l'on vit l'évadé <br />
Qui n'avait plus envie d'Éva <br /> se r'envoler dans la vallée <br />
<br />
Y'a des énervés <br /> Qui pensent qu'à frapper <br />
Avec ces mecs-là <br /> On peut pas s'expliquer <br />
<br />
Mais l'évadé du Névada <br /> Fût délavé dans la vallée <br />
Par toute l'eau qui tombait là <br /> Et on vit l'évadé vanné <br />
C'est vrai que la vie d'évadé <br /> Ne valait pas la vie d'avant <br />
Car en vélo quand y'a du vent <br /> On est vidé c'est évident <br />
<br />
C'est moi qui te l'dis <br /> Si t'as pas d'imper' <br />
C'est vachement facile <br /> De commettr' un impair <br />
<br />
Et l'évadé du Névada <br /> A pédalé dans la vallée <br />
Dans la taule il dit : "me voila <br /> Je crois que là vous m'en voulez <br />
Car toute l'eau qui m'a lavé <br /> Et toute l'eau qu'j'ai avalée <br />
M'a dégoûté de m'évader <br /> De la vallée du Névada" <br />
<br />
Quand y tombe de l'eau <br /> Quand y a d'la pluie <br />
Retourne en prison <br /> Pour te mettre à l'abri <br />
</div>
<table id="result"></table>
<table id="classement"></table>
<script>
const leTexte = document.querySelector('#mon-texte')
, leResult = document.querySelector('#result')
, leClassement = document.querySelector('#classement')
, decoup= leTexte
.textContent
.toLowerCase()
.match(/[a-zàèìòùáéíóúýâêîôûãñõäëïöüÿçߨøåæ]+/g)
.filter(s=>(s!==undefined && s.length > 3) )
.sort((a, b) => a.localeCompare(b))
.reduce((a,c,i,t)=> // crée un tableau d'objet
{
if (i===0 || t[i-1]!==c ) a.push ({m:c, n:1}) // ex : { m: 'envoler', n: 1 }
else a[a.length-1].n++ // ex : { m: 'névada', n: 1+1+1+1 }
return a
}
, [])
let occurences = new Set()
for (let mot of decoup)
{
occurences.add(mot.n)
let nRow = leResult.insertRow(-1) // nouveau <tr></tr> en fin de table
, rCell = 0 // indice du premier <td></td>
nRow.insertCell(rCell++).textContent = mot.m // crée et rempli le premier <td> avec le mot.m ( ex: 'envoler')
nRow.insertCell(rCell++).textContent = mot.n // crée et rempli le premier <td> avec le mot.n ( son nombre d'occurence )
}
[...occurences]
.sort((a, b)=>a-b)
.forEach(o=>
{
let nRow = leClassement.insertRow(-1)
, rCell = 0
nRow.insertCell(rCell++).textContent = o // crée et rempli le premier <td> la valeur d'occurence
nRow.insertCell(rCell++).textContent = decoup // sur cet Array
.filter(d=>d.n===o) // ne garde que ceux ayant la même valeur que l'occurence courante
.map(e=>e.m) // crée un tableau avec uniquement les termes ( [ ..., { m: 'évader', n: 3 }, ...] devient [ ..., 'évader', ...] )
.join(', ') // transfo de cet array en String séparé par des virgules...
})
</script>
</body>
</html> |
Partager