Qué palabras dicen de qué trata un texto
Una bolsa de palabras cuenta cuántas veces aparece cada palabra de un texto y se olvida del orden. Es la forma más sencilla de convertir un texto en números, y con ella un programa ya puede comparar documentos.
Hay un problema: «el» y «de» son las palabras más frecuentes de cualquier texto español. Para saber de qué trata un aviso de la universidad, importan más las palabras raras, como «matrícula» o «prórroga».
Al final de esta lección
Nota
Puedo contar las palabras de un texto y dar más peso a las que son raras.
Palabras clave
| Palabra | Qué significa |
|---|---|
| Bolsa de palabras | los recuentos de cada token, sin el orden |
| Frecuencia de término | las veces que sale una palabra entre los tokens del texto |
| Documento | cada texto que se analiza |
| Rareza | cuántos documentos hay por cada uno que tiene la palabra |
| Peso | la frecuencia de término multiplicada por la rareza |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Una bolsa de palabras olvida el orden
Para hacer una bolsa de palabras, recorres los tokens y llevas la cuenta de cada uno en un diccionario. La clave es la palabra y el valor son las veces que aparece.
Se llama bolsa porque, al meter las palabras, se pierde el orden. «Perro muerde hombre» y «hombre muerde perro» dan la misma bolsa. Es una pérdida, pero a cambio el cálculo es muy sencillo.
Cuenta las palabras de un texto
# Una bolsa de palabras: cuántas veces sale cada token.
tokens = "el tren llega tarde el tren va lleno".split()
bag = {}
for token in tokens:
if token in bag:
bag[token] = bag[token] + 1
else:
bag[token] = 1
print(bag)
print(len(tokens), "tokens en total")
# Cambia el texto por uno tuyo y ejecuta.
La frecuencia de término compara textos
Un recuento de 3 no significa lo mismo en un mensaje de 10 palabras que en un informe de 1.000. Por eso se divide entre el total y se obtiene la frecuencia de término.
Si «examen» sale 2 veces entre 8 tokens, su frecuencia es 2 entre 8, es decir, 0,25. El resultado va siempre de 0 a 1.
Una palabra rara pesa más que una común
Para saber cuánto distingue una palabra a un documento, cuenta en cuántos documentos sale. Si sale en todos, no distingue nada. Si sale en uno solo, lo identifica.
La rareza es el número de documentos entre el número de documentos que tienen la palabra. El peso es la frecuencia de término por la rareza. La versión que usan las bibliotecas aplica además un logaritmo; aquí usamos la división directa.
Ejemplo resuelto: tres avisos de la facultad
| Palabra | Documentos que la tienen | Rareza | Frecuencia en el aviso 1 | Peso |
|---|---|---|---|---|
| el | 3 de 3 | 3 / 3 = 1,0 | 2 / 7 = 0,286 | 0,286 |
| redes | 2 de 3 | 3 / 2 = 1,5 | 1 / 7 = 0,143 | 0,214 |
| lunes | 1 de 3 | 3 / 1 = 3,0 | 1 / 7 = 0,143 | 0,429 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Cuenta en cuántos documentos sale
# Cuántos documentos tienen la palabra, y cuánto pesa por ser rara.
docs = [
"el examen es el lunes".split(),
"el examen es el martes".split(),
"la tutoria es el jueves".split(),
]
for word in ["el", "examen", "lunes"]:
inside = 0
for doc in docs:
if word in doc:
inside = inside + 1
print(word, "esta en", inside, "de", len(docs), "documentos")
# Prueba con "jueves" y con "es".
Cuenta una palabra en una lista
docker exec jupyter python3 -c "print('a b a c a b'.split().count('a'))"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un error muy común
Advertencia
Mucha gente cree que la palabra más frecuente es la más importante. Suele ser lo contrario: la más frecuente es casi siempre una palabra vacía. Mira la frecuencia solo junto a la rareza.
Para ir más lejos: tres avisos tuyos
Copia en tu cuaderno tres avisos reales de tu facultad o de tu grupo de mensajes. Tokeniza cada uno con la función de la lección anterior.
Calcula el peso de cada palabra del primero. ¿Qué cinco palabras pesan más? ¿Te dicen de qué trata el aviso?