Python : trier les n-grammes
Résolu
GwendoDrum
Messages postés
5
Date d'inscription
samedi 2 juillet 2022
Statut
Membre
Dernière intervention
2 juillet 2022
-
2 juil. 2022 à 11:10
yg_be Messages postés 21496 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 2 juin 2023 - 2 juil. 2022 à 13:35
yg_be Messages postés 21496 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 2 juin 2023 - 2 juil. 2022 à 13:35
A voir également:
- Python : trier les n-grammes
- Ce programme est écrit en python. il construit un mot secret dans une variable mais il ne l'affiche pas. modifiez-le pour qu'il affiche le mot secret. exécutez-le. quel est ce mot secret ? ✓ - Forum Python
- Python est introuvable. exúcutez sans argument pour procúder ó l - Forum Python
- \R python ✓ - Forum Python
- Python introuvable - Forum Python
- Triez la liste comme sur cette illustration (attention, on ne voit que le début …). quel est le mot formé par les 6 dernières lettres de la colonne code ? - Forum Excel
5 réponses
yg_be
Messages postés
21496
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 juin 2023
1 343
2 juil. 2022 à 11:30
2 juil. 2022 à 11:30
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)
GwendoDrum
Messages postés
5
Date d'inscription
samedi 2 juillet 2022
Statut
Membre
Dernière intervention
2 juillet 2022
2 juil. 2022 à 11:57
2 juil. 2022 à 11:57
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.
yg_be
Messages postés
21496
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 juin 2023
1 343
2 juil. 2022 à 12:12
2 juil. 2022 à 12:12
moi je ferais plutôt
Tu fais un import que tu ne nous montres pas?
print(type(fdist),fdist)pour comprendre ce que contient fdist.
Tu fais un import que tu ne nous montres pas?
GwendoDrum
Messages postés
5
Date d'inscription
samedi 2 juillet 2022
Statut
Membre
Dernière intervention
2 juillet 2022
2 juil. 2022 à 12:21
2 juil. 2022 à 12:21
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>
yg_be
Messages postés
21496
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 juin 2023
1 343
2 juil. 2022 à 12:35
2 juil. 2022 à 12:35
Pour obtenir une liste triée, je pense que tu peux faire:
Cela devrait afficher les 10 premiers éléments, pour vérifier si le tri est correct.
ltri=sorted(fdist.items(),key= lambda x: -x[1]) for i in range(10): print(ltri[i])
Cela devrait afficher les 10 premiers éléments, pour vérifier si le tri est correct.
GwendoDrum
Messages postés
5
Date d'inscription
samedi 2 juillet 2022
Statut
Membre
Dernière intervention
2 juillet 2022
2 juil. 2022 à 12:49
2 juil. 2022 à 12:49
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 ?
yg_be
Messages postés
21496
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 juin 2023
1 343
2 juil. 2022 à 12:58
2 juil. 2022 à 12:58
Si x est un élément dans le résultat,
x c'est
x[1], c'est n
Et on prends -x[1] comme clé de tri, puisque tu veux un tri descendant sur n
x c'est
('mot1', 'mot2) n
x[1], c'est n
Et on prends -x[1] comme clé de tri, puisque tu veux un tri descendant sur n
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
GwendoDrum
Messages postés
5
Date d'inscription
samedi 2 juillet 2022
Statut
Membre
Dernière intervention
2 juillet 2022
2 juil. 2022 à 13:10
2 juil. 2022 à 13:10
Super merci beaucoup !
yg_be
Messages postés
21496
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 juin 2023
1 343
2 juil. 2022 à 13:35
2 juil. 2022 à 13:35
Le moment venu, peux-tu marquer la discussion comme résolue, via les
...en dessous de ta question initiale?