Saltar a contenido

Extracción de palabras

ests.extractors.WordsExtractor

Descripción

Módulo para extraer palabras de un texto. Permite usar distintos tokenizadores, filtrar palabras vacías, números y signos de puntuación, lematizar, construir N-gramas y fijar la longitud mínima y máxima de las palabras extraídas.

Nota

El tokenizador por defecto es el tokenizador por reglas de la clase de idioma español de spaCy (ests.utils.tokenize); no necesita un modelo entrenado. Los signos de puntuación, incluidos ¿ y ¡, los números como 1.500,50, 3.º, 1990-1995 y las abreviaturas como Sr., EE. UU. son tokens únicos; las palabras con pronombres enclíticos (dámelo, decírselo) no se separan. Las rayas de un diálogo pegadas a las palabras, como las escriben los corpus de texto plano, se separan: --No, -dijo, sí--dijo, sí-¿y qué?, reírse—me decía, dijo:—¡Mis, ―dijo él―. dan las palabras No, dijo, , reírse, me, Mis, él, también junto a los guiones bajos con que Project Gutenberg escribe la cursiva (--_Siguro_), mientras que un guion entre letras (franco-alemán) o ante una cifra (-5) se queda en su token; un sufijo citado con su guion (-mente) también lo pierde. La barra horizontal de algunos textos digitalizados es una raya. ests.utils.add_dash_rules(nlp) añade las mismas reglas a las que ya tiene un pipeline de spaCy propio; el modelo de get_nlp ya las tiene.

Nota

Los lemas provienen de simplemma (ests.utils.lemmatize), que trabaja con un diccionario sin modelo entrenado: una forma conocida se convierte en su lema en minúsculas (Tienes - tener, NIÑOS - niño), una forma desconocida se devuelve sin cambios (Madrid, dámelo).

Parámetros

Parámetro Tipo Por defecto Descripción
tokenizer Pattern/Callable None Tokenizador o expresión regular
filter_punct bool True Filtrar los signos de puntuación
filter_nums bool False Filtrar los números, incluidos números con signo, rangos, fracciones, fechas, horas, porcentajes y ordinales (-5, +7, 1990-1995, 1.500,50, 12/03/2020, 3:30, 10%, 3.º, 1.ª, 2do)
use_lexemes bool False Usar los lemas de las palabras
stopwords Collection[str] None Palabras vacías, comparadas sin distinguir mayúsculas
lowercase bool False Convertir las palabras a minúsculas
ngram_range Tuple[int, int] (1, 1) Límite inferior y superior del tamaño de los N-gramas
min_len int 0 Longitud mínima de la palabra extraída
max_len int 0 Longitud máxima de la palabra extraída

Nota

Los filtros se aplican en este orden: puntuación, números, lematización, minúsculas, palabras vacías, longitud de la palabra. Las palabras vacías se comparan sin distinguir mayúsculas de minúsculas, así que una lista en minúsculas también filtra Los o La al principio de una oración. Un signo de puntuación es un token formado solo por signos y símbolos, también de varios caracteres: ?!, !.., --, , . Los tokens vacíos, que re.split deja tras un separador final, se descartan antes de los filtros. Una lista de palabras vacías ya hecha es spacy.lang.es.stop_words.STOP_WORDS; téngase en cuenta que incluye verbos frecuentes como tener.

Métodos

extract

Extrae las palabras de un texto.

Parámetro Tipo Por defecto Descripción
text str - Cadena de texto

Ejemplo de extracción de palabras con bigramas como tokens, tras filtrar números y palabras vacías y lematizar:

Ejemplo

Código:

# Importar la biblioteca
from ests import WordsExtractor

# Preparar los datos
text = "No tengas 100 euros, ten 100 amigos"

# Extraer las palabras
we = WordsExtractor(use_lexemes=True, stopwords=["no"], filter_nums=True, ngram_range=(1, 2))
we.extract(text)

Resultado:

('tener', 'euro', 'tener', 'amigo', 'tener_euro', 'euro_tener', 'tener_amigo')

get_most_common

Devuelve un contador de las palabras más frecuentes del texto. Recibe como parámetro el número de palabras a devolver.

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

Ejemplo

Código:

...

# Mostrar las palabras más frecuentes
we.get_most_common(3)

Resultado:

[('tener', 2), ('euro', 1), ('amigo', 1)]

Aviso

El método debe llamarse después de extraer las palabras con extract.