No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Distribuciónes de frecuencia de palabras

8/24
Recursos

Aportes 9

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

En realidad, analizando este tipo de datos se encuentran aspectos relacionados con los sistemas complejos. Un ejemplo es que tanto en el libro de Moby Dick como en cualquier obra ( un periódico, la biblia, etc.) la distribución de palabras sigue una ley de potencias (o power law). Una explicación a este fenómeno se da con la criticalidad auto-organizada. Para verificar si se cumple esta ley de potencias se debe verifica una tendencia linear graficando en escala logarítmica ambos ejes (un gráfico log-log). En el caso del libro de Moby Dick tenemos:

Esto se conoce como la ley de Zipf. En el libro “How nature works” de Per Bak muestra este ejemplo:

Una forma de tener el gráfico log-log de la distribución de palabras en el libro “Moby Dick” es (cuando ya tenemos el fdist) usando:

a=list(fdist.values())
a=np.array(a)
a=np.sort(a)
a=a[::-1]
plt.yscale('log')
plt.xscale('log')
plt.plot(a)

Les dejo una versión alternativa para que no creen el objeto “fdist”, ya que es un atributo del texto en si

text1.vocab().most_common(20)
text1.vocab().plot(20)

y se obtiene el mismo resultado (ya que text1.vocab() es un objeto fdist)

Estaba haciendo usando la clase Counter de la libreria collections (Integrada en python) es mucho mas rapida (3-5 veces mas rapida) que la funcion de nltk, la diferencia es que no va ha tener la funciones integradas de FreqDist como la de plot.
Pero eso ya seria un factor a conciderar para volumenes mucho mayores si vale la pena ese rendimiento extra requerido

Como nota, si previamente ordenamos las listas de tokens se obtiene un mejor rendimiento, en caso de usar Counter es mucho mayor


_

text1.count('monster') # cuenta las vecesque aparece la palabra en el texto
fdist = FreqDist(text1) # agrega a un diccionario las veces que aparece cada palabra del texto
fdist.mot_common(20) # muestra las palabras que más se repiten
fdist.plot(20) # muestra un gráfico ára las palabras que más se repiten
fdist['moster'] # consultar diccionario 

Es interesante ver la diferencia en velocidad entre los métodos. Adjunto la gráfica correspondiente al texto “Personals Corpus”

Se observa la tendencia del autor a usar ciertas palabras más que otras.

Minuto 5:08 cuando dice que es un diagrama de barras o histograma, es claramente incorrecto, es un lineplot.

Diría que es muy pesado para la computadora correr ese ciclo for ya que estaríamos hablando de un Big On**2, osea tiene crecimiento polinominial, estos son algoritmos que deben usarse cuando el input o la entrada de datos es pequeña

De hecho la clase Text (que es lo que es text1) ya tiene el método vocab que nos devuelve la distribución de frecuencias de las palabras.

fdist = text1.vocab()

Creo que encontré un bug en nltk==3.8.1

No creo que “monster” se use más seguido que “the”. Si acaso al revés.