Saltar a contenido

Métricas de diversidad léxica

ests.diversity_stats.DiversityStats

Descripción

Módulo para calcular las principales métricas de diversidad léxica de un texto. La fuente de datos puede ser un texto o un objeto Doc de la biblioteca spaCy.

El módulo permite usar un objeto WordsExtractor ya configurado para la segmentación en palabras que precede al cálculo; para un Doc, el extractor indicado se aplica al texto del Doc, y sin él las palabras salen de sus tokens. Sea cual sea la fuente y el extractor, las palabras se pasan a minúsculas, porque todas las métricas cuentan lexemas.

Nota

Las métricas se calculan al acceder al atributo correspondiente o al llamar al método get_stats del objeto DiversityStats.

Parámetros

Parámetro Tipo Por defecto Descripción
source str/Doc - Fuente de datos (cadena u objeto Doc)
words_extractor WordsExtractor None Herramienta de extracción de palabras; para un Doc se aplica a su texto cuando se indica
window_len int 50 Tamaño de la ventana para MATTR y del segmento para MSTTR
mtld_threshold float 0.72 Umbral de TTR para MTLD, MA-MTLD y MTLD-W
mtld_min_len int 10 Longitud mínima del factor para MTLD, MA-MTLD y MTLD-W
hdd_sample_size int 42 Tamaño de la muestra para HD-D
log_base float 10 Base del logaritmo para las métricas de Summer, Maas y Dugast

Convenciones

Los valores de algunas métricas dependen de parámetros que cada biblioteca elige de forma distinta. Los valores por defecto coinciden con koRpus y con lexical-diversity de Kyle, y todos son parámetros de la clase. La comparación con el umbral de MTLD es la única convención que no es un parámetro:

Parámetro esTS Otras bibliotecas
Base del logaritmo para Summer, Maas, U de Dugast y k de Dugast 10 LexicalRichness, textcomplexity y zipfR: natural
Ventana de MATTR y segmento de MSTTR 50 quanteda y koRpus: 100
Umbral de TTR para MTLD 0.72 0.66-0.75 en la bibliografía
Comparación con el umbral de MTLD un factor se cierra con TTR ≤ 0.72; en McCarthy y Jarvis (2010) el factor termina cuando el TTR «alcanza» 0.720 lexical-diversity y TAALED: < estricto, así que en los factores donde el TTR da exactamente el umbral (18/25, 36/50) los valores de MTLD, MA-MTLD y MTLD-W divergen
Longitud mínima del factor de MTLD 10 koRpus la aplica solo a MA-MTLD, LexicalRichness y textcomplexity no la aplican
Tamaño de la muestra de HD-D 42 35-50 en la bibliografía

Según Zenker y Kyle (2021), MATTR, MTLD y HD-D son estables en textos de 50-200 palabras o más, MTLD-W, MA-MTLD y Maas son inestables en textos cortos, y la familia de TTR nunca se estabiliza. Para comparar textos de distinta longitud use el cálculo por ventanas con intervalos de confianza.

Atributos

Atributo Tipo Descripción
words tuple[str] Tupla de las palabras extraídas en minúsculas
window_len, mtld_threshold, mtld_min_len, hdd_sample_size, log_base int/float Los parámetros de las métricas; cambiarlos en el objeto cambia las métricas
frequency_spectrum dict[int, int] Espectro de frecuencias: número de lexemas con una frecuencia dada
ttr float Type-Token Ratio (TTR)
rttr float Root Type-Token Ratio (RTTR)
cttr float Corrected Type-Token Ratio (CTTR)
httr float Herdan Type-Token Ratio (HTTR)
sttr float Summer Type-Token Ratio (STTR)
mttr float Maas Type-Token Ratio (MTTR)
dttr float Dugast Type-Token Ratio (DTTR)
mattr float Moving Average Type-Token Ratio (MATTR)
msttr float Mean Segmental Type-Token Ratio (MSTTR)
mtld float Measure of Textual Lexical Diversity (MTLD)
mamtld float Moving Average Measure of Textual Lexical Diversity (MA-MTLD)
mtldw float MTLD con ventana móvil y texto envuelto (MTLD-W)
hdd float Hypergeometric Distribution D (HD-D)
simpson_index float Índice de Simpson (D)
inverse_simpson_index float Índice de Simpson inverso (1/D)
gini_simpson_index float Índice de Gini-Simpson (1-D)
hapax_index float Índice de hápax, también R de Honoré
honore_r float Alias del índice de hápax
yule_k float Característica de Yule (K de Yule)
yule_i float Característica inversa de Yule (I de Yule)
herdan_vm float Vm de Herdan
sichel_s float S de Sichel
michea_m float M de Michéa
brunet_w float W de Brunet
dugast_k float k de Dugast
baayen_p float P de Baayen
hapax_ratio float Proporción de hápax entre los lexemas
alpha2 float Exponente α₂
entropy float Entropía de Shannon en bits
evenness float Equitatividad: cociente entre la entropía y su máximo
perplexity float Perplejidad
zipf_alpha float Pendiente de la ley de Zipf
heaps_beta float Exponente de la ley de Heaps

Nota

Cada métrica puede calcularse por separado llamando a la función correspondiente. La información detallada sobre las métricas de diversidad léxica y las funciones que las calculan está en la sección correspondiente.

Métodos

windowed

Cálculo por ventanas de una métrica: su valor en ventanas consecutivas del texto de igual longitud, la media, la desviación típica muestral y el intervalo de confianza de la media por la distribución de Student. Es la forma estándar de comparar textos de distinta longitud; el STTR de Kubát y Milička es un TTR por ventanas de 1000 palabras con un intervalo de confianza del 95 %. En los textos más cortos que la ventana la métrica se calcula sobre todo el texto como una sola ventana; las ventanas con un valor no definido (nan) se ignoran. Si la métrica es infinita en al menos una ventana, la media es infinita y la desviación típica y el intervalo de confianza no están definidos.

Parámetros:

Parámetro Tipo Por defecto Descripción
stat str - Nombre de la métrica de get_stats
window_len int 100 Tamaño de la ventana
step int None Paso de la ventana, por defecto igual a su tamaño (las ventanas no se solapan)
confidence float 0.95 Nivel de confianza

Devuelve una tupla con nombre WindowStats con los campos mean, std, lower, upper y n_windows. Un nombre de métrica desconocido lanza UnknownStatError.

Ejemplo

from ests import DiversityStats

text = "Pies no tengo, ando; boca no tengo, hablo: cuándo dormir, cuándo levantarse, cuándo empezar labores"
ds = DiversityStats(text)
ds.windowed("ttr", window_len=5)
# WindowStats(mean=0.9333333333333332, std=0.11547005383792512, lower=0.6464898180167025, upper=1.220176848649964, n_windows=3)
ds.windowed("ttr", window_len=5, step=2).n_windows
# 6

get_stats

Devuelve un diccionario con las métricas de diversidad léxica calculadas.

Ejemplo de cálculo de las métricas de diversidad léxica:

Ejemplo

Código:

# Importar la biblioteca
from ests import DiversityStats

# Preparar los datos
text = "Pies no tengo, ando; boca no tengo, hablo: cuándo dormir, cuándo levantarse, cuándo empezar labores"

# Calcular las métricas
ds = DiversityStats(text)
ds.get_stats()

Resultado:

{'ttr': 0.7333333333333333,
'rttr': 2.840187787218772,
'cttr': 2.008316044185609,
'httr': 0.8854692840710255,
'sttr': 0.2500605793160848,
'mttr': 0.09738250756232528,
'dttr': 10.268784661968118,
'mattr': 0.7333333333333333,
'msttr': 0.7333333333333333,
'mtld': 15.0,
'mamtld': 12.0,
'mtldw': 13.25,
'hdd': nan,
'simpson_index': 0.047619047619047616,
'inverse_simpson_index': 21.0,
'gini_simpson_index': 0.9523809523809523,
'hapax_index': 992.9517404041437,
'yule_k': 444.44444444444446,
'yule_i': 8.642857142857142,
'herdan_vm': 0.1421338109037403,
'sichel_s': 0.18181818181818182,
'michea_m': 5.5,
'brunet_w': 6.00637847898991,
'dugast_k': 14.783895126869226,
'baayen_p': 0.5333333333333333,
'hapax_ratio': 0.7272727272727273,
'alpha2': 0.5,
'entropy': 3.3232314287976203,
'evenness': 0.9606293157795304,
'perplexity': 10.009038104159247,
'zipf_alpha': 0.4884512334695912,
'heaps_beta': 0.8366147342060046}

Muestra una tabla con las métricas de diversidad léxica calculadas.

Para ilustrar el método reutilizamos el código del ejemplo anterior:

Ejemplo

Código:

...

# Mostrar la tabla de métricas calculadas
ds.print_stats()

Resultado:

                                  Metric                                   |  Value
-------------------------------------------------------------------------------------
Type-Token Ratio (TTR)                                                     |   0.73
Root Type-Token Ratio (RTTR)                                               |   2.84
Corrected Type-Token Ratio (CTTR)                                          |   2.01
Herdan Type-Token Ratio (HTTR)                                             |   0.89
Summer Type-Token Ratio (STTR)                                             |   0.25
Maas Type-Token Ratio (MTTR)                                               |   0.10
Dugast Type-Token Ratio (DTTR)                                             |  10.27
Moving Average Type-Token Ratio (MATTR)                                    |   0.73
Mean Segmental Type-Token Ratio (MSTTR)                                    |   0.73
Measure of Textual Lexical Diversity (MTLD)                                |  15.00
Moving Average Measure of Textual Lexical Diversity (MA-MTLD)              |  12.00
Moving Average Measure of Textual Lexical Diversity with Wrap (MTLD-W)     |  13.25
Hypergeometric Distribution D (HD-D)                                       |   nan
Simpson's index (D)                                                        |   0.05
Inverse Simpson's index (1/D)                                              |  21.00
Gini-Simpson index (1-D)                                                   |   0.95
Hapax index (Honoré's R)                                                   |  992.95
Yule's characteristic K                                                    |  444.44
Yule's inverse characteristic I                                            |   8.64
Herdan's Vm                                                                |   0.14
Sichel's S                                                                 |   0.18
Michéa's M                                                                 |   5.50
Brunet's W                                                                 |   6.01
Dugast's k                                                                 |  14.78
Baayen's P                                                                 |   0.53
Hapax ratio                                                                |   0.73
Exponent α₂                                                                |   0.50
Shannon entropy (bits)                                                     |   3.32
Evenness                                                                   |   0.96
Perplexity                                                                 |  10.01
Zipf's law slope (α)                                                       |   0.49
Heaps' law exponent (β)                                                    |   0.84