Métricas de diversidad léxica¶
DiversityStats(source, words_extractor=None, window_len=50, mtld_threshold=0.72, mtld_min_len=10, hdd_sample_size=42, log_base=10)
Las principales métricas de diversidad léxica de un texto, calculadas a partir de sus palabras.
Excepciones:
SourceTypeError- una fuente que no es ni una cadena ni unDoc, un extractor de otro tipo;SourceError- una fuente sin palabras, una cadena con un carácter sin forma UTF-8;ParameterError- un parámetro quecheck_paramsrechaza.
La clase extiende el DiversityStats del núcleo anyTS: en lugar de una lista de palabras recibe un texto o un objeto Doc de la biblioteca spaCy. Las palabras de un texto las extrae el WordsExtractor español o uno indicado, que para un Doc se aplica a su texto; sin extractor, las palabras de un Doc salen de sus tokens. Las palabras siempre se pasan a minúsculas, porque todas las métricas cuentan lexemas. La tabla de print_stats lleva las descripciones inglesas de las métricas del núcleo, anyts.constants.DIVERSITY_STATS_DESC.
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.print_stats()
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
Orlov's Z (words) | nan
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
Burstiness of the frequent lexemes | nan
Parámetros¶
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
source |
str / Doc |
- | Fuente de datos |
words_extractor |
WordsExtractor |
None |
Herramienta de extracción de palabras; para un Doc se aplica a su texto |
window_len |
int |
50 |
Tamaño de la ventana para MATTR y del segmento para MSTTR (MATTR_WINDOW_LEN) |
mtld_threshold |
float |
0.72 |
Umbral de TTR para MTLD, MA-MTLD y MTLD-W (MTLD_TTR_THRESHOLD) |
mtld_min_len |
int |
10 |
Longitud mínima del factor para MTLD, MA-MTLD y MTLD-W (MTLD_MIN_LEN) |
hdd_sample_size |
int |
42 |
Tamaño de la muestra para HD-D (HDD_SAMPLE_SIZE) |
log_base |
float |
10 |
Base del logaritmo para las métricas de Summer, Maas y Dugast (DIVERSITY_LOG_BASE) |
Las constantes de los valores por defecto entre paréntesis, aquí y en las tarjetas, son las de anyts.constants.
El objeto guarda las palabras en words, una tupla, y los cinco parámetros con sus nombres, modificables en el objeto. frequency_spectrum es el espectro de frecuencias de las palabras (calc_frequency_spectrum), y honore_r, un alias de hapax_index.
check_params(window_len=50, mtld_threshold=0.72, mtld_min_len=10, hdd_sample_size=42, log_base=10, *, messages=MESSAGES)
Comprueba los parámetros de las métricas: un window_len o un hdd_sample_size que no es un entero de al menos uno, un mtld_min_len que no es un entero no negativo, un mtld_threshold que no es un número en (0, 1) y un log_base que no es un número finito mayor que 1 lanzan ParameterError. Llamada antes de extraer las palabras, señala un parámetro erróneo antes que un texto vacío.
Convenciones¶
Algunas métricas dependen de convenciones que difieren entre bibliotecas. Todas salvo la comparación con el umbral de MTLD son parámetros de la clase:
| Parámetro | Por defecto | 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 (McCarthy & Jarvis, 2010) | lexical-diversity y TAALED: < estricto; los valores difieren cuando el TTR da exactamente el umbral |
| Longitud mínima del factor de MTLD | 10 |
koRpus: solo en MTLD-MA, descartando los factores más cortos en lugar de extenderlos; LexicalRichness y textcomplexity: no se aplica |
| 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. Los textos de distinta longitud se comparan mediante el cálculo por ventanas con intervalos de confianza.
Métricas¶
Cada métrica es una propiedad del objeto, calculada en cada acceso por la función de su tarjeta con los parámetros del objeto, y get_stats las da todas.
| Métrica | Qué mide | Rango | Un valor mayor indica |
|---|---|---|---|
ttr |
Proporción de lexemas entre las palabras | 0-1 | Un vocabulario más rico |
rttr |
Lexemas frente a la raíz cuadrada de las palabras | 0 o más | Un vocabulario más rico |
cttr |
Lexemas frente a la raíz cuadrada del doble de las palabras | 0 o más | Un vocabulario más rico |
httr |
Lexemas frente a las palabras en logaritmos | 0-1 | Un vocabulario más rico |
sttr |
Lexemas frente a las palabras en logaritmos dobles | 1 o menos, nan con un solo lexema o en un texto no más largo que la base |
Un vocabulario más rico |
mttr |
Repetición de las palabras en logaritmos | 0 o más | Un vocabulario más pobre |
dttr |
Recíproco de la métrica de Maas | 0 o más, inf sin palabras repetidas |
Un vocabulario más rico |
mattr |
TTR medio de una ventana móvil | 0-1 | Un vocabulario más rico |
msttr |
TTR medio de segmentos consecutivos | 0-1 | Un vocabulario más rico |
mtld |
Palabras por factor, un tramo en el que el TTR baja hasta el umbral | Más de 0, inf sin palabras repetidas |
Un vocabulario más rico |
mamtld |
Longitud media de los factores que empiezan en cada palabra | Hasta el número de palabras, nan si ningún factor se completa |
Un vocabulario más rico |
mtldw |
Longitud media de los factores que empiezan en cada palabra, con vuelta al inicio del texto | Hasta el número de palabras, nan si ningún factor se completa |
Un vocabulario más rico |
hdd |
TTR esperado de una muestra aleatoria | 0-1, nan con menos de 50 palabras o menos palabras que la muestra |
Un vocabulario más rico |
simpson_index |
Probabilidad de que dos palabras sean el mismo lexema | 0-1, nan con menos de dos palabras |
Un vocabulario más pobre |
inverse_simpson_index |
Número efectivo de lexemas de orden dos | 1 o más, inf sin palabras repetidas, nan con menos de dos palabras |
Un vocabulario más rico |
gini_simpson_index |
Probabilidad de que dos palabras sean lexemas distintos | 0-1, nan con menos de dos palabras |
Un vocabulario más rico |
hapax_index |
Proporción de hápax entre los lexemas frente a la longitud | 0 o más, inf sin palabras repetidas, nan con menos de dos palabras |
Un vocabulario más rico |
yule_k |
Repetición de las palabras | 0-10 000, nan con menos de dos palabras |
Un vocabulario más pobre |
yule_i |
Inversa de la K de Yule | Más de 0, inf sin palabras repetidas, nan con menos de dos palabras |
Un vocabulario más rico |
herdan_vm |
Desigualdad de las frecuencias | 0-1, nan con menos de dos palabras |
Un vocabulario más pobre |
sichel_s |
Proporción de dis legomena entre los lexemas | 0-1 | Más lexemas usados dos veces |
michea_m |
Lexemas por dis legomenon | 1 o más, inf sin dis legomena |
Menos lexemas usados dos veces |
brunet_w |
Palabras frente a los lexemas | De 1 al número de palabras | Un vocabulario más pobre |
dugast_k |
Lexemas frente a las palabras en logaritmos | 0 o más, nan en un texto no más largo que la base |
Un vocabulario más rico |
baayen_p |
Proporción de hápax entre las palabras | 0-1 | Un vocabulario que crece más deprisa |
orlov_z |
Longitud del texto en palabras con la que la ley de Zipf mejor se ajusta al vocabulario | Más de 0, nan sin solución, inf más allá de los float |
Un vocabulario más rico |
hapax_ratio |
Proporción de hápax entre los lexemas | 0-1 | Más lexemas usados una sola vez |
alpha2 |
Forma de la parte baja del espectro de frecuencias | 1 o menos, nan sin hápax |
Más hápax frente a dis legomena |
entropy |
Información por palabra en bits | 0 o más | Un vocabulario más rico |
evenness |
Entropía frente a su máximo | 0-1, nan con un solo lexema |
Frecuencias más uniformes |
perplexity |
Número efectivo de lexemas | De 1 al número de lexemas | Un vocabulario más rico |
zipf_alpha |
Caída de la frecuencia con el rango | 0 o más, nan con un solo lexema |
Frecuencias que caen más deprisa |
heaps_beta |
Crecimiento del vocabulario con la longitud | 0 o más, nan con menos de dos palabras |
Un vocabulario que crece más deprisa |
burstiness |
Índice medio de ráfagas de los lexemas de cinco apariciones o más | De -1 a 1, nan sin ellos |
Palabras usadas en ráfagas |
Las funciones y las tuplas con nombre de las tarjetas se importan de ests.diversity_stats.
Type-Token Ratio (TTR)¶
calc_ttr(text)
La medida más simple de la diversidad léxica; no está corregida por la longitud del texto.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
Root Type-Token Ratio (RTTR)¶
calc_rttr(text)
Una modificación del TTR (Guiraud, 1960).
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
Corrected Type-Token Ratio (CTTR)¶
calc_cttr(text)
Una modificación del TTR (Carroll, 1964).
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
Herdan Type-Token Ratio (HTTR)¶
calc_httr(text)
Una modificación logarítmica del TTR (Herdan, 1960).
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
Summer Type-Token Ratio (STTR)¶
calc_sttr(text, base=10)
Una modificación logarítmica del TTR (Summer, 1966). El valor depende de la base del logaritmo (véanse las convenciones). Es nan en un texto de un solo lexema, donde el numerador no está definido, y en un texto no más largo que la base (\(\log \log N \le 0\)), incluidas las ventanas así de cortas de calc_windowed.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
base |
float |
10 |
Base del logaritmo (DIVERSITY_LOG_BASE) |
Una base que no es un número finito mayor que 1 lanza ParameterError.
Maas Type-Token Ratio (MTTR)¶
calc_mttr(text, base=10)
Una modificación logarítmica del TTR (Maas, 1972). El valor depende de la base del logaritmo (véanse las convenciones).
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
base |
float |
10 |
Base del logaritmo (DIVERSITY_LOG_BASE) |
Una base que no es un número finito mayor que 1 lanza ParameterError.
Dugast Type-Token Ratio (DTTR)¶
calc_dttr(text, base=10)
Una modificación logarítmica del TTR (Dugast, 1978), el recíproco de la métrica de Maas. El valor depende de la base del logaritmo (véanse las convenciones). Un texto sin palabras repetidas tiene un valor infinito.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
base |
float |
10 |
Base del logaritmo (DIVERSITY_LOG_BASE) |
Una base que no es un número finito mayor que 1 lanza ParameterError.
Moving Average Type-Token Ratio (MATTR)¶
calc_mattr(text, window_len=50)
Una modificación del TTR con media móvil (Covington & McFall, 2010), independiente de la longitud del texto: una ventana de tamaño fijo se desliza por el texto y se promedia el TTR de cada ventana. En los textos más cortos que la ventana se devuelve el TTR de todo el texto.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
window_len |
int |
50 |
Tamaño de la ventana (MATTR_WINDOW_LEN) |
Un window_len que no es un entero de al menos uno lanza ParameterError.
Mean Segmental Type-Token Ratio (MSTTR)¶
calc_msttr(text, segment_len=50)
Una modificación del TTR por segmentación (Johnson, 1944), independiente de la longitud del texto: el texto se divide en segmentos de tamaño fijo y se promedia el TTR de cada segmento; un último segmento incompleto se descarta. En los textos más cortos que el segmento se devuelve el TTR de todo el texto.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
segment_len |
int |
50 |
Tamaño del segmento (MATTR_WINDOW_LEN) |
Un segment_len que no es un entero de al menos uno lanza ParameterError.
Measure of Textual Lexical Diversity (MTLD)¶
calc_mtld(text, min_len=10, threshold=0.72)
Una modificación del MSTTR (McCarthy, 2005), independiente de la longitud del texto: el número de palabras dividido por el número de factores, los tramos en los que el TTR baja hasta el umbral (TTR <= threshold, véanse las convenciones). Un último factor incompleto cuenta en proporción a lo que su TTR se acercó al umbral. El valor es la media de una pasada hacia delante y otra hacia atrás (McCarthy & Jarvis, 2010). La longitud mínima del factor no es estándar (lexical-diversity de Kyle), y un min_len de 0 la desactiva. Si ningún factor se completa y el TTR nunca baja de 1, el valor es infinito.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
min_len |
int |
10 |
Longitud mínima del factor (MTLD_MIN_LEN) |
threshold |
float |
0.72 |
Umbral de TTR para completar un factor (MTLD_TTR_THRESHOLD) |
Un min_len que no es un entero no negativo y un threshold que no es un número en (0, 1) lanzan ParameterError.
Moving Average Measure of Textual Lexical Diversity (MA-MTLD)¶
calc_mamtld(text, min_len=10, threshold=0.72, step=1)
Una modificación de MTLD con ventana móvil según el MTLD-MA de koRpus: un factor empieza en cada posición del texto, y el valor es la longitud media de los factores completados en una pasada hacia delante y otra hacia atrás. koRpus hace solo la pasada hacia delante, cierra un factor con un TTR estrictamente menor que el umbral y descarta los factores más cortos que la longitud mínima en lugar de extenderlos. Con un step de k un factor empieza en cada k-ésima posición desde cualquiera de los dos extremos, como MTLDMA.steps de koRpus, y solo se calculan esos factores: un paso de 10 es varias veces más rápido. Si ningún factor se completa, el valor es nan. La métrica es inestable en textos cortos.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
min_len |
int |
10 |
Longitud mínima del factor (MTLD_MIN_LEN) |
threshold |
float |
0.72 |
Umbral de TTR para completar un factor (MTLD_TTR_THRESHOLD) |
step |
int |
1 |
Distancia entre los inicios de los factores |
Un min_len que no es un entero no negativo, un threshold que no es un número en (0, 1) y un step que no es un entero mayor que 0 lanzan ParameterError.
MTLD con ventana móvil y vuelta al inicio del texto (MTLD-W)¶
calc_mtldw(text, min_len=10, threshold=0.72)
Una modificación de MA-MTLD según mtld_ma_wrap de lexical-diversity y TAALED: los factores no completados al final del texto continúan desde su principio, así que todas las posiciones tienen el mismo peso. Un factor no puede ser más largo que el texto. Si ningún factor se completa, porque el texto es más corto que min_len o porque el TTR no baja hasta el umbral desde ningún inicio, el valor es nan. La métrica es inestable en textos de menos de 100 palabras.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
min_len |
int |
10 |
Longitud mínima del factor (MTLD_MIN_LEN) |
threshold |
float |
0.72 |
Umbral de TTR para completar un factor (MTLD_TTR_THRESHOLD) |
Un min_len que no es un entero no negativo y un threshold que no es un número en (0, 1) lanzan ParameterError.
Hypergeometric Distribution D (HD-D)¶
calc_hdd(text, sample_size=42)
Una alternativa a vocd-D (McCarthy & Jarvis, 2010): el TTR esperado exacto de una muestra aleatoria de sample_size palabras, sin extraer muestras. La distribución hipergeométrica da la probabilidad de que la muestra contenga cada lexema al menos una vez; HD-D es la suma de estas probabilidades dividida por el tamaño de la muestra. En los textos de menos de 50 palabras o más cortos que el tamaño de la muestra la métrica no está definida, y el valor es nan.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
sample_size |
int |
42 |
Tamaño de la muestra en palabras (HDD_SAMPLE_SIZE) |
Un sample_size que no es un entero de al menos uno lanza ParameterError.
Índice de Simpson (D)¶
calc_simpson_index(text)
La probabilidad de que dos palabras extraídas del texto al azar sin reemplazo sean el mismo lexema; \(n\) es el número de apariciones de un lexema en el texto. En los textos de menos de dos palabras el índice no está definido, y el valor es nan; lo mismo vale para el índice de Simpson inverso y el índice de Gini-Simpson.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
Índice de Simpson inverso (1/D)¶
calc_inverse_simpson_index(text)
Una estimación del número de Hill de orden dos (\(1/\sum_k p_k^2\)) a partir de pares extraídos sin reposición. Si todas las palabras del texto son únicas, el índice de Simpson es 0 y el índice inverso es infinito.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
Índice de Gini-Simpson (1-D)¶
calc_gini_simpson_index(text)
La probabilidad de que dos palabras del texto elegidas al azar sean distintas.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
Índice de hápax (R de Honoré)¶
calc_hapax_index(text)
Un hápax (del griego ἅπαξ λεγόμενον, «dicho una sola vez») es una palabra que aparece una sola vez en un corpus: baciyelmo, la palabra con que Sancho Panza llama a la bacía que don Quijote toma por yelmo, es un hápax de Cervantes (capítulo 44 de la primera parte del Quijote). El índice coincide con la medida de Honoré (1979), con el logaritmo natural. Si todas las palabras del texto son hápax, el índice es infinito; en los textos de menos de dos palabras no está definido, y el valor es nan. calc_honore_r es la misma función.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
Espectro de frecuencias¶
calc_frequency_spectrum(text)
El número de lexemas \(V_i\) que aparecen exactamente \(i\) veces en el texto, como un diccionario por la frecuencia \(i\) en orden ascendente. A partir de él se calculan el índice de hápax, la K y la I de Yule, la Vm de Herdan, la S de Sichel, la M de Michéa, la P de Baayen, la proporción de hápax y el exponente α₂, con las fórmulas de Tweedie y Baayen (1998).
Notación: \(N\) es el número de palabras, \(V\) el número de lexemas, \(V_i\) el número de lexemas con frecuencia \(i\), \(V_1\) los hápax, \(V_2\) los dis legomena, \(p_k\) la frecuencia relativa de un lexema.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
Característica de Yule (K de Yule)¶
calc_yule_k(text)
La característica de Yule (Yule, 1944), una de las pocas medidas teóricamente independientes de la longitud del texto (Tweedie & Baayen, 1998); en la práctica converge a medida que el texto crece. Es proporcional al índice de Simpson: \(K \approx 10^4 \cdot D\). En los textos de menos de dos palabras el valor es nan.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
Característica inversa de Yule (I de Yule)¶
calc_yule_i(text)
La característica inversa de Yule. Si todas las palabras del texto son únicas, el valor es infinito; en los textos de menos de dos palabras es nan.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
Vm de Herdan¶
calc_herdan_vm(text)
La medida de Herdan (Herdan, 1955), teóricamente independiente de la longitud del texto. En los textos de menos de dos palabras el valor es nan.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
S de Sichel¶
calc_sichel_s(text)
La medida de Sichel (Sichel, 1975): la proporción de dis legomena, lexemas con frecuencia 2, entre todos los lexemas. Estable en textos de distinta longitud.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
M de Michéa¶
calc_michea_m(text)
La medida de Michéa (Michéa, 1969): el recíproco de la medida de Sichel. Si el texto no tiene dis legomena, el valor es infinito.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
W de Brunet¶
calc_brunet_w(text, a=0.172)
La medida de Brunet (Brunet, 1978). Los valores de los textos suelen estar entre 10 y 20.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
a |
float |
0.172 |
Exponente (BRUNET_W_EXPONENT) |
Un a que no es un número finito lanza ParameterError.
k de Dugast¶
calc_dugast_k(text, base=10)
La medida de Dugast (Dugast, 1979), que no debe confundirse con la U de Dugast, la métrica DTTR. El valor depende de la base del logaritmo. En los textos no más largos que la base (\(\log N \le 1\)) la medida no está definida, y el valor es nan.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
base |
float |
10 |
Base del logaritmo (DIVERSITY_LOG_BASE) |
Una base que no es un número finito mayor que 1 lanza ParameterError.
P de Baayen¶
calc_baayen_p(text)
La medida de Baayen (Baayen, 1991): la proporción de hápax entre todas las palabras del texto. Es la pendiente de la curva de crecimiento del vocabulario al final del texto: la probabilidad de que la siguiente palabra sea nueva (Evert, 2004).
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
Z de Orlov¶
calc_orlov_z(text)
La longitud del texto con la que la ley de Zipf mejor se ajusta al vocabulario (Orlov 1983): la solución \(Z\) para \(N\) palabras, \(V\) lexemas y la proporción \(p\) del lexema más frecuente. El lado derecho, como función de \(Z\), tiene un mínimo, y \(Z\) es la solución por encima de él; es nan cuando \(V\) queda en ese mínimo o por debajo o cuando cada palabra es un lexema propio, e inf cuando \(V\) se acerca tanto a \(N\) que \(Z\) desborda un float. Junto con la K de Yule, Z fue la que mejor separó a los autores entre las medidas que compararon Tweedie y Baayen. En un texto de menos de unas diez mil palabras Z es inestable y crece con la longitud, y sus valores abarcan órdenes de magnitud: se comparan textos de igual longitud, o por el logaritmo de Z.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
from ests.diversity_stats import calc_orlov_z
words = (
"en un lugar de la mancha de cuyo nombre no quiero acordarme no ha mucho tiempo que "
"vivía un hidalgo de los de lanza en astillero adarga antigua rocín flaco y galgo corredor"
).split()
round(calc_orlov_z(words), 2)
15733.38
Proporción de hápax¶
calc_hapax_ratio(text)
La proporción de hápax entre todos los lexemas del texto.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
El exponente α₂¶
calc_alpha2(text)
Una estimación del parámetro de Zipf-Mandelbrot a partir de la parte baja del espectro de frecuencias (Evert, 2004). Si el texto no tiene hápax, el valor es nan.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
Entropía de Shannon¶
calc_entropy(text)
La entropía de la distribución de lexemas en bits. El número de Hill de orden uno es \(2^H\) (perplejidad), y el de orden cero, \(V\); el índice de Simpson inverso estima el de orden dos.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
Equitatividad¶
calc_evenness(text)
La equitatividad de Pielou: el cociente entre la entropía de Shannon y su máximo para el número de lexemas dado. En los textos de un solo lexema no está definida, y el valor es nan.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
Perplejidad¶
calc_perplexity(text)
El número de Hill de orden uno, el número efectivo de lexemas del texto.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
Pendiente de la ley de Zipf¶
calc_zipf_alpha(text)
El exponente \(\alpha\) de la ley de Zipf \(f(r) \propto r^{-\alpha}\), donde \(r\) es el rango de frecuencia de un lexema, estimado por regresión lineal del logaritmo de la frecuencia sobre el logaritmo del rango. En los textos naturales \(\alpha\) está cerca de 1. La estimación por mínimos cuadrados sobre los rangos está sesgada; la máxima verosimilitud es más precisa. En los textos de un solo lexema el valor es nan.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
Ajuste de Zipf-Mandelbrot¶
fit_zipf_mandelbrot(text)
Ajusta la ley de Zipf-Mandelbrot \(f(r) = C / (r + q)^s\) a la distribución rango-frecuencia. Con \(q = 0\) es la ley de Zipf con exponente \(s\); el desplazamiento \(q\) recoge el aplanamiento de la curva en las palabras más frecuentes. El ajuste se hace por mínimos cuadrados en coordenadas logarítmicas con \(q \ge 0\), \(s \ge 0\); los lexemas de frecuencia cero de un contador se dejan fuera. El resultado es una tupla con nombre ZipfMandelbrot con los campos c, q, s y r2, el coeficiente de determinación del ajuste en coordenadas logarítmicas. Todos los campos son nan en los textos de menos de tres lexemas, con frecuencias idénticas de todos los lexemas o cuando el ajuste diverge. En textos cortos los parámetros son inestables: la ley describe corpus grandes.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] / Counter |
- | Lista de palabras o un contador de sus frecuencias |
Un contador cuyas palabras no son cadenas o cuyas frecuencias no son números lanza SourceTypeError, y una frecuencia negativa, nan o infinita, SourceError (check_counts).
El visualizador de la ley de Zipf dibuja este ajuste con show_fit=True.
from ests.diversity_stats import fit_zipf_mandelbrot
# las frecuencias 12, 6, 4, 3 siguen exactamente la ley f = 12 / r
words = ["a"] * 12 + ["b"] * 6 + ["c"] * 4 + ["d"] * 3
fit = fit_zipf_mandelbrot(words)
round(fit.c, 3), round(fit.q, 3), round(fit.s, 3), round(fit.r2, 3)
(12.001, 0.0, 1.0, 1.0)
Exponente de la ley de Heaps¶
calc_heaps_beta(text)
El exponente \(\beta\) de la ley de Heaps \(V(N) = K \cdot N^{\beta}\) del crecimiento del vocabulario con la longitud del texto, estimado por regresión lineal del logaritmo del tamaño del vocabulario sobre el logaritmo de la longitud del texto a lo largo de la curva de crecimiento. En corpus de millones de palabras \(\beta\) está entre 0.4 y 0.6, en un solo texto entre 0.6 y 0.9, así que los valores solo son comparables entre textos de longitud parecida. El valor depende del orden de las palabras y necesita varios cientos de palabras o más. En los textos de menos de dos palabras el valor es nan.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
vocabulary_growth(text)
La curva de crecimiento del vocabulario de una lista de palabras: el tamaño del vocabulario tras cada palabra del texto.
fit_heaps(text)
Ajusta la ley de Heaps sobre la curva de crecimiento del vocabulario de una lista de palabras, como hace calc_heaps_beta, y devuelve una tupla con nombre HeapsFit con los parámetros k, beta y el coeficiente de determinación r2, todos nan en los textos de menos de dos palabras; r2 es nan también en un texto de un solo lexema.
El gráfico de la ley de Heaps se construye a partir de fit_heaps.
Ráfagas (burstiness)¶
calc_burstiness(text, min_freq=5)
En qué medida un lexema aparece en ráfagas en lugar de repartido por el texto, según el índice de ráfagas (burstiness) de Kim y Jo, que corrige el de Goh y Barabási para un número finito \(n\) de eventos, promediado sobre los lexemas de min_freq apariciones o más (BURSTINESS_MIN_FREQ). Para las \(n\) apariciones de un lexema, \(r\) es el coeficiente de variación de sus \(n\) intervalos, incluido el que va de la última a la primera dando la vuelta al final del texto. El valor es −1 para apariciones a intervalos iguales, incluido el que da la vuelta al final (a x a x a x a x a x da −1, a x a x a x a x a alrededor de −0.69), cerca de 0 para un lexema raro en lugares aleatorios y hasta 1 para apariciones en ráfagas; nan sin tales lexemas. En un texto corto o en una ventana los lexemas de min_freq apariciones son sobre todo palabras funcionales, y el valor crece con la longitud del texto.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
min_freq |
int |
5 |
Menor número de apariciones de un lexema medido |
Un min_freq que no es un entero de al menos 2 lanza ParameterError.
from ests.diversity_stats import calc_burstiness
(
calc_burstiness("sí no sí no sí no sí no sí no".split()),
calc_burstiness("sí sí sí sí sí no no no no no".split()),
)
(-1.0, 0.18350341907227388)
Cálculo por ventanas¶
calc_windowed(text, func, window_len=100, step=None, confidence=0.95, *, messages=MESSAGES)
Los valores de una métrica en ventanas consecutivas de igual longitud dan su media, su 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 TTR estandarizado de Kubát y Milička (no el STTR de Summer) es un TTR por ventanas de 1000 palabras con un intervalo del 95 %. Un texto más corto que la ventana es una sola ventana; las ventanas con valor nan se ignoran. Con menos de dos ventanas de valor definido la desviación y el intervalo son nan, y sin ninguna también la media. Una métrica infinita en alguna ventana (por ejemplo, el índice de Simpson inverso en una ventana de palabras únicas) hace la media infinita y la desviación y el intervalo nan. El resultado es una tupla con nombre WindowStats con los campos mean, std, lower, upper y n_windows, el número de ventanas de valor definido.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
text |
list[str] |
- | Lista de palabras |
func |
Callable |
- | Función que calcula la métrica a partir de una lista de palabras |
window_len |
int |
100 |
Tamaño de la ventana |
step |
int |
None |
Paso de la ventana; por defecto, el tamaño de la ventana, así que las ventanas no se solapan |
confidence |
float |
0.95 |
Nivel de confianza |
messages |
dict[str, str] |
MESSAGES |
Mensajes de los errores por clave |
Un func que no es invocable lanza SourceTypeError; un window_len o un step que no es un entero de al menos uno y un confidence que no es un número en (0, 1) lanzan ParameterError.
Cada función comprueba sus palabras con check_words: un text que es una cadena, un Doc, un iterador, un conjunto o una tabla, o cuyas palabras no son cadenas, lanza SourceTypeError; fit_zipf_mandelbrot admite también un contador.
Métodos¶
windowed(stat, window_len=100, step=None, confidence=0.95) calcula por ventanas una métrica de get_stats por su nombre: calc_windowed con la función de la métrica y los parámetros del objeto. Los demás argumentos, el resultado y los errores son los de calc_windowed; un nombre desconocido lanza UnknownStatError.
ds.windowed("ttr", window_len=5)
ds.windowed("ttr", window_len=5, step=2).n_windows
WindowStats(mean=0.9333333333333332, std=0.11547005383792512, lower=0.6464898180167025, upper=1.220176848649964, n_windows=3)
6
get_stats() devuelve un diccionario con las métricas calculadas de stats_desc.
print_stats() muestra una tabla de las métricas calculadas con sus descripciones de stats_desc bajo los encabezados de stats_headers.
ds.get_stats()
{'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,
'orlov_z': nan,
'hapax_ratio': 0.7272727272727273,
'alpha2': 0.5,
'entropy': 3.3232314287976203,
'evenness': 0.9606293157795304,
'perplexity': 10.009038104159247,
'zipf_alpha': 0.4884512334695912,
'heaps_beta': 0.8366147342060046,
'burstiness': nan}
Los demás métodos, to_dataframe y describe, son los de la interfaz de estadísticas del núcleo anyTS; las métricas de diversidad léxica no tienen escalas, así que describe da None para las métricas de get_stats.