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

Python Discussion :

Calcule fréquences de mots clés dans un texte


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2009
    Messages
    220
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2009
    Messages : 220
    Par défaut Calcule fréquences de mots clés dans un texte
    Bonjour,

    J'ai besoin de connaitre comment je pourrai calculer les fréquences de plusieurs mots (une liste de mots) dans un corpus textuel.

    Merci d'avance pour vos aides.

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Vous pouvez utiliser la méthode count

  3. #3
    Membre expérimenté Avatar de dariyoosh
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 236
    Par défaut
    Il est également possible d'utiliser les expressions régulières en définissant un pattern correspondant à votre requête. Voici donc un exemple: trouver le nombre d'occurrences du mot "hello" dans un texte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    pattern = "[hH]ello"
    text = "hello word1 hello word2 word3 word4 Hello"
    regexp = re.compile(pattern)
    count = 0
    for token in text.split(" "):
        if regexp.search(token):
            count += 1
    print("There are %d occurrences of the pattern %s"%(count,pattern))

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Puisque c'est un "corpus textuel", il faut déjà trouver les mots. Pour ça, il faut définir ce qu'est un mot, ce qui dépend du domaine qu'on traite.

    Par exemple, un mot c'est une suite de lettres, précédée et suivie par un séparateur qui peut être: début ou fin de ligne, espace, signe de ponctuation ('.,;:!?'), apostrophe, guillemets, etc...

    Il faut ensuite écrire le code qui trouvera les mots à partir de cette définition (=un "parser"). Si c'est complexe, on peut utiliser les expressions régulières.

    Les mots clés peuvent être, à mon avis, intégrés comme clés dans un dictionnaire, avec comme valeur le nombre de présences du mot-clé dans le texte: {'truc':5, 'machin':12, ...}. L'avantage du dictionnaire est que les clés étant "hashée", elles sont retrouvées plus rapidement que si on cherche dans une liste.

    Après, on peut opérer de deux manières opposées:

    1- on parcourt le texte avec le parser, et à chaque fois qu'on trouve un mot clé, on ajoute 1 à son compteur

    2- on parcourt les mots clés, et pour chacun d'entre eux, on compte le nombre de fois où ce mot est rencontré dans le texte. On suppose dans ce cas que le texte a déjà été traduit en liste de mots à l'aider du parser.

    Je préfère pour ma part la méthode 1.

  5. #5
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    Il y a aussi des librairies qui font ça très bien, comme NLTK. Il y a un très bon tuto en ligne aussi, ce qui ne gâche rien.

  6. #6
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2009
    Messages
    220
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2009
    Messages : 220
    Par défaut
    Bonjour,

    Pour tyrtamos, votre méthode elle me semble super mais malheureusement j'ai rien compris de ton message. Qu'est ce que vous voulez dire avec dictionnaire et les clés étant "hashée" ...

    Pour Herode, j'ai fais un petit recherche sur NLTK et j'ai trouvé beaucoup d'exemples, elle permet en fait de faire une normalisation pour le texte ainsi que plusieurs autre choses, elle est très intéressante mais comment je vais l'utiliser pour calculer les fréquences des mots ?

  7. #7
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par ysahel Voir le message
    Qu'est ce que vous voulez dire avec dictionnaire et les clés étant "hashée"
    Désolé, mais comme ça fait partie des bases de Python, je pensais que c'était acquis...

    Voilà une liste avec tes mots-clés: ['mot1', 'mot2', 'mot3'...]

    Si on veut associer un compteur à chaque mot, on peut créer une autre liste:
    [5, 12, 3] avec la correspondance donnée par les indices 'mot1' => 5, 'mot2' => 12, etc...

    Mais quand on cherche un mot dans une liste de 1000 mots par exemple, on essaie statistiquement 500 mots avant de trouver le bon: c'est long et ce n'est pas très élégant.

    Un dictionnaire en Python, qui porterait en même temps tes mots-clés et leur compteur, serait comme ça: D = {'mot1': 5, 'mot2': 12, 'mot3': 3}. Les mots sont les 'clés' du dictionnaire, et l'adresse de chacun de ces mots dans le dictionnaire est donné par calcul (=par hachage: http://fr.wikipedia.org/wiki/Fonction_de_hachage). Cela fait que quand on cherche D['mot3'], Python ne teste pas avant les mots précédents 'mot1' et 'mot2', mais tombe tout de suite dessus parce qu'il a déjà calculé son adresse.

    D'où ma suggestion...

    (plus d'infos ici => http://python.developpez.com/cours/TutoSwinnen/)

Discussions similaires

  1. search par mot clés dans produits plone
    Par Abla23 dans le forum Zope
    Réponses: 4
    Dernier message: 03/07/2006, 17h34
  2. détection mot clef dans un texte
    Par Royd938 dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 19/04/2006, 18h12
  3. recherche par mots-clés dans base access
    Par syber72 dans le forum Access
    Réponses: 2
    Dernier message: 07/03/2006, 13h53
  4. Comment stocker des mots clés dans une bas Mysql
    Par renofx1 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 05/01/2006, 00h57
  5. [FLASH MX] Mot cliquable dans un texte
    Par Greutzeb dans le forum Flash
    Réponses: 2
    Dernier message: 05/05/2005, 13h20

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