Saltar a contenido

Métricas de legibilidad

ests.readability_stats.ReadabilityStats

Descripción

Módulo para calcular las principales métricas de legibilidad de la tradición española. La fuente de datos puede ser un texto, un objeto Doc de la biblioteca spaCy o unas estadísticas básicas BasicStats ya calculadas; en ese caso el texto no se vuelve a analizar.

Definición

La legibilidad es la propiedad de un texto que caracteriza la facilidad con que una persona lo percibe al leerlo.

Conviene distinguir la legibilidad desde dos puntos de vista:

  • el diseño tipográfico del texto;
  • los rasgos lingüísticos del material textual (complejidad de las construcciones sintácticas, vocabulario difícil de percibir, etc.).

La legibilidad en este módulo se calcula a partir de medidas lingüísticas: la longitud media de la oración en palabras, la longitud media de la palabra en sílabas o letras, la proporción de palabras largas y de palabras de tres o más sílabas, y la variabilidad de la longitud de las palabras. Las fórmulas son las publicadas para el español, con los coeficientes de sus fuentes:

Fórmula Año Resultado Interpretación
Fernández Huerta 1959 facilidad de lectura de Flesch, 0-100 siete niveles del autor
Szigriszt-Pazos (fórmula de perspicuidad) 1993 facilidad de lectura de Flesch, 0-100 escala INFLESZ (Barrio-Cantalejo et al., 2008), cinco niveles
Gutiérrez de Polini (fórmula de comprensibilidad) 1972 0-100, más alto es más fácil sin escala propia; ajustada con textos de sexto grado
Crawford 1989 años de escolaridad primaria española, cursos 1-6
Legibilidad µ (Muñoz Baquedano y Muñoz Urra) 2006 0-100, más alto es más fácil siete niveles de los autores
SOL (Contreras et al.) 1999 años de escolaridad SMOG convertido al español
LIX, RIX 1968, 1983 índice, palabras largas por oración niveles y cursos independientes de la lengua

La familia de Flesch se fija con un preajuste (véase más abajo): por defecto los coeficientes de Szigriszt-Pazos, validados con la escala INFLESZ, y como alternativa los de Fernández Huerta. Las demás fórmulas no dependen del preajuste.

Los supuestos principales de las métricas de legibilidad:

  • las oraciones cortas se leen con más facilidad que las largas;
  • las palabras largas dificultan la lectura;
  • el lector se frena ante palabras poco frecuentes o desconocidas.

El módulo permite usar objetos SentsExtractor y WordsExtractor ya configurados para la segmentación en oraciones y palabras que precede al cálculo.

Nota

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

Parámetros

Parámetro Tipo Por defecto Descripción
source str/Doc/BasicStats - Fuente de datos (cadena, objeto Doc o estadísticas básicas ya calculadas)
sents_extractor SentsExtractor None Herramienta de extracción de oraciones
words_extractor WordsExtractor None Herramienta de extracción de palabras
preset str general Preajuste de coeficientes (general, classic)

Atributos

Atributo Tipo Descripción
flesch_reading_easy float Facilidad de lectura de Flesch con los coeficientes del preajuste
gutierrez_polini_index float Fórmula de comprensibilidad de Gutiérrez de Polini
crawford_grade float Fórmula de Crawford, años de escolaridad
mu_index float Legibilidad µ
sol_grade float Grado SOL, SMOG convertido al español
lix float Índice de legibilidad LIX
rix float Índice de legibilidad RIX
consensus_grade float Grado de consenso entre las fórmulas de grado y la facilidad de lectura
reading_time float Tiempo de lectura en minutos a 278 palabras por minuto
bs BasicStats Estadísticas básicas del texto
preset str Nombre del preajuste de coeficientes
coefficients dict[str, tuple[float, float, float]] Coeficientes de las fórmulas del preajuste

Preajustes de coeficientes

Un preajuste fija los coeficientes a, b, c de la facilidad de lectura de Flesch c − a·ASL − b·ASW, donde ASL es el número medio de palabras por oración y ASW el número medio de sílabas por palabra. Las demás fórmulas no dependen del preajuste.

Preajuste Fuente Fórmula Escala
general Szigriszt-Pazos (1993), fórmula de perspicuidad 206.835 − 1.0·ASL − 62.3·ASW INFLESZ (Barrio-Cantalejo et al., 2008), validada con textos para pacientes
classic Fernández Huerta (1959), la primera adaptación de Flesch al español 206.84 − 1.02·ASL − 60·ASW los siete niveles del autor

Fernández Huerta imprimió el último término como 1.02 por el número de frases por cada 100 palabras. Law (2011) mostró que eso invierte la fracción de la fórmula de Flesch en la que se basó la adaptación, así que aquí se usa la longitud media de la oración, como hacen koRpus, textstat y legible.es. La tabla de todos los coeficientes está disponible como ests.constants.READABILITY_PRESETS.

Ejemplo

from ests import ReadabilityStats

text = "Hay tres clases de mentiras: mentiras, malditas mentiras y estadísticas"
ReadabilityStats(text).flesch_reading_easy
# 53.545000000000016
ReadabilityStats(text, preset="classic").flesch_reading_easy
# 58.640000000000015

Nota

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

Interpretación

El método describe_level sitúa la facilidad de lectura en la escala del preajuste: INFLESZ para general (muy difícil por debajo de 40, algo difícil 40-55, normal 55-65, bastante fácil 65-80, muy fácil por encima de 80) y los siete niveles de Fernández Huerta para classic, y a petición las escalas de Szigriszt-Pazos o del otro autor; la Legibilidad µ tiene los siete niveles de sus autores (muy difícil 0-30, difícil 31-50, un poco difícil 51-60, adecuado 61-70, un poco fácil 71-80, fácil 81-90, muy fácil 91-100).

Las fórmulas que dan años de escolaridad (Crawford, SOL) se resumen en el atributo consensus_grade: la mediana de los valores redondeados más la facilidad de lectura convertida en grado según la escala del preajuste: por los tipos de texto de los niveles INFLESZ para general y por la tabla de interpretación de Flesch, cuyos niveles conservó Fernández Huerta, para classic. El método describe_grade traduce el grado de consenso o una fórmula concreta en una etapa del sistema educativo español y la edad del lector:

Grado Etapa Edad
1-3 primaria, cursos 1-3 6-9 años
4-6 primaria, cursos 4-6 9-12 años
7-10 ESO 12-16 años
11-12 bachillerato 16-18 años
13-16 universidad 18-22 años
más de 16 posgrado más de 22 años

Aviso

Crawford se ajustó con lecturas de primaria y se satura en los textos para adultos; SOL se ajustó con materiales de educación sanitaria. El grado de consenso de un texto técnico refleja sobre todo el nivel de la facilidad de lectura.

El atributo reading_time estima el tiempo de lectura silenciosa a 278 palabras por minuto, la media de seis estudios con lectores adultos de español en el metaanálisis de Brysbaert (2019). El método reading_time_by_speed acepta otra velocidad, y el método reading_time_by_norm calcula el tiempo en voz alta y en silencio según las normas de la tabla ests.constants.READING_SPEED_NORMS: las velocidades medias del alumnado hispanohablante por curso del metaanálisis de Ripoll, Tapia y Aguado (2020) y las de los adultos según Brysbaert (2019).

Métodos

describe_level

Devuelve el nivel de una escala de legibilidad para la facilidad de lectura o la Legibilidad µ.

Parámetros:

Parámetro Tipo Por defecto Descripción
stat str flesch_reading_easy Nombre de la métrica (flesch_reading_easy, mu_index)
scale str None Escala para la facilidad de lectura (inflesz, szigriszt, fernandez_huerta); sin ella se usa la escala del preajuste; la Legibilidad µ tiene una sola escala y no admite otra

Ejemplo

from ests import ReadabilityStats

text = "Hay tres clases de mentiras: mentiras, malditas mentiras y estadísticas"
rs = ReadabilityStats(text)
rs.describe_level()
# 'algo difícil'
rs.describe_level(scale="szigriszt")
# 'normal'
rs.describe_level("mu_index")
# 'difícil'

describe_grade

Devuelve la etapa escolar y la edad del lector para el grado de consenso o una fórmula de grado concreta.

Parámetros:

Parámetro Tipo Por defecto Descripción
stat str consensus_grade Nombre de la fórmula de grado (consensus_grade, crawford_grade, sol_grade)

Ejemplo

rs.describe_grade()
# 'ESO (12-16 years)'
rs.describe_grade("crawford_grade")
# 'primary school, grades 4-6 (9-12 years)'

reading_time_by_speed

Devuelve el tiempo de lectura del texto en minutos a la velocidad indicada.

Parámetros:

Parámetro Tipo Por defecto Descripción
wpm int - Velocidad de lectura, palabras por minuto

reading_time_by_norm

Devuelve el tiempo de lectura del texto en minutos en voz alta y en silencio según una norma de la tabla ests.constants.READING_SPEED_NORMS: de grade_1 a grade_11 (años de escolaridad: primaria 1-6, ESO 7-10, bachillerato 11) o adult.

Parámetros:

Parámetro Tipo Por defecto Descripción
norm str - Nombre de la norma de velocidad de lectura

Ejemplo

rs.reading_time_by_speed(200)
# 0.05
rs.reading_time_by_norm("grade_4")
# (0.09615384615384616, 0.08)

get_stats

Devuelve un diccionario con las métricas de legibilidad calculadas.

Ejemplo

Código:

# Importar la biblioteca
from ests import ReadabilityStats

# Preparar los datos
text = "Hay tres clases de mentiras: mentiras, malditas mentiras y estadísticas"

# Calcular las métricas
rs = ReadabilityStats(text)
rs.get_stats()

Resultado:

{'flesch_reading_easy': 53.545000000000016,
'gutierrez_polini_index': 33.5,
'crawford_grade': 5.812999999999999,
'mu_index': 50.943396226415096,
'sol_grade': 9.258359866374562,
'lix': 60.0,
'rix': 5.0,
'consensus_grade': 9.0,
'reading_time': 0.03597122302158273}

Muestra una tabla con las métricas de legibilidad calculadas.

Ejemplo

Código:

...

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

Resultado:

                   Metric                    |  Value
-------------------------------------------------------
Flesch reading ease (Szigriszt-Pazos)        |  53.55
Gutiérrez de Polini comprehensibility        |  33.50
Crawford grade                               |   5.81
Legibilidad µ                                |  50.94
SOL grade (SMOG for Spanish)                 |   9.26
LIX readability index                        |  60.00
RIX readability index                        |   5.00
Consensus grade                              |   9.00
Reading time (min)                           |   0.04