En este artículo, aprenderá cómo extraer siete funciones útiles de legibilidad y complejidad del texto a partir de texto sin formato utilizando la biblioteca Textstat Python.
Los temas que cubriremos incluyen:
Cómo Textstat puede cuantificar la legibilidad y la complejidad del texto para tareas posteriores de aprendizaje automático. Cómo calcular siete métricas de legibilidad comúnmente utilizadas en Python. Cómo interpretar estas métricas cuando se utilizan como características para modelos de clasificación o regresión.
No perdamos más tiempo.
7 funciones de legibilidad para su próximo modelo de aprendizaje automático
Imagen del editor
Introducción
A diferencia de los datos tabulares totalmente estructurados, la preparación de datos de texto para modelos de aprendizaje automático normalmente implica tareas como tokenización, incrustaciones o análisis de sentimientos. Si bien estas son características indudablemente útiles, la complejidad estructural del texto (o su legibilidad, en realidad) también puede constituir una característica increíblemente informativa para tareas predictivas como la clasificación o la regresión.
Textstat, como su nombre indica, es una biblioteca de Python ligera e intuitiva que puede ayudarle a obtener estadísticas a partir de texto sin formato. A través de puntuaciones de legibilidad, proporciona características de entrada para modelos que pueden ayudar a distinguir entre una publicación informal en las redes sociales, un cuento de hadas para niños o un manuscrito de filosofía, por nombrar algunos.
Este artículo presenta siete ejemplos interesantes de análisis de texto que se pueden realizar fácilmente utilizando la biblioteca Textstat.
Antes de comenzar, asegúrese de tener instalado Textstat:
Si bien los análisis descritos aquí se pueden ampliar a un corpus de texto grande, los ilustraremos con un conjunto de datos de juguete que consta de una pequeña cantidad de textos etiquetados. Sin embargo, tenga en cuenta que para la inferencia y el entrenamiento de modelos de aprendizaje automático posteriores, necesitará un conjunto de datos suficientemente grande para fines de entrenamiento.
import pandas as pd import textstat # Crea un conjunto de datos de juguetes con tres textos marcadamente diferentes data = { ‘Categoría’: [‘Simple’, ‘Standard’, ‘Complex’]’Texto’: [
“The cat sat on the mat. It was a sunny day. The dog played outside.”,
“Machine learning algorithms build a model based on sample data, known as training data, to make predictions.”,
“The thermodynamic properties of the system dictate the spontaneous progression of the chemical reaction, contingent upon the activation energy threshold.”
]} df = pd.DataFrame(data) print(“¡Entorno configurado y conjunto de datos listo!”)
importar pandas como PD
importar estadística de texto
# Crea un conjunto de datos de juguetes con tres textos marcadamente diferentes
datos = {
‘Categoría’: [‘Simple’, ‘Standard’, ‘Complex’],
‘Texto’: [
“The cat sat on the mat. It was a sunny day. The dog played outside.”,
“Machine learning algorithms build a model based on sample data, known as training data, to make predictions.”,
“The thermodynamic properties of the system dictate the spontaneous progression of the chemical reaction, contingent upon the activation energy threshold.”
]
}
df = PD.Marco de datos(datos)
imprimir(“¡Entorno configurado y conjunto de datos listo!”)
1. Aplicación de la fórmula de facilidad de lectura de Flesch
La primera métrica de análisis de texto que exploraremos es la fórmula Flesch Reading Ease, una de las primeras y más utilizadas métricas para cuantificar la legibilidad del texto. Evalúa un texto basándose en la longitud promedio de la oración y el número promedio de sílabas por palabra. Si bien conceptualmente está pensado para tomar valores en el rango de 0 a 100 (0 significa ilegible y 100 significa muy fácil de leer), su fórmula no está estrictamente limitada, como se muestra en los ejemplos siguientes:
df[‘Flesch_Ease’] = gl[‘Text’].apply(textstat.flesch_reading_ease) print(“Puntuaciones de facilidad de lectura de Flesch:”) print(df[[‘Category’, ‘Flesch_Ease’]])
df[‘Flesch_Ease’] = df[‘Text’].aplicar(estadística de texto.flesch_reading_ease)
imprimir(“Puntuaciones de facilidad de lectura de Flesch”:)
imprimir(df[[‘Category’, ‘Flesch_Ease’]])
Producción:
Puntuaciones de facilidad de lectura de Flesch: Categoría Flesch_Ease 0 Simple 105.880000 1 Estándar 45.262353 2 Complejo -8.045000
Flesch Lectura Facilidad Montones:
Categoría Flesch_Facilidad
0 Simple 105.880000
1 Estándar 45.262353
2 Complejo –8.045000
Así es como se ve la fórmula real:
$$ 206,835 – 1,015 \left( \frac{\text{total de palabras}}{\text{total de oraciones}} \right) – 84,6 \left( \frac{\text{total de sílabas}}{\text{total de palabras}} \right) $$
Las fórmulas ilimitadas como Flesch Reading Ease pueden dificultar el entrenamiento adecuado de un modelo de aprendizaje automático, lo cual es algo a tener en cuenta durante las tareas de ingeniería de funciones posteriores.
2. Calcular los niveles de grado de Flesch-Kincaid
A diferencia de la puntuación de facilidad de lectura, que proporciona un valor único de legibilidad, el nivel de grado de Flesch-Kincaid evalúa la complejidad del texto utilizando una escala similar a los niveles de grado de las escuelas de EE. UU. En este caso, valores más altos indican mayor complejidad. Sin embargo, tenga cuidado: esta métrica también se comporta de manera similar a la puntuación de Flesch Reading Ease, de modo que los textos extremadamente simples o complejos pueden producir puntuaciones por debajo de cero o valores arbitrariamente altos, respectivamente.
df[‘Flesch_Grade’] = gl[‘Text’].apply(textstat.flesch_kincaid_grade) print(“Niveles de grado Flesch-Kincaid:”) print(df[[‘Category’, ‘Flesch_Grade’]])
df[‘Flesch_Grade’] = df[‘Text’].aplicar(estadística de texto.flesch_kincaid_grade)
imprimir(“Niveles de grado Flesch-Kincaid:”)
imprimir(df[[‘Category’, ‘Flesch_Grade’]])
Producción:
Niveles de grado de Flesch-Kincaid: Categoría Flesch_Grade 0 Simple -0.266667 1 Estándar 11.169412 2 Complejo 19.350000
Flesch–Kincaid Calificación Niveles:
Categoría Flesch_Calificación
0 Simple –0.266667
1 Estándar 11.169412
2 Complejo 19.350000
3. Calcular el índice SMOG
Otra medida que tiene su origen en la evaluación de la complejidad de un texto es el índice SMOG, que estima los años de educación formal necesarios para comprender un texto. Esta fórmula es algo más limitada que otras, ya que tiene un mínimo matemático estricto ligeramente por encima de 3. El más simple de nuestros tres textos de ejemplo cae en el mínimo absoluto para esta medida en términos de complejidad. Tiene en cuenta factores como el número de palabras polisilábicas, es decir, palabras de tres o más sílabas.
df[‘SMOG_Index’] = gl[‘Text’].apply(textstat.smog_index) print(“Puntuaciones del índice SMOG:”) print(df[[‘Category’, ‘SMOG_Index’]])
df[‘SMOG_Index’] = df[‘Text’].aplicar(estadística de texto.índice_smog)
imprimir(“Puntuaciones del índice SMOG:”)
imprimir(df[[‘Category’, ‘SMOG_Index’]])
Producción:
Puntuaciones del índice SMOG: Categoría SMOG_Index 0 Simple 3.129100 1 Estándar 11.208143 2 Complejo 20.267339
NIEBLA TÓXICA Índice Montones:
Categoría NIEBLA TÓXICA_Índice
0 Simple 3.129100
1 Estándar 11.208143
2 Complejo 20.267339
4. Calcular el índice de niebla disparada
Al igual que el índice SMOG, el índice Gunning Fog también tiene un mínimo estricto, en este caso igual a cero. La razón es sencilla: cuantifica el porcentaje de palabras complejas junto con la longitud promedio de la oración. Es una métrica popular para analizar textos comerciales y garantizar que el contenido técnico o de un dominio específico sea accesible para una audiencia más amplia.
df[‘Gunning_Fog’] = gl[‘Text’].apply(textstat.gunning_fog) print(“Índice de niebla de Gunning:”) print(df[[‘Category’, ‘Gunning_Fog’]])
df[‘Gunning_Fog’] = df[‘Text’].aplicar(estadística de texto.niebla_gunning)
imprimir(“Índice de niebla de disparo:”)
imprimir(df[[‘Category’, ‘Gunning_Fog’]])
Producción:
Índice de Gunning Fog: Categoría Gunning_Fog 0 Simple 2.000000 1 Estándar 11.505882 2 Complejo 26.000000
Tirante Niebla Índice:
Categoría Tirante_Niebla
0 Simple 2.000000
1 Estándar 11.505882
2 Complejo 26.000000
5. Calcular el índice de legibilidad automatizado
Las fórmulas vistas anteriormente tienen en cuenta el número de sílabas de las palabras. Por el contrario, el Índice de legibilidad automatizado (ARI) calcula los niveles de calificación en función del número de caracteres por palabra. Esto lo hace computacionalmente más rápido y, por lo tanto, una mejor alternativa al manejar grandes conjuntos de datos de texto o analizar datos en tiempo real. Es ilimitado, por lo que a menudo se recomienda escalar las características después de calcularlo.
# Calcular el índice de legibilidad automatizado df[‘ARI’] = gl[‘Text’].apply(textstat.automated_readability_index) print(“Índice de legibilidad automatizado:”) print(df[[‘Category’, ‘ARI’]])
# Calcular el índice de legibilidad automatizado
df[‘ARI’] = df[‘Text’].aplicar(estadística de texto.índice_lectura_automatizada)
imprimir(“Índice de legibilidad automatizado:”)
imprimir(df[[‘Category’, ‘ARI’]])
Producción:
Índice de legibilidad automatizado: Categoría ARI 0 Simple -2.288000 1 Estándar 12.559412 2 Complejo 20.127000
Automatizado Legibilidad Índice:
Categoría IRA
0 Simple –2.288000
1 Estándar 12.559412
2 Complejo 20.127000
6. Calcular la puntuación de legibilidad de Dale-Chall
De manera similar al índice Gunning Fog, las puntuaciones de legibilidad de Dale-Chall tienen un mínimo estricto de cero, ya que la métrica también se basa en proporciones y porcentajes. La característica distintiva de esta métrica es su enfoque basado en el vocabulario, ya que funciona comparando todo el texto con una lista de búsqueda prediseñada que contiene miles de palabras familiares para los estudiantes de cuarto grado. Cualquier palabra que no esté incluida en esa lista se etiqueta como compleja. Si desea analizar texto destinado a niños o a un público amplio, esta métrica podría ser un buen punto de referencia.
df[‘Dale_Chall’] = gl[‘Text’].apply(textstat.dale_chall_readability_score) print(“Puntuaciones de Dale-Chall:”) print(df[[‘Category’, ‘Dale_Chall’]])
df[‘Dale_Chall’] = df[‘Text’].aplicar(estadística de texto.dale_chall_readability_score)
imprimir(“Puntuaciones de Dale-Chall:”)
imprimir(df[[‘Category’, ‘Dale_Chall’]])
Producción:
Puntuaciones de Dale-Chall: Categoría Dale_Chall 0 Simple 4.937167 1 Estándar 12.839112 2 Complejo 14.102500
Valle–desafío Montones:
Categoría Valle_desafío
0 Simple 4.937167
1 Estándar 12.839112
2 Complejo 14.102500
7. Uso del estándar de texto como métrica de consenso
¿Qué sucede si no está seguro de qué fórmula específica utilizar? textstat proporciona una métrica de consenso interpretable que reúne varios de ellos. A través de la función text_standard(), se aplican múltiples enfoques de legibilidad al texto, devolviendo un nivel de calificación consensuado. Como es habitual con la mayoría de las métricas, cuanto mayor sea el valor, menor será la legibilidad. Esta es una excelente opción para incorporar una función de resumen rápida y equilibrada en las tareas de modelado posteriores.
df[‘Consensus_Grade’] = gl[‘Text’].apply(lambda x: textstat.text_standard(x, float_output=True)) print(“Niveles de calificaciones de consenso:”) print(df[[‘Category’, ‘Consensus_Grade’]])
df[‘Consensus_Grade’] = df[‘Text’].aplicar(lambda incógnita: estadística de texto.texto_estándar(incógnita, salida_flotante=Verdadero))
imprimir(“Niveles de grado de consenso:”)
imprimir(df[[‘Category’, ‘Consensus_Grade’]])
Producción:
Niveles de grado de consenso: Categoría Consenso_Grado 0 Simple 2.0 1 Estándar 11.0 2 Complejo 18.0
Consenso Calificación Niveles:
Categoría Consenso_Calificación
0 Simple 2.0
1 Estándar 11.0
2 Complejo 18.0
Concluyendo
Exploramos siete métricas para analizar la legibilidad o complejidad de los textos utilizando la biblioteca Textstat de Python. Si bien la mayoría de estos enfoques se comportan de manera similar, comprender sus características matizadas y comportamientos distintivos es clave para elegir el correcto para su análisis o para casos de uso posteriores de modelado de aprendizaje automático.