tagger tag spanish pos_tag pos freqdist español python nlp nltk

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 .