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.
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.
Vous pouvez utiliser la méthode count
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))
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.
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.
Bonjour,
Pour tyrtamos, votre méthode elle me semble super mais malheureusement j'ai rien comprisde 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 ?
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/)
Partager