FreqDist dans NLTK pas de tri de sortie
Je suis nouveau sur Python et j'essaie d'apprendre par moi-même le traitement du langage. NLTK en python a une fonction appelée FreqDist qui donne la fréquence des mots dans un texte, mais pour quelque raison il ne fonctionne pas correctement.
C'est ce que le tutoriel a m'écrire:
fdist1 = FreqDist(text1)
vocabulary1 = fdist1.keys()
vocabulary1[:50]
Donc, fondamentalement, c'est censé me donner une liste des 50 mots les plus fréquents dans le texte. Lorsque j'exécute le code, le résultat est le 50 moins fréquentes mots dans l'ordre de moins fréquent plus fréquent, par opposition à l'autre manière autour. La sortie que je reçois est comme suit:
[u'succour', u'four', u'woods', u'hanging', u'woody', u'conjure', u'looking', u'eligible', u'scold', u'unsuitableness', u'meadows', u'stipulate', u'leisurely', u'bringing', u'disturb', u'internally', u'hostess', u'mohrs', u'persisted', u'Does', u'succession', u'tired', u'cordially', u'pulse', u'elegant', u'second', u'sooth', u'shrugging', u'abundantly', u'errors', u'forgetting', u'contributed', u'fingers', u'increasing', u'exclamations', u'hero', u'leaning', u'Truth', u'here', u'china', u'hers', u'natured', u'substance', u'unwillingness...]
Je suis de copier le tutoriel exactement, mais je dois avoir fait quelque chose de mal.
Voici le lien vers le tutoriel:
http://www.nltk.org/book/ch01.html#sec-computing-with-language-texts-and-words
L'exemple est de droite sous le titre "la Figure 1.3: Comptage de Mots Apparaissant dans un Texte (une distribution de fréquence)"
Personne ne sait comment je pourrais résoudre ce problème?
['wonderingly', 'wonderments', 'wondrousness', 'wonst', 'woodcock', 'wooded', 'woodland', 'woodpecker', 'woody', 'wooing', 'woracious', 'wordless', 'worker', 'workers', 'workmen', 'worldly', 'worming', 'worried', 'worryings', 'wounding', 'wounds', 'wrangling', 'wrap', 'wrapall', 'wrapping', 'wreak', 'wreath', 'wrestling', 'wrestlings', 'wretchedly', 'wriggles', 'wring', 'wrinkling', 'writhed', 'wrung', 'yawed', 'yawing', 'yawingly', 'yearly', 'yokes', 'yoking', 'youngest', 'youngish', 'yourselbs', 'zag', 'zay', 'zephyr', 'zig', 'zoned', 'zoology']
?Ou est l'ordre inversé? Ou êtes-vous d'obtenir quelque chose de complètement différent?
J'obtiens ceci: [u'succour', u'four', u'woods', u'hanging', u'woody', u'conjure', u 'regardant', u'eligible', u'scold', u'unsuitableness', u'meadows', u'stipulate', u'leisurely', u'bringing', u'disturb', u'internally', u'hostess', u'mohrs', u'persisted', u'Does', u'succession', u'tired', u'cordially', u'pulse', u'elegant', u'second', u'sooth', u'shrugging', u'abundantly', u'errors', u'forgetting', u'contributed', u'fingers', u'increasing', u'exclamations', u'hero', u'leaning', u'Truth', u'here', u'china', u hers', u'natured', u'substance', u'unwillingness...]
Je pense que le vôtre est le cinquante dernières les mots par ordre alphabétique. J'ai peut-être tort, mais ce qu'il regarde comme je suis, il est les mots qui apparaissent dans le texte le moins grand nombre de fois
Vous voudrez peut-être consulter votre
text1
. Comment définissez-vous text1
? Je ne obtenir votre sortie dans votre dernier commentaire (à la sortie que vous recherchez) lorsque j'exécute le code dans votre post. La sortie de mon premier commentaire est le cinquante dernières paroles du même texte (comme l'a ordonné par FreqDist
).OriginalL'auteur user3528925 | 2014-04-13
Vous devez vous connecter pour publier un commentaire.
Cette réponse est vieux. Utilisation cette réponse à la place.
Afin de résoudre ce problème, je vous conseille de suivre les étapes suivantes:
1. Vérification de la version de
nltk
vous utilisez:Les anciennes versions de
nltk
n'ont pas sortableFreqDist.keys
méthode.2. Vérifiez que vous n'avez pas par inadvertance, modifié
text1
ouvocabulary1
:Ouvrir un nouveau shell et de recommencer le processus à nouveau depuis le début:
Noter que vocabulary1 ne doit pas contenir la chaîne
u'succour'
(la première chaîne unicode dans la sortie de votre premier post):3. Si vous rencontrez toujours des difficultés, d'inspecter le code source de votre texte et des listes pour s'assurer qu'ils correspondent à ce que vous voyez ci-dessous:
Si votre code source ou les listes de texte ne correspondent pas au-dessus exactement, envisagez l'installation de
nltk
avec la plus récente version stable.[u'funereal', u'unscientific', u'divinely', u'foul', u'four', u'gag', u'prefix', u'woods', u'clotted', u'Duck', u'hanging', u'plaudits', u'woody', u'Until', u'marching', u'disobeying', u'canes', u'granting', u'advantage', u'Westers', u'insertion', u'DRYDEN', u'formless', u'Untried', u'superficially', u'Western', u'portentous', u'meadows', u'sinking', u'Ding', u'Spurn', u'treasuries', u'churned', u'oceans', u'invasion', u'powders', u'tinkerings', u'tantalizing', u'yellow'...]
Désolé de l'entendre. J'ai ajouté quatre autres mesures que vous pourriez prendre pour résoudre ce problème, la réponse ci-dessus. Permettez-moi de savoir comment il va.
Le début et la fin du texte sont exactement les mêmes que ceux que vous avez montré. J'ai essayé de lancer la première partie que vous avez écrit, mais il me donne une erreur de syntaxe
Assurez-vous de copier uniquement la première ligne de chaque
inspect.getsource()
appel. Ce serait donc l'intégralité du script: ligne 1:import inspect
, ligne 2:from nltk import FreqDist
, ligne 3:print inspect.getsource(FreqDist.keys)
.Juste par curiosité, quand vous tapez
import nltk
puis (sur la ligne suivante)print nltk.__version__
, la sortie que vous obtenez?OriginalL'auteur πόδας ὠκύς
De NLTK de GitHub:
Donc pour NLKT version 3, au lieu de
fdist1.keys()[:50]
, utilisezfdist1.most_common(50)
.La tutoriel a également été mis à jour à:
OriginalL'auteur Hugo
Comme une alternative à l'utilisation de FreqDist, vous pouvez simplement utiliser
Counter
de collections, voir aussi https://stackoverflow.com/questions/22952069/how-to-get-the-rank-of-a-word-from-a-dictionary-with-word-frequencies-python/22953416#22953416 :OriginalL'auteur alvas
fdist1 contient la "clef" - des mots, des "valeurs" - pour la fréquence nombre de mots.
Ci-dessus variable fdist1 n'est pas triée par conséquent, il ne sera pas imprimé top 50 des résultats basés sur la commande. Veuillez utiliser le code suivant pour la première trier:
Cela permettra d'imprimer le top 50 des mots fréquents.
OriginalL'auteur Kaushik Chowdhury