Saltar a contenido

Crecimiento del vocabulario y espectro de frecuencias

Dos gráficos de la distribución de las palabras de un texto que complementan la ley de Zipf: el crecimiento del vocabulario con la longitud del texto según la ley de Heaps y el espectro de frecuencias, cuántos tipos de palabra aparecen exactamente una, dos, tres veces. Las funciones reciben los ejes ax y devuelven Axes.

Las funciones son las del núcleo anyTS; el ajuste de la ley de Heaps se describe en fit_heaps y el espectro en calc_frequency_spectrum. Las etiquetas por defecto son las inglesas de VISUALIZER_LABELS en anyts.constants; labels sustituye cualquiera de ellas.

Ley de Heaps

heaps_plot(words, ax=None, labels=None)

El tamaño del vocabulario \(V\) tras cada palabra del texto y la curva ajustada \(V(N) = K \cdot N^{\beta}\) de fit_heaps con sus parámetros en la leyenda; la curva depende del orden de las palabras.

Parámetro Tipo Por defecto Descripción
words list[str] - Palabras del texto en orden
ax Axes None Ejes para el gráfico
labels dict[str, str] None Etiquetas sobre las de por defecto: title, xlabel, ylabel, growth (la curva), fit (una cadena de formato con k y beta)

Unas palabras que no son una lista de cadenas lanzan SourceTypeError, menos de dos palabras SourceError; unas etiquetas que merge_labels rechaza y un ax que no es un Axes de matplotlib lanzan ParameterError.

Espectro de frecuencias

frequency_spectrum_plot(words, ax=None, labels=None)

El número de tipos de palabra \(V(m)\) que aparecen exactamente \(m\) veces (calc_frequency_spectrum) en coordenadas logarítmicas; el borde izquierdo son los hápax. El espectro está en la base de las medidas de diversidad de Yule, Sichel, Michéa y Honoré, y su forma muestra lo lejos que está el vocabulario del texto de agotarse.

Parámetro Tipo Por defecto Descripción
words list[str] - Palabras del texto
ax Axes None Ejes para el gráfico
labels dict[str, str] None Etiquetas sobre las de por defecto: title, xlabel, ylabel

Unas palabras que no son una lista de cadenas lanzan SourceTypeError, la falta de palabras SourceError; unas etiquetas que merge_labels rechaza y un ax que no es un Axes de matplotlib lanzan ParameterError.

Los gráficos de los lemas de Marianela de Galdós del corpus de literatura:

import matplotlib.pyplot as plt

from ests import WordsExtractor
from ests.datasets import SpanishLiterature
from ests.visualizers import frequency_spectrum_plot, heaps_plot

sl = SpanishLiterature()
sl.download()
text = next(
    record["text"] for record in sl.get_records(author="galdos") if record["title"] == "Marianela"
)
lemmas = WordsExtractor(use_lexemes=True, lowercase=True, filter_nums=True).extract(text)

fig, (left, right) = plt.subplots(1, 2, figsize=(13, 4.5))
heaps_plot(lemmas, ax=left)
frequency_spectrum_plot(lemmas, ax=right)

ests