¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Cómo preparar un texto para buscar

Después de esta lección: Puedo convertir un texto en bruto en una lista de tokens limpios con un programa de Python.

Lección de 55 min1 comandoLaboratorio JupyterLab de ciencia de datos: pandas, Matplotlib y scikit-learn en el navegador

Antes del índice, hay que limpiar

El procesamiento de texto convierte un texto en bruto en tokens limpios. Quita las mayúsculas, los signos y las palabras vacías, y reduce cada palabra a su raíz. Es el paso previo al índice invertido.

Importa porque un buscador solo junta lo que es idéntico. Si «Beca», «beca,» y «becas» son tres tokens distintos, quien busca «beca» no encuentra dos de los tres avisos.

Al final de esta lección

Nota

Puedo convertir un texto en bruto en una lista de tokens limpios con un programa de Python.

Palabras clave

PalabraQué significaEjemplo
Tokenun trozo de texto con el que trabaja el programa
Normalizardejar el texto en una forma única, sin mayúsculas ni signos
Palabra vacíauna palabra muy común que dice poco del temade
Raízla parte de la palabra que comparten sus variantes
Stemmingreducir cada palabra a su raíz con unas reglas fijas

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

El texto en bruto trae signos y restos

Un texto real trae mayúsculas, signos y, a veces, caracteres que no ves. El primer paso es normalizar: pasar todo a minúsculas y cambiar por un espacio todo lo que no sea una letra o una cifra.

Después se corta por espacios y quedan los tokens. Las tildes se conservan: «sí» y «si» son palabras distintas.

Ejemplo resuelto: de la frase a los tokens

PasoResultado
Texto de partida¡Última semana para pedir las Becas!
Pasar a minúsculas¡última semana para pedir las becas!
Cambiar los signos por espacios última semana para pedir las becas
Cortar por espaciosúltima, semana, para, pedir, las, becas

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Mira el resto invisible de una línea

Comando
docker exec jupyter python3 -c "print(repr(open('hires.csv',newline='').readline().split(',')[-1]))"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Limpia una frase

Código: python
# De un texto en bruto a tokens limpios.
texto = "¡Última semana para pedir las Becas de comedor!"
limpio = ""
for letra in texto.lower():
    if letra.isalnum():
        limpio = limpio + letra
    else:
        limpio = limpio + " "
print(limpio.split())
# Cambia el texto por un mensaje tuyo y ejecuta.

Las palabras vacías no ayudan a buscar

Palabras como «el», «de», «la» o «para» salen en casi todos los textos. Su idf es casi cero, así que apenas distinguen un documento de otro. Se llaman palabras vacías.

Muchos buscadores las quitan antes de indexar. Así el índice es más pequeño. La lista no es única: la eliges tú según el trabajo.

Quita las palabras vacías

Código: python
# Quitar las palabras vacías de una lista de tokens.
stops = ["el", "la", "las", "los", "de", "para"]
tokens = "plazo de pago para la beca de comedor".split()
utiles = []
for token in tokens:
    if token not in stops:
        utiles.append(token)
print(utiles)
# Añade "pago" a stops y mira qué cambia.

La raíz junta las formas de una palabra

«Beca» y «becas» son casi lo mismo, pero para el programa son dos tokens. El stemming los junta con unas reglas fijas. La más simple quita la «s» final si la palabra tiene más de tres letras.

Una raíz no tiene por qué ser una palabra correcta. Solo importa que las variantes den el mismo resultado.

Ejemplo resuelto: la regla de la «s» final

PalabraRaízResultado
becasbecajunta con «beca»
plazosplazojunta con «plazo»
busbustiene 3 letras, no se toca
lunesluneno es una palabra, pero es coherente
universidadesuniversidadeno junta con «universidad»

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Prueba la regla de la raíz

Código: python
# Una regla simple: quita la s final si la palabra tiene más de 3 letras.
def stem(word):
    if len(word) > 3 and word.endswith("s"):
        return word[:-1]
    return word

for palabra in ["becas", "plazos", "bus", "lunes", "universidades", "universidad"]:
    print(palabra, "->", stem(palabra))
# Añade "clases" y "clase" a la lista y mira si coinciden.

Un error muy común

Advertencia

Mucha gente cree que una regla de raíces nunca se equivoca. Se equivoca en las dos direcciones: no junta «universidades» con «universidad» y puede juntar palabras que no tienen relación. Es un atajo útil, no una verdad.

Para ir más lejos: tus palabras vacías

Escribe cinco frases sobre tu semana en la universidad y pásalas por la limpieza. Cuenta qué tokens se repiten más.

Añade a tu lista de palabras vacías las más repetidas que no digan nada del tema. Vuelve a contar y mira cómo cambia el vocabulario.

Sobre este laboratorio y su código: Laboratorio JupyterLab de ciencia de datos: pandas, Matplotlib y scikit-learn en el navegador

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.