python - tag - FreqDist con NLTK
nltk pos_tag (4)
El FreqDist
de FreqDist
acepta cualquier iterable. Como una cadena se itera carácter por carácter, está separando las cosas de la forma en que lo estás experimentando.
Para hacer un recuento de palabras, necesita alimentar palabras de FreqDist
. ¿Cómo haces eso? Bueno, podría pensar (como han sugerido otros en la respuesta a su pregunta) alimentar todo el archivo a 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
construye modelos de palabras a partir de oraciones. Necesita ser alimentado cada oración una a la vez. Hará un trabajo relativamente pobre cuando se le dan párrafos enteros o incluso documentos.
¿Entonces lo que hay que hacer? Fácil, añade un tokenizador de oraciones!
>>> fdist = FreqDist()
>>> for sentence in nltk.tokenize.sent_tokenize(p):
... for word in nltk.tokenize.word_tokenize(sentence):
>>> fdist[word] += 1
Una cosa que se debe tener en cuenta es que hay muchas formas de personalizar el texto. Los módulos nltk.tokenize.sent_tokenize
y nltk.tokenize.word_tokenize
simplemente seleccionan un valor predeterminado razonable para texto en inglés relativamente limpio. Hay varias otras opciones para elegir, que puedes leer en la documentación de la API .
NLTK en python tiene una función FreqDist que le da la frecuencia de las palabras dentro de un texto. Intento pasar mi texto como argumento, pero el resultado es de la forma: ['''', ''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 ''] mientras que en el ejemplo en el sitio web de NLTK el resultado fueron palabras completas no cartas. Lo estoy haciendo de esta manera:
file_y = open(fileurl)
p = file_y.read()
fdist = FreqDist(p)
vocab = fdist.keys()
vocab[:100]
¿Sabes lo que tengo mal por favor? ¡Gracias!
FreqDist se ejecuta en una matriz de tokens. Le está enviando una matriz de caracteres (una cadena) donde debería haber tokenizado primero la entrada:
words = nltk.tokenize.word_tokenize(p)
fdist = FreqDist(words)
Simplemente tienes que usarlo así:
import nltk
from nltk import FreqDist
sentence=''''''This is my sentence''''''
tokens = nltk.word_tokenize(sentence)
fdist=FreqDist(tokens)
La variable fdist es del tipo "clase ''nltk.probability.FreqDist" y contiene la distribución de frecuencia de las palabras.
FreqDist
espera un iterable de tokens. Una cadena es iterable --- el iterador produce cada carácter.
Pase su texto a un tokenizador primero, y pase los tokens a FreqDist
.