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

Langage PHP Discussion :

[PHP4] Nombre d'occurences d'un mot dans un fichier


Sujet :

Langage PHP

  1. #1
    Membre actif
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Points : 282
    Points
    282
    Par défaut [PHP4] Nombre d'occurences d'un mot dans un fichier
    Bonjour,

    Je suis un peu rouillé niveau algo
    Voila, j'ai un fichier texte et je voudrais connaître le nombre d'occurences de chaque mot.

    Je suppose qu'existe un algo plus pratique et efficace que de dire :
    pour chaque mot tu regardes s'il est dans le tableau, s'il ne l'est pas tu "agrandis" le tableau.

    Parce que bon ca fait qd meme parcourir chaque fois tout le tableau pour chaque nouveau mot c'est pas la fête :s

    Je suppose qu'une meilleure manière serait de trier d'abord le tableau par ordre alphabétique des mots? si une telle fonction existe en php

    Merci si quelqu'un a des suggestions

  2. #2
    Membre actif
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Points : 282
    Points
    282
    Par défaut
    si la solution de tri est la meilleure, je suppose que la fonction sort est bien adaptée

    Si qq voit une autre manière

  3. #3
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Ca peut peut-être te servir ça :
    http://fr.php.net/manual/fr/function.substr-count.php

  4. #4
    Membre éclairé
    Avatar de karami
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2005
    Messages : 343
    Points : 668
    Points
    668
    Par défaut
    Je comprend pas t'as le probleme avec la fonction qui compte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php
    echo substr_count("Ceci est un test", "ci"); // affiche 1
    ?>
    ou bien avec la liste des mots que tu veux chercher.

  5. #5
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    La difficulté c'est de compter TOUS les mots.

  6. #6
    Membre éclairé
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Points : 773
    Points
    773
    Par défaut
    en effet, ce que tu proposes en dernier me semble être la bonne solution :
    - mettre texte dans tableau
    - classer tableau par ordre alphabétique (attention si le texte est long le traitement sera long ) avec sort()
    - parcourir chaque cellule du tableau{
    - récupérer la valeur courante de la cellule
    - si la valeur courante est égale à la valeur précédente, incrémenter compteur
    - si la valeur courante est différente de la valeur précédente, stocker le compteur dans un hash ayant le mot précédent comme clé, initialiser le compteur
    }

    un truc du genre, j'espère que tu m'as compris

    edit : je n'avais pas vu les précédentes réponses

  7. #7
    Membre actif
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Points : 282
    Points
    282
    Par défaut
    Heu oui mais je ne connais pas justement la liste de mots

    Si j'ai, comme str
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    il fait beau, c'est les vacances, je vais faire du velo et je vais travailler
    Ce qui veut dire que d'une part je dois faire un
    et ensuite pour chaque élément du array, je dois compte le nombre d'occurences avec la fonction substr_count().

    Je me trompe? Dans le résultat, en plus, j'aurai plusieurs fois le mot "je" dans le nombre d'occurrence que je vais calculer .

    Si vous pensez que c'est la meilleure solution je vais le faire En fait, mon idée, c'était plutot de faire un sort ($array).
    Puis je parcours le array et j'incrémente un compteur tant que le mot suivant = le mot précédent.

    Voila ^^. J'espère que je me suis bien exprimé sur le problème


    EDIT : Oups ca répond beaucoup lol. j'ai meme pas eu le tps d'écrire ma réponse lol. Bah ca dépend ce qu'on appelle gros pour un fichier... j'espère que ce sera pas trop long non plus

  8. #8
    Membre actif
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Points : 282
    Points
    282
    Par défaut
    Ca ne pouvait pas être si simple que ca lol

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $mot = explode(' ',$text);
    sort($mot);
    for($i=0;$i<count($mot);$i++)
    {
    //	echo $mot[$i];
    	if($mot[$i] == $mot[$i+1]) $compte_mot++;
    	else
    	{
    		$array_mot = array("$mot[$i]" => "$compte_mot") ;
    		$compte_mot=0;
    	}
    }
    C'est normal que ca marche pas comme j'écrase $array_mot à chaque fois Comment on peut faire une sorte de concaténation de array? lol

  9. #9
    Membre éclairé
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Points : 773
    Points
    773
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $array_mot = array("$mot[$i]" => "$compte_mot") ;
    devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $array_mot{$mot[$i]} =$compte_mot ;

  10. #10
    Membre actif
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Points : 282
    Points
    282
    Par défaut
    En effet, va falloir que je réfléchisse plus que ca lol

    Merci

  11. #11
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    avec une expression reguliere, qui chope ce qu'il y a entre un espace, point, virgule, etc ...

    et apres tu compte le tableau des résultats.

  12. #12
    Membre éclairé
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Points : 773
    Points
    773
    Par défaut
    c'est-à-dire avec une expression régulière? Comment récupères-tu le nombre d'occurence de chque mot ensuite

  13. #13
    Membre actif
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Points : 282
    Points
    282
    Par défaut
    Bonjour !

    Heu oui cmt avec une expression régulière ?

    J'ai un petit soucis... Je récupère des "mots" en trop.

    Par exemple, "ok!" est considéré comme un mot. J'ai donc fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $pattern = "/[^[:alnum:]]/i";
    echo preg_replace($pattern,' ',$str);
    Ca fonctionne mais... Dans le cas où j'ai des accents comme "été", il va me remplacer é par ' '... Comment faire?
    Je dois traiter le cas séparément?

    Merci

  14. #14
    Membre actif
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Points : 282
    Points
    282
    Par défaut
    En attendant de trouver une meilleure solution, j'ai retiré les accents

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    hello,

    toujours se dire qu'il y a une fonction php qui fait ce qu'on souhaite.

    en cherchant un chouilla (j'suis trop gentil pis j'ai rien de mieux à faire ce matin) j'ai trouvé ça :

    http://fr2.php.net/manual/fr/functio...word-count.php

    en espérant que ca puisse résoudre ton problème.

  16. #16
    Membre actif
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Points : 282
    Points
    282
    Par défaut
    lol ... Merci en effet c'est ce que je cherche ... je vais voir si ca marche

    EDIT : non en fait pas du tout
    str_word_count() compte le nombre de mots dans la chaine et les stocke dans un array mais il compte pas le nombre d'occurences de chaque mot . En fait ca reviet au moment, dans mon cas, que de faire explode de la chaine

Discussions similaires

  1. le nombre d'occurence d un mot dans un fichier txt
    Par mirafrance dans le forum Langage
    Réponses: 2
    Dernier message: 21/01/2011, 09h05
  2. Compter le nombre d'occurences d'un mot dans un texte
    Par AlexandraS dans le forum Langage
    Réponses: 13
    Dernier message: 26/03/2008, 09h12
  3. Nombre d'occurences d'un mot dans une phrase
    Par cirtey dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 07/05/2007, 21h01
  4. Réponses: 8
    Dernier message: 18/01/2005, 10h58

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