¿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

Contar palabras y dar peso a las raras

Después de esta lección: Puedo contar las palabras de un texto y dar más peso a las que son raras.

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

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

PalabraQué significa
Bolsa de palabraslos recuentos de cada token, sin el orden
Frecuencia de términolas veces que sale una palabra entre los tokens del texto
Documentocada texto que se analiza
Rarezacuántos documentos hay por cada uno que tiene la palabra
Pesola 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

Código: python
# 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

PalabraDocumentos que la tienenRarezaFrecuencia en el aviso 1Peso
el3 de 33 / 3 = 1,02 / 7 = 0,2860,286
redes2 de 33 / 2 = 1,51 / 7 = 0,1430,214
lunes1 de 33 / 1 = 3,01 / 7 = 0,1430,429

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

Cuenta en cuántos documentos sale

Código: python
# 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

Comando
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?

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.