es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Distribución de frecuencia de bigramas

He hecho lo siguiente

import nltk

palabras = nltk.corpus.brown.words()
freq = nltk.FreqDist(palabras)

Y puedo encontrar la frecuencia de ciertas palabras en el corpus Brown, como

freq["the"]
62713

Pero ahora quiero poder encontrar la Distribución de Frecuencia de bigramas específicos. Así que luego intenté

bigrams = nltk.bigrams(palabras)
freqbig = nltk.FreqDist(bigrams)

Pero siempre obtengo 0 para cada bigrama que ingreso, como

freqbig["the man"]
0

¿Qué estoy haciendo mal?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema con tu código es que nltk.bigrams() devuelve un objeto generador, y los objetos generadores solo se pueden iterar una vez. Por lo tanto, necesitas convertir el objeto generador en una lista o tupla antes de pasarlo a nltk.FreqDist(), o iterar a través de él solo una vez y guardar los bigramas en una nueva lista antes de pasarlo a nltk.FreqDist(). Aquí tienes dos soluciones al problema:

    Solución 1: Convertir el objeto generador en una lista o tupla

    import nltk
    
    words = nltk.corpus.brown.words()
    bigrams = list(nltk.bigrams(words))
    freqbig = nltk.FreqDist(bigrams)
    
    freqbig[("the", "man")]
    

    Solución 2: Guardar los bigramas en una nueva lista

    import nltk
    
    words = nltk.corpus.brown.words()
    bigrams_list = []
    
    for bigram in nltk.bigrams(words):
        bigrams_list.append(bigram)
    
    freqbig = nltk.FreqDist(bigrams_list)
    
    freqbig[("the", "man")]
    

    Ambas soluciones deberían darte la frecuencia del bigrama “the man” en el corpus brown.

Comments are closed.