IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Compter le nombre d’occurrences de chaque mot d'un texte.


Sujet :

JavaScript

  1. #1
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut Compter le nombre d’occurrences de chaque mot d'un texte.
    Salut,

    Compter le nombre d’occurrences de chaque mot d'un texte...

    J'ai fait ça :

    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
    texte = "Salut tout le monde, c'est un texte pour tester le code... Salut tout le monde, c'est un texte pour tester le code..."
     
    div = texte.split(/[^a-zA-Z]/)
    console.log(div);
    dico = {}
     
    for (let mot of div) {    
        if (mot != "") {
            if (dico[mot] != undefined) {
                dico[mot] += 1;
            } else {
                dico[mot] = 1
            }
        }
    }
     
    console.log(dico);

    Peut-on améliorer le code ?

  2. #2
    Membre régulier Avatar de abdennour bouaicha
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2009
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2009
    Messages : 98
    Points : 112
    Points
    112
    Par défaut
    une autre proposition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    var texte = 'Salut tout le monde, c\'est un texte pour tester le code... Salut tout le monde, c\'est un texte pour tester le code...';
    var text=texte.split(' ');
    var k=0;
    console.clear();
    function getMot(mot){
    k=0;
    for(var j=0;j<text.length;j++){
    if(mot==text[j])k++;
    }
    return k;
    }
    for (let mot of text) { 
    console.log(mot +': est repeté '+ getMot(mot) + ' fois \n');
    }

  3. #3
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Merci pour cette nouvelle proposition... A analyser...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour Beginner.,

    • tes variables ne sont pas déclarées (toujours utiliser "use strict"; !)
    • ta regex n'inclut pas les caractères accentués.
    • de plus, il faut mettre le tout le minuscules, sinon "Salut" et "salut" seront 2 mots différents.
    • on peut aussi mettre le tout dans une fonction, et ne prendre que les mots de plus de 3 lettres (par exemple)
    • on peut aussi supprimer de la liste ceux qui n'apparaissent qu'une seule fois

    Code : 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
    "use strict";
    // -------------
    function count_multiples_mots( texte )
    {
      var div = texte.toLowerCase().split(/[^a-zA-ZàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ]/);
      var obj_dico = {};
      // ---------
      for (let mot of div) {    
        if (mot != "" && mot.length>2 ) // mots de plus de 3 lettres
        {
          if (obj_dico[mot] == undefined) {
            obj_dico[mot] = 1;
          } else {
            obj_dico[mot] += 1;
          }
        }
      }
      // ---------
      // on supprime ceux qui ne sont présents qu'une fois
      for (var mot in obj_dico)
      {
        if( obj_dico[mot]==1 ){
          delete(obj_dico[mot]);
        }
      }
      // ---------
    //  console.log( dico );
      return obj_dico;
    }
    Utilisation :
    Code html : 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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    <div id="mon-texte">
    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>
    <div id="result"></div>
    <div id="classement"></div>
    Affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    // -------------
    var texte = document.querySelector('#mon-texte').textContent;
    var obj_dico = count_multiples_mots( texte );
    // -------------
    // Affichage
    var ul = document.createElement('ul');
    document.querySelector('#result').append(ul);
    for (var mot in obj_dico)
    {
    //  console.log(mot, obj_dico[mot]);
      var li = document.createElement('li');
      li.textContent = mot+' : '+obj_dico[mot];
      ul.append(li);
    }
    // -------------
    Classement des mots, par nombre d'occurrences croissant (une autre façon d'afficher les résultats) :
    Code : 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
    // -------------
    // Classement des mots, par nombre d'occurrences croissant
    function count_multiples_mots_array_sort( obj_dico )
    {
      var arr_dico = [];
      for (var mot in obj_dico)
      {
        if(arr_dico[obj_dico[mot]] == undefined) {
          arr_dico[obj_dico[mot]] = [];
        }
        arr_dico[obj_dico[mot]].push(mot);
      }
      return arr_dico;
    }
    // -------------
    var arr_dico = count_multiples_mots_array_sort( obj_dico );
    //console.log( arr_dico );
    var ul = document.createElement('ul');
    document.querySelector('#classement').append(ul);
    for (var idx in arr_dico)
    {
      var li = document.createElement('li');
      li.textContent = idx+' : '+arr_dico[idx].join(', ');
      ul.append(li);
    }
    // -------------



    Dernière modification par Invité ; 02/11/2019 à 11h23.

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    Peut-on améliorer le code ?
    cela va dépendre de ce que tu entends par « améliorer » !

    En l'état ton code est correct, je fais abstraction de la façon de récupérer les mots qui peut être bien différente suivant ce que tu cherches à obtenir via ta RegExp et du choix du type de la boucle for..of qui est une question de choix personnel plutôt que de performance.

    Tu ne fais que nombre-éléments-trouvés itérations, il va t'être difficile de faire moins, et de plus tu gardes une trace via ton objet crée.

    La méthode proposée par abdennour bouaicha elle va faire nombre-éléments-trouvés * nombre-éléments-trouvés, et ce sans garder de trace, ce qui est donc à éviter autant que faire ce peut.

  6. #6
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  7. #7
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    Peut-on améliorer le code ?
    salut,

    En relisant ta proposition et les suivantes, peut-être un mix simplifié:

    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
    const texte = "Salut tout le monde, c'est un texte pour tester le code... Salut tout le monde, c'est un texte pour tester le code...";
    const div = texte.toLowerCase().split(/[^a-zàèìòùáéíóúýâêîôûãñõäëïöüÿçßøåæœ]/);
     
    for(var i=0, dico={};i<div.length;i++){
    	if(div[i].length>0){
    		if(!dico[div[i]]){
    			dico[div[i]]=1;
    		}
    		else{
    			dico[div[i]]++;
    		}
    	};
    }
    console.log(dico)

  8. #8
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 740
    Points
    4 740
    Par défaut
    Je suis parti du regex de jreaux62, après j'ai juste jonglé avec les différentes méthodes que l'on peut appliquer directement sur les objets Array de JS
    Il y a aussi une utilisation de l'objet SET de JS....
    Code html : 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
    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 d’occurrences 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>

    [edit] j'arrive pas a activer la coloration syntaxique... :/
    [edit:2] je me suis arrangé pour qu'il fasse moins de 100 lignes + petite optimisation
    [edit:3] je travaille sur les explications, patience....
    [edit:4] les explications sont ici => https://www.developpez.net/forums/d2.../#post11208639
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  9. #9
    Invité
    Invité(e)
    Par défaut
    @psychadelic

    1- Il semble que la coloration syntaxique fonctionne mal au delà de 100 lignes de code.
    C'est en cours de correction...
    N.B. J'ai scindé ton code en 2

    2- Merci de mettre quelques explications dans ton code.
    Ce ne serait pas du luxe...

  10. #10
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Juste pour appliquer le minimum syndical à une page:

    Code HTML : 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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> 
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
     
    <title>...</title>
     
    <style type="text/css">
    em{
            color:red;
            font-weight:bold;
    }
    #count{
            margin-right:50px;
            float:left;
            height:200px;
            width:500px;
    }       
    #diag{
            height:200px;
            width:500px;
            overflow:auto;
    }
    </style>
     
    <script type="text/javascript">
     
    window.addEventListener("load",()=> {
     
    document.getElementById("tester").addEventListener("click",(e)=>{
            const dico=[];// Oui, on recrée le tableau à chaque fois, c'est aussi simple.
            document.getElementById("diag").innerHTML="";// on vide la zone (salement, j'avoue)
            // on entre dans le tableau chaque paire "mot" + "occurrences" 
            document.getElementById("count").value.toLowerCase().split(/[^a-zàèìòùáéíóúýâêîôûãñõäëïöüÿçßøåæo]/).forEach(v => {
                    if(!dico[v]){
                            if(v.length>0){
                                    dico[v]=1
                            }
                    }
                    else{
                            dico[v]++;
                    };
            });     
                    // on affiche les mots répétés
                    for(i in dico){
                            if(dico[i]>1){
                                    document.getElementById("diag").innerHTML+=`<em>${i}</em> apparaît ${dico[i]} fois.<br />`;
                            }
                    }
            }
    ,false)},
    false);
     
    </script>
     
    </head>
    <body>
    <div style="margin:50px">Détectez les répétitions dans vos discours!</div>
     
    <div>
    	<textarea id="count"></textarea>
    </div>	
     
    <div id="diag"></div>
     
    <div  style="margin:20px;clear:both;">
    	<button id="tester">Compter les répétitions</button>
    </div>
     
    </body>
    </html>

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par javatwister Voir le message
    Juste pour appliquer le minimum syndical ...
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> 
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script type="text/javascript">
    Euhhhh... Il date de quel époque, ton "minimum syndical" ?
    Krazucki ??
    Dernière modification par ProgElecT ; 02/11/2019 à 21h09.

  12. #12
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Salut,

    Merci à tous pour vos réponses.

    Citation Envoyé par jreaux62 Voir le message
    tes variables ne sont pas déclarées (toujours utiliser "use strict"; !)
    Exact, elles sont globales du coup... En fait j'ai la tête dans Python en ce moment et on ne déclare pas les variables dans ce langage...

    D'ailleurs j'ai d'abord écrit ce code en Python et je l'ai traduit en JS juste après : version Python... Les codes se ressemblent...

    Citation Envoyé par jreaux62 Voir le message

    • ta regex n'inclut pas les caractères accentués.
    • de plus, il faut mettre le tout le minuscules, sinon "Salut" et "salut" seront 2 mots différents.
    • on peut aussi mettre le tout dans une fonction, et ne prendre que les mots de plus de 3 lettres (par exemple)
    Effectivement...

    Citation Envoyé par jreaux62 Voir le message
    Merci. Je vais regarder ça...

    Citation Envoyé par NoSmoking Voir le message
    En l'état ton code est correct, je fais abstraction de la façon de récupérer les mots qui peut être bien différente suivant ce que tu cherches à obtenir via ta RegExp et du choix du type de la boucle for..of qui est une question de choix personnel plutôt que de performance.
    Tu aurais utiliser une autre boucle ?

    Pour la regex, oui j'ai vu que jreaux62 en a utilisé une plus complète...

    Citation Envoyé par danielhagnoul Voir le message
    Merci. Oui je vais regarder ça...

    PS: tu n'aurais pas fait une version en Python vu qu'on se croise dans le sous-forum python ?

    Citation Envoyé par javatwister Voir le message
    En relisant ta proposition et les suivantes, peut-être un mix simplifié:
    Citation Envoyé par psychadelic Voir le message
    Je suis parti du regex de jreaux62, après j'ai juste jonglé avec les différentes méthodes que l'on peut appliquer directement sur les objets Array de JS
    Il y a aussi une utilisation de l'objet SET de JS....
    Merci, je vais regarder vos codes...

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    "pas déclarées" -> ...elles sont globales du coup...
    Non, c'est faux.
    Même les variables globales doivent être déclarées.
    C'est juste l'endroit du code où la variable est déclarée (en l'occurrence, en dehors de toute fonction) qui en fait une "globale", ou pas.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var x = 0;  // Déclare x comme variable globale du fichier, on lui affecte 0
    ...
    function a() {
      var y = 2;   // Déclare y dans la portée de la fonction a
    ...
        x = 3;  // Affecte 3 à la variable globale x
                // Ne crée pas une nouvelle variable globale
    ...
    }

  14. #14
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Non, c'est faux.
    Même les variables globales doivent être déclarées.
    C'est juste l'endroit du code où la variable est déclarée (en l'occurrence, en dehors de toute fonction) qui en fait une "globale", ou pas.
    Tu peux les déclarer, je n'ai pas dit le contraire mais ce n'est pas obligatoire pour qu'elles soient globales... Ce que j'ai dit c'est que les variables de mon code étaient globales puisque non déclarées... Mais que signifie "globale" là est la question...

    Si tu veux ces variables sont forcément quelque chose : locales, globales ou "locales à un module"...

    En fait elles sont globales (car elles ne sont pas déclarées) ---> elles appartiennent à l'objet "window".

    Que tu les déclares ou non elles appartiendront à l'objet "window"...

    Même si tu initialises une variable dans une fonction elle sera globale si tu ne la déclares pas...

    Citation Envoyé par jreaux62 Voir le message
    C'est juste l'endroit du code où la variable est déclarée (en l'occurrence, en dehors de toute fonction) qui en fait une "globale", ou pas.
    Ben justement les variables en question sont "en dehors de toute fonction" comme tu dis...

    Ceci dit une variable peut être en dehors de toute fonction sans être forcément globale, par exemple quand elles sont dans un module (c'est d'ailleurs un des intérêts des modules).

  15. #15
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Voici un lien parmi d’autres qui confirme (en précisant que ce n'est pas recommandé) : https://www.tutorialsteacher.com/jav...cript-variable

    JavaScript allows variable declaration without var keyword. You must assign a value when you declare a variable without var keyword.
    Example: Variable without var Keyword

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    one = 1;
    two = 'two';

    Note: It is Not Recommended to declare a variable without var keyword. It can accidently overwrite an existing global variable.

    Scope of the variables declared without var keyword become global irrespective of where it is declared. Global variables can be accessed from anywhere in the web page. Visit Scope for more information.

  16. #16
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    Salut,

    Merci à tous pour vos réponses. [...] PS: tu n'aurais pas fait une version en Python vu qu'on se croise dans le sous-forum python ? [...]
    J'ai passé beaucoup plus de temps à reprendre le texte de votre test que d'écrire le programme cnt = Counter(texte.split()).

    Je te l'envoie par MP, avec la méthode pour parcourir le dictionnaire. Si quelqu'un d'autre est intéressé, dites-le-moi !

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  17. #17
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    Même si tu initialises une variable dans une fonction elle sera globale si tu ne la déclares pas...
    J'ai vérifié ce point en particulier et je précise que c'est bien le cas mais il faut que la fonction en question soit exécutée...

    En fait si on fait toto = "Salut" c'est comme si on faisait window.toto = "Salut"...

    Citation Envoyé par danielhagnoul Voir le message
    J'ai passé beaucoup plus de temps à reprendre le texte de votre test que d'écrire le programme cnt = Counter(texte.split()).

    Je te l'envoie par MP, avec la méthode pour parcourir le dictionnaire. Si quelqu'un d'autre est intéressé, dites-le-moi !
    Merci, je vais voir ça mais tu peux poster ton code ici : version Python si tu veux...

  18. #18
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Bon ben j'ai testé plusieurs codes...

    Il y a de belles présentations des résultats en plus dans certains...


    Citation Envoyé par jreaux62 Voir le message
    2- Merci de mettre quelques explications dans ton code.
    Ce ne serait pas du luxe...
    Et oui celui de psychadelic nécessite un peu plus de temps pour être compris et le débogueur aide bien lol...

  19. #19
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Bon. Une ptite maj pour être dom-friendly

    http://javatwist.imingo.net/repetitions.htm

  20. #20
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Oh joli... Tu t'es bien rattrapé là...

Discussions similaires

  1. Compter le nombre d’occurrences de chaque mot d'un texte.
    Par Beginner. dans le forum Général Python
    Réponses: 12
    Dernier message: 03/11/2019, 21h09
  2. Réponses: 0
    Dernier message: 30/03/2018, 10h33
  3. Réponses: 0
    Dernier message: 30/03/2018, 10h26
  4. [XL-2010] VBA - Compter le nombre de fois un mot en fonction de chaque mois.
    Par chdiouc dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 31/01/2017, 06h20
  5. Réponses: 4
    Dernier message: 10/12/2014, 23h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo