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
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Token | un trozo de texto con el que trabaja el programa | |
| Normalizar | dejar el texto en una forma única, sin mayúsculas ni signos | |
| Palabra vacía | una palabra muy común que dice poco del tema | de |
| Raíz | la parte de la palabra que comparten sus variantes | |
| Stemming | reducir 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
| Paso | Resultado |
|---|---|
| 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
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
# 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
# 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
| Palabra | Raíz | Resultado |
|---|---|---|
| becas | beca | junta con «beca» |
| plazos | plazo | junta con «plazo» |
| bus | bus | tiene 3 letras, no se toca |
| lunes | lune | no es una palabra, pero es coherente |
| universidades | universidade | no junta con «universidad» |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Prueba la regla de la raíz
# 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.