Saltar a contenido

Palabras clave

ests.corpus.keyness(), ests.corpus.Keyword

Descripción

Extracción de palabras clave (keyness) de un corpus objetivo frente a uno de referencia: las palabras que aparecen significativamente más a menudo en el corpus objetivo que en el de referencia. Una herramienta clásica de la lingüística de corpus para comparar géneros, autores, traducciones y épocas (AntConc, Sketch Engine, quanteda textstat_keyness).

Para cada palabra se calculan dos valores que Gabrielatos y Marchi y Hardie recomiendan leer juntos: la razón de verosimilitud \(G^2\) con su valor p (la significación de la diferencia: si la hay) y Log Ratio (el tamaño del efecto: cuán grande es). Se calcula además la medida elegida score, que sirve para ordenar. Las medidas de significación (\(G^2\), ji cuadrado, BIC, ELL) llevan signo: negativo cuando la palabra es más frecuente en la referencia; las medidas de efecto (%DIFF, Log Ratio, razón de momios) tienen dirección por construcción.

La referencia puede ser una lista de palabras o una correspondencia de frecuencias - los recuentos de un diccionario de frecuencias, por ejemplo -; el tamaño de la referencia es entonces la suma de los recuentos.

Las palabras se comparan tal cual: la caja, la lematización y las palabras vacías corresponden a WordsExtractor.

Medidas

Para una palabra de frecuencia \(a\) en un corpus objetivo de tamaño \(c\) y de frecuencia \(b\) en un corpus de referencia de tamaño \(d\), \(N = c + d\):

Medida Clave Fórmula Descripción
Razón de verosimilitud log_likelihood \(G^2 = 2\,(a \ln \frac{a}{E_1} + b \ln \frac{b}{E_2})\), \(E_1 = \frac{c\,(a+b)}{N}\), \(E_2 = \frac{d\,(a+b)}{N}\) Rayson y Garside (2000); valores críticos G2_CRITICAL_VALUES: 3.84 para p < 0.05, 6.63 para p < 0.01, 10.83 para p < 0.001, 15.13 para p < 0.0001
Ji cuadrado chi2 \(\chi^2 = \frac{N\,\max(\lvert a(d-b) - b(c-a) \rvert - N/2,\ 0)^2}{(a+b)(N-a-b)\,c\,d}\) con la corrección de Yates sobre la tabla de contingencia 2×2; si la corrección supera la diferencia, el estadístico es cero
%DIFF diff \(\frac{NF_a - NF_b}{NF_b} \cdot 100\) Gabrielatos y Marchi (2011); \(NF\) - frecuencia por millón de palabras
Log Ratio log_ratio \(\log_2 \frac{NF_a}{NF_b}\) Hardie (2014); uno significa que la palabra es el doble de frecuente en el corpus objetivo
BIC bic \(\operatorname{sign}(G^2) \cdot (\lvert G^2 \rvert - \ln N)\) Wilson (2013); en valor absoluto, por encima de 2 - indicio positivo de diferencia, de 6 - fuerte, de 10 - muy fuerte; un valor negativo con \(\lvert G^2 \rvert < \ln N\) significa ausencia de indicio, no la dirección contraria
ELL ell \(\frac{G^2}{N \ln \min(E_1, E_2)}\) Johnson, Culpeper y Rayson (2007); tamaño del efecto de \(G^2\) de 0 a 1, nan cuando la menor frecuencia esperada es inferior a \(e\) - entonces \(\ln \min(E_1, E_2) < 1\) y la medida supera uno
Razón de momios odds_ratio \(\frac{a / (c - a)}{b / (d - b)}\) uno significa momios iguales; inf si la palabra ocupa todo el corpus objetivo, 0 - toda la referencia

Una frecuencia nula en uno de los corpus se sustituye por 0.5 para %DIFF, Log Ratio y la razón de momios (Hardie 2014). El valor p de \(G^2\) sale de la distribución ji cuadrado con un grado de libertad (calc_p_value). Las medidas están disponibles como las funciones calc_log_likelihood, calc_chi2, calc_diff, calc_log_ratio, calc_bic, calc_ell, calc_odds_ratio con los argumentos (a, b, c, d) del módulo ests.corpus.keyness (from ests.corpus.keyness import calc_log_likelihood); sus nombres y descripciones están en ests.constants.KEYNESS_MEASURES.

Parámetros

Parámetro Tipo Por defecto Descripción
target list[str]/dict[str, int] - Palabras del corpus objetivo o sus frecuencias
reference list[str]/dict[str, float] - Palabras del corpus de referencia o sus frecuencias
measure str log_likelihood Medida de KEYNESS_MEASURES para score y el orden
min_freq int 1 Frecuencia mínima de una palabra clave en su propio corpus
positive bool True Palabras clave positivas (más frecuentes en el corpus objetivo) o negativas (más frecuentes en la referencia)
top_n int None Número de palabras clave; None - todas

Resultado

Una lista de tuplas con nombre Keyword por orden descendente de clave (los empates por frecuencia descendente y alfabéticamente, las palabras de medida indefinida al final); pd.DataFrame(keywords) da una tabla.

Campo Tipo Descripción
word str Palabra
freq_target int Frecuencia en el corpus objetivo
freq_reference float Frecuencia en el corpus de referencia
ipm_target float Frecuencia en el corpus objetivo por millón de palabras
ipm_reference float Frecuencia en el corpus de referencia por millón de palabras
g2 float \(G^2\) con signo
p_value float Valor p de \(G^2\)
log_ratio float Log Ratio
score float Valor de la medida elegida

Ejemplo

Ejemplo

from ests import WordsExtractor
from ests.corpus import keyness

we = WordsExtractor(use_lexemes=True, lowercase=True)
target = we.extract(
    "El gato estaba en la ventana y miraba a los pájaros. Los pájaros se fueron y el gato "
    "se durmió en la ventana. Mañana el gato volverá a estar en la ventana y mirará a los pájaros."
)
reference = we.extract(
    "El perro estaba en el suelo y dormía. Después el perro comió y volvió a dormir. "
    "Mañana el perro saldrá a pasear."
)

keyness(target, reference, top_n=1)
# [Keyword(word='gato', freq_target=3, freq_reference=0, ipm_target=81081.08108108108,
#  ipm_reference=0.0, g2=2.79971718756897, p_value=0.09428093556593176,
#  log_ratio=1.8349407537295037, score=2.79971718756897)]

[(k.word, round(k.g2, 2)) for k in keyness(target, reference, positive=False, top_n=2)]
# [('perro', -5.92), ('comer', -1.97)]