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 :

nombre d'occurences et supprimer les mots repétés dans un texte


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 48
    Points : 36
    Points
    36
    Par défaut nombre d'occurences et supprimer les mots repétés dans un texte
    j'ai un texte très long, il est stocké dans ma base de donnée, et je souhaite stocker dans une table ce même texte avec les occurences supprimés et dans une autre table qui contient 2 colonnes avec chaque mot et le nombre d'occurences.
    d'abord j'ai mon texte en entrée, il va prendre le premier mot et en meme temps on initialise une variable qui contient le nombre d'occurences du mot courant qui commencera à 1, et il va boucler sur reste du texte et dès qu'il trouve une occurence de mot il la supprime et et incremente la variable jusqu'a la fin du texte ensuite passer au mot suivant et répeter la procedure.
    remarques: si par exemple on trouve un mot "bateau" et "bateaux" je veux qu'il les considère comme un seul mot mais qu'il stocke que le mot en pluriel, pour ca je pense que la regex c'est bien '/mot[x|s]?/' n'est-ce pas?
    mais n'etant pas à l'aise avec php je ne sais pas comment se deplacer dans le texte, si une ame charitable puisse m'aider ce serai très sympa.
    merci par avance.

  2. #2
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    Salut,


    Je pense qu’il faut commencer par se poser des questions de base:

    - Quelle est la taille de ton texte très long ?
    Quelle est la taille de ta RAM ?

    - Quels sont les mots dont tu veux établir les occurences ?
    Te sont ils connus avant de commencer l’analyse de ton texte (ce qu’il me semble d’après ce que tu décris comme procédure envisagée) ?

    - Est-ce que tu sais déjà comment ouvrir le fichier, éventuellement le charger en mémoire s’il n’est pas trop gros, et faire 1 parcours pour déterminer l’occurence de 1 mot ?
    Si oui, mesure le temps que ça prend, et multiplie ce temps par le nombre de mots dont tu veux les nombres d’occurences. Ça te donnera une idée du temps total prévisible pour que tourne le programme sur tous les mots à examiner selon la procedure que tu envisages.

    - D’un point de vue algorithmique, si on te demande de compter le nombre de pieds de chacune de trois espèces d’arbres se trouvant le long d’un chemin de 4 km de long, est ce que tu va t’amuser à compter d’abord le nombre d’individus de l’espèce 1, repartir du départ pour compter la 2 ième espèce, et refaire une 3 ième fois le trajet pour compter la dernière espèce ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 48
    Points : 36
    Points
    36
    Par défaut
    le texte très long ne depassera pas 1000 mots et le texte est stocké dans une variable php et non pas dans un fichier, pour 1000 mots je ne pense pas que ca sera enorme en temps, le texte est deja traité pour enlever les articles superflux comme "la, le , un , une ...." et ce traitement reduit mon texte de la moitié environ sans que les mots clés importants ne disparaissent,j'ai fait une analyse de texte aléatoire et le choix des mots superflux est pertinent. et donc ce que je veux faire ca sera sur du texte contenant dans les 500 mots et je pense ainisi ramener le texte utile à une centaine, donc du point de vue coup ca ne sera pas du tout enorme.
    de plus c'est un traitement qui me permettra de faire de l'indexation dont le temps m'importe peu puisque j'ai programmé un processus pour le faire la nuit, et du coup la recherche sera plus rapide ce qui est mon but. (plutot que d'indexer tout le texte, n'indexer que les mots clés et donc ce sera relativement rapide, d'autant plus j'envise de faire une recherche sémantique qui elle aussi va contenir du traitement plus complexe donc autant reduire le volume du texte à chercher).
    ce que je veux savoir c'est comment me deplacer dans le texte qui est contenu dans ma variable $txt.
    merci

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 144
    Points : 161
    Points
    161
    Par défaut
    Regarde du côté de http://us.php.net/fr/preg_match_all pour chopper tous les mots.

    L'expression régulière pour capturer un mot :
    /\b[a-z-]+\b/i

    Rajouter 0-9 dans la classe de caractères si des chiffres peuvent être contenus dans ce que tu appelles un "mot".

    Par contre pour les pluriels ça va être très compliqué sans outil spécifique.

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/08/2012, 19h08
  2. Réponses: 9
    Dernier message: 23/07/2012, 17h00
  3. Trouver les occurences de mots entiers dans un texte
    Par lr dans le forum Général Java
    Réponses: 2
    Dernier message: 12/04/2012, 15h08
  4. Réponses: 2
    Dernier message: 23/04/2010, 19h04
  5. nombre d'occurences de toutes les valeurs d'un champ
    Par petitours dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 24/01/2008, 20h31

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