Python : trier les n-grammes
Résolu
GwendoDrum
Messages postés
5
Date d'inscription
Statut
Membre
Dernière intervention
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'ai calculé les bigrammes (et n-grammes) présents dans un texte assez volumineux, ainsi que leurs fréquences respectives grâce au code suivant :
bigrams = nltk.bigrams(tokens)
fdist = nltk.FreqDist(bigrams)
for x,y in fdist.items():
print (x,y)
Ce qui me donne une longue liste de résultats sous la forme :
('mot1', 'mot2) n
avec n la fréquence d'apparition de chaque bigramme.
Maintenant, pour pouvoir exploiter ces bigrammes, j'aimerais :
1. Trier cette liste, pour afficher en premier les n les plus grands vers les n les plus petits
2. Filtrer cette liste pour ne faire apparaitre que certains mots qui m'intéressent
Je suis encore débutante sur Python et j'ai du mal à savoir quelles méthodes et fonctions utiliser pour quel format, par conséquent je n'ai pas la moindre idée de comment je peux m'y prendre pour atteindre ces objectifs.
Configuration: Macintosh / Firefox 102.0
J'ai calculé les bigrammes (et n-grammes) présents dans un texte assez volumineux, ainsi que leurs fréquences respectives grâce au code suivant :
bigrams = nltk.bigrams(tokens)
fdist = nltk.FreqDist(bigrams)
for x,y in fdist.items():
print (x,y)
Ce qui me donne une longue liste de résultats sous la forme :
('mot1', 'mot2) n
avec n la fréquence d'apparition de chaque bigramme.
Maintenant, pour pouvoir exploiter ces bigrammes, j'aimerais :
1. Trier cette liste, pour afficher en premier les n les plus grands vers les n les plus petits
2. Filtrer cette liste pour ne faire apparaitre que certains mots qui m'intéressent
Je suis encore débutante sur Python et j'ai du mal à savoir quelles méthodes et fonctions utiliser pour quel format, par conséquent je n'ai pas la moindre idée de comment je peux m'y prendre pour atteindre ces objectifs.
Configuration: Macintosh / Firefox 102.0
A voir également:
- Python : trier les n-grammes
- Citizen code python avis - Accueil - Outils
- Python est introuvable. exúcutez sans argument pour procúder ó l ✓ - Forum Python
- Mot secret python pix ✓ - Forum Python
- Python par la pratique : 101 exercices corrigés pdf - Forum Python
- Exercice python - Forum Python
5 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
nous pourrons être plus précis si tu partages ton code (veille à utiliser les balises : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code.
au minimum, décris précisément le type et le contenu de ta liste de résultats.
un exemple de tri qui précise que la clé de tri est le second élément de chaque tuple.
nous pourrons être plus précis si tu partages ton code (veille à utiliser les balises : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code.
au minimum, décris précisément le type et le contenu de ta liste de résultats.
un exemple de tri qui précise que la clé de tri est le second élément de chaque tuple.
l=[(("a","b"),5),(("x","y"),12),(("k","l"),3)] print(type(l),l) for x in l: print(type(x),x) l.sort( key=lambda e: e[1]) print(type(l),l)
Merci pour la réponse, et désolée pour le code, je n'ai pas encore l'habitude d'utiliser cette façon de faire. Du coup, je suis partie d'un DataFrame qui contient une colonne de texte (Commentaire) sur laquelle j'ai fait tous les traitements pour le nettoyage. Ensuite j'ai importé ce texte dans une liste que j'ai ensuite tokenisée pour pouvoir créer mes bigrammes, ce qui donne :
Au niveau de la sortie, voici un petit exemple de ce que je peux avoir (parmi quelques milliers de lignes) :
('salle', 'fitness') 1
('fitness', 'fermes') 1
('fermes', 'travaux') 1
('travaux', 'occasionnent') 1
('occasionnent', 'bruit') 1
Si je comprends bien ta réponse, il faudrait que je commence par créer un tuple qui prenne en résultat ma sortie ? J'ai fait un essai en modifiant la dernière partie de mon code comme ça :
Mais quand je vérifie avec un print(l) je n'ai qu'un seul bigramme qui s'est enregistré dedans.
text = "" for comment in df["Commentaire"]: text += comment tokens = nltk.word_tokenize(text) bigrams = nltk.bigrams(tokens) fdist = nltk.FreqDist(bigrams) for x,y in fdist.items(): print (x,y)
Au niveau de la sortie, voici un petit exemple de ce que je peux avoir (parmi quelques milliers de lignes) :
('salle', 'fitness') 1
('fitness', 'fermes') 1
('fermes', 'travaux') 1
('travaux', 'occasionnent') 1
('occasionnent', 'bruit') 1
Si je comprends bien ta réponse, il faudrait que je commence par créer un tuple qui prenne en résultat ma sortie ? J'ai fait un essai en modifiant la dernière partie de mon code comme ça :
bigrams = nltk.bigrams(tokens) l = [] fdist = nltk.FreqDist(bigrams) for x,y in fdist.items(): l = x,y
Mais quand je vérifie avec un print(l) je n'ai qu'un seul bigramme qui s'est enregistré dedans.
Pour les imports j'utilise seulement nltk que j'importe comme ça
J'ai utilisé la fonction FreqDist de nltk qui permet de calculer la fréquence et je l'ai utilisée pour chaque bigramme de la façon dont j'ai montré dans mon message précédent.
Je ne suis pas toujours très à l'aise avec les types, mais j'ai essayé la ligne que tu proposes et voilà ce que me ressort mon jupyter notebook
<class 'nltk.probability.FreqDist'> <FreqDist with 80625 samples and 106634 outcomes>
import nltk nltk.download('punkt')
J'ai utilisé la fonction FreqDist de nltk qui permet de calculer la fréquence et je l'ai utilisée pour chaque bigramme de la façon dont j'ai montré dans mon message précédent.
Je ne suis pas toujours très à l'aise avec les types, mais j'ai essayé la ligne que tu proposes et voilà ce que me ressort mon jupyter notebook
<class 'nltk.probability.FreqDist'> <FreqDist with 80625 samples and 106634 outcomes>
Ouah super ça a marché ! Merci beaucoup !
Par contre je ne comprends pas bien ce qui se passe au niveau du key= lambda x: -x[1]
Que fais exactement le -x ?
Par contre je ne comprends pas bien ce qui se passe au niveau du key= lambda x: -x[1]
Que fais exactement le -x ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question