Python : trier les n-grammes
Résolu/Fermé
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 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 - 2 juil. 2022 à 13:35
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 - 2 juil. 2022 à 13:35
A voir également:
- Python : trier les n-grammes
- Citizen code python - Guide
- Geometry dash python ✓ - Forum Python
- Lancer script python linux - Forum Ubuntu
- Ce programme est écrit en python ✓ - Forum Python
- Compris entre python ✓ - Forum Python
5 réponses
yg_be
Messages postés
22720
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 avril 2024
1 476
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
22720
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 avril 2024
1 476
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
22720
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 avril 2024
1 476
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
22720
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 avril 2024
1 476
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
22720
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 avril 2024
1 476
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?