[~ # ~] nltk [~ # ~] dans python a une fonction FreqDist = qui vous donne la fréquence des mots dans un texte. J'essaie de passer mon texte en argument mais le résultat est de la forme:
[' ', 'e', 'a', 'o', 'n', 'i', 't', 'r', 's', 'l', 'd', 'h', 'c', 'y', 'b', 'u', 'g', '\n', 'm', 'p', 'w', 'f', ',', 'v', '.', "'", 'k', 'B', '"', 'M', 'H', '9', 'C', '-', 'N', 'S', '1', 'A', 'G', 'P', 'T', 'W', '[', ']', '(', ')', '0', '7', 'E', 'J', 'O', 'R', 'j', 'x']
alors que dans l'exemple du site Web [~ # ~] nltk [~ # ~] , le résultat était des mots entiers et pas seulement des lettres. Je le fais de cette façon:
file_y = open(fileurl)
p = file_y.read()
fdist = FreqDist(p)
vocab = fdist.keys()
vocab[:100]
Savez-vous ce que j'ai de mauvais pls? Merci!
FreqDist
attend un itérable de jetons. Une chaîne est itérable - l'itérateur donne chaque caractère.
Passez d'abord votre texte à un tokenizer et passez les tokens à FreqDist
.
FreqDist s'exécute sur un tableau de jetons. Vous lui envoyez un tableau de caractères (une chaîne) où vous auriez dû d'abord tokeniser l'entrée:
words = nltk.tokenize.Word_tokenize(p)
fdist = FreqDist(words)
Le NLTK FreqDist
accepte tout itérable. Comme une chaîne est itérée caractère par caractère, elle sépare les choses de la manière que vous vivez.
Pour compter les mots, vous devez alimenter FreqDist
mots. Comment tu fais ça? Eh bien, vous pourriez penser (comme d'autres l'ont suggéré dans la réponse à votre question) pour alimenter le fichier entier en nltk.tokenize.Word_tokenize
.
>>> # first, let's import the dependencies
>>> import nltk
>>> from nltk.probability import FreqDist
>>> # wrong :(
>>> words = nltk.tokenize.Word_tokenize(p)
>>> fdist = FreqDist(words)
Word_tokenize
construit des modèles Word à partir de phrases. Il doit être alimenté chaque phrase une par une. Il fera un travail relativement médiocre lorsqu'il recevra des paragraphes entiers ou même des documents.
Alors que faire? Facile, ajoutez un tokenizer de phrases!
>>> fdist = FreqDist()
>>> for sentence in nltk.tokenize.sent_tokenize(p):
... for Word in nltk.tokenize.Word_tokenize(sentence):
>>> fdist[Word] += 1
Une chose à garder à l'esprit est qu'il existe de nombreuses façons de symboliser le texte. Les modules nltk.tokenize.sent_tokenize
et nltk.tokenize.Word_tokenize
choisissez simplement une valeur par défaut raisonnable pour un texte anglais relativement propre. Il existe plusieurs autres options parmi lesquelles choisir, que vous pouvez lire dans la documentation API .
Vous devez simplement l'utiliser comme ceci:
import nltk
from nltk.probability import FreqDist
sentence='''This is my sentence'''
tokens = nltk.tokenize.Word_tokenize(sentence)
fdist=FreqDist(tokens)
La variable fdist est du type "class 'nltk.probability.FreqDist" et contient la distribution de fréquence des mots.