Voir le flux RSS

danielhagnoul

kNombreMots() retourne le nombre de mots et, dans l'ordre alphabétique, le nombre de chaque mot.

Noter ce billet
par , 15/09/2016 à 00h42 (321 Affichages)
Pour construire cette fonction, j'ai utilisé :



J'ai dû faire des choix pour la césure et l'élimination. J'élimine les espaces vident, mais aussi les chiffres et les mots de moins de trois caractères. Donc on ne trouvera pas de date, de "l" de l'été, de "à" ou de "la" dans le résultat. J'ai testé des contenus divers sans voir de gros problèmes, mais cela ne veut pas dire qu'il n'y en a pas.

Vous pouvez modifier mes choix en changeant :
  • le contenu du RegExp de la méthode split( /[0-9=&<'>\-\_\—\/\{’\}"«,»\[;\](.)\s\n\r\v\t]/ ) ;
  • la règle d'élimination : str.length < 3.


Le code de la fonction kNombreMots

Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
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
const kNombreMots = inputString => {
  const
    sortTable = function( table, ordre, bcp47String ){
      let
        bcpStr = bcp47String || "fr-BE",
        ctor = new Intl.Collator( bcpStr, { "numeric" : true } ),
        n = ( ordre === "desc" ) ? ( -1 ) : ( 1 );
 
      table.sort( function( a, b ){
          return n * ctor.compare( a, b );
      });
 
      return table;
    },
    /*
     * La fonction convertir élimine les espaces vident et
     * les mots de deux caractères.
     * Elle retourne un array clé/valeur.
     */
    convertir = str => str.toLocaleLowerCase().split( /[0-9=&<'>\-\_\—\/\{’\}"«,»\[;\](.)\s\n\r\v\t]/ ).map(
          str => ( str.length < 3 ) ? [ str, [0] ] : [ str, [1] ]).filter(
          elem => elem[1][0] > 0 ),
    // La fonction remanier regroupe les valeurs par clé
    remanier = arr => {
      let sortedArray = sortTable( arr );
 
      sortedArray.forEach( ( elem, index, arr ) => {
        while ( arr[ index + 1 ] && elem[0] === arr[ index + 1 ][0] ){
          arr[ index ][1].push( 1 );
          arr.splice( index + 1, 1 );
        }
      });
 
      return sortedArray;
    },
    // La fonction contracter renvoie un tableau clé/nombre d’occurrences
    contracter = arr => arr.map(
             elem => [ elem[0], elem[1].reduce( ( a, b ) => a + b ) ] );
 
  let
   outputHTML = "",
   nbMots = 0;
 
  for ( let item of contracter( remanier( convertir( inputString ) ) ) ){
    nbMots += item[1];
    outputHTML += "<p>" + item[0] + " : " + item[1] + "</p>";
  }
 
  return "<p>Nombre de mots : " + nbMots + "</p>" + outputHTML
};

Exemple 1 : un bout de code.

Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
let str = `convertir = str => str.toLocaleLowerCase().split( /[<'>\-\_\—\{\}"«,»\[;\](.)\s\n\r\v\t]/ ).map(
          str => ( str.length < 2 ) ? [ str, [0] ] : [ str, [1] ]).filter(
          elem => elem[1][0] > 0 )`;
 
k$( "#inputString" ).textContent = str;
k$( "#outputString" ).innerHTML = kNombreMots( str );

Texte

convertir = str => str.toLocaleLowerCase().split( /[<'>-_—{’}"«,»[;](.)s 
	]/ ).map( str => ( str.length < 2 ) ? [ str, [0] ] : [ str, [1] ]).filter( elem => elem[1][0] > 0 )

Mots

Nombre de mots : 14

convertir : 1

elem : 2

filter : 1

length : 1

map : 1

split : 1

str : 6

tolocalelowercase : 1
Exemple 2 : un copier-coller du web.

Dans cet exemple on voit des mots qui ne sont pas dans le dictionnaire : "pbde" et "eee". Mais l'auteur du texte a dû les taper, donc je juge que l'on peut les compter.

Envoyer le billet « kNombreMots() retourne le nombre de mots et, dans l'ordre alphabétique, le nombre de chaque mot. » dans le blog Viadeo Envoyer le billet « kNombreMots() retourne le nombre de mots et, dans l'ordre alphabétique, le nombre de chaque mot. » dans le blog Twitter Envoyer le billet « kNombreMots() retourne le nombre de mots et, dans l'ordre alphabétique, le nombre de chaque mot. » dans le blog Google Envoyer le billet « kNombreMots() retourne le nombre de mots et, dans l'ordre alphabétique, le nombre de chaque mot. » dans le blog Facebook Envoyer le billet « kNombreMots() retourne le nombre de mots et, dans l'ordre alphabétique, le nombre de chaque mot. » dans le blog Digg Envoyer le billet « kNombreMots() retourne le nombre de mots et, dans l'ordre alphabétique, le nombre de chaque mot. » dans le blog Delicious Envoyer le billet « kNombreMots() retourne le nombre de mots et, dans l'ordre alphabétique, le nombre de chaque mot. » dans le blog MySpace Envoyer le billet « kNombreMots() retourne le nombre de mots et, dans l'ordre alphabétique, le nombre de chaque mot. » dans le blog Yahoo

Commentaires