Construir un clasificador de correos electrónicos desde cero requiere una preparación de datos sólida y herramientas adecuadas para el procesamiento de texto. En esta sesión se aborda cómo organizar un corpus de correos almacenados en archivos individuales, consolidarlos en estructuras manejables en Python y se presenta Spacy, una librería profesional de procesamiento de lenguaje natural que será clave en la implementación del algoritmo de Naive Bayes.
¿Cómo se organizan los datos del corpus de correos electrónicos?
El punto de partida es un repositorio de datasets que contiene correos electrónicos en formato plaintext [0:43]. A diferencia del ejercicio anterior donde se trabajó con archivos CSV y pocos datos, ahora se utiliza un corpus más grande para entrenar el modelo con mayor robustez.
La estructura del corpus es particular: cada correo electrónico es un archivo independiente dentro de dos subcarpetas llamadas ham y spam [1:25]. Los archivos vienen comprimidos en formato .zip, por lo que el primer paso es extraerlos. Una vez descomprimidos, se obtiene una carpeta (por ejemplo, Corpus1) con las dos subcarpetas mencionadas.
- Cada archivo representa un único correo electrónico.
- La carpeta donde se encuentra determina su etiqueta de clase:
spam o ham.
- Los correos de spam contienen ofertas o contenido no deseado.
¿Qué librerías se necesitan para la preparación?
Se importan dos librerías fundamentales desde el inicio del notebook en Google Colab [0:25]:
- math: se utilizará para calcular los logaritmos de las probabilidades, un paso esencial en el cálculo probabilístico de Naive Bayes.
- os: permite listar archivos dentro de un directorio mediante el comando
os.listdir(), indispensable para recorrer las carpetas del corpus.
El comando os.listdir() [3:06] devuelve una lista con todos los nombres de archivos contenidos en una ruta específica, lo que lo convierte en la herramienta ideal para iterar sobre cada correo del dataset.
¿Cómo se consolidan los datos en listas de Python?
Como cada data point está en un archivo separado, se necesita unificar todo en un solo corpus. Para ello se crean dos listas [2:23]:
data: almacena el contenido de texto de cada correo.
clases: almacena la etiqueta correspondiente (spam o ham).
El proceso de lectura de los correos de spam sigue esta lógica [2:36]:
python
for file in os.listdir('corpus1/spam/'):
with open('corpus1/spam/' + file, encoding='latin1') as f:
data.append(f.read())
clases.append('spam')
Se usa with open para abrir cada archivo con la ruta completa concatenada. El parámetro encoding='latin1' [3:45] es necesario porque el dataset contiene caracteres especiales que requieren esta codificación, según indica la documentación del corpus.
Para los correos ham, el código es prácticamente idéntico [4:29], cambiando únicamente la ruta de la carpeta y la etiqueta:
python
for file in os.listdir('corpus1/ham/'):
with open('corpus1/ham/' + file, encoding='latin1') as f:
data.append(f.read())
clases.append('ham')
Al finalizar, se verifica la longitud del corpus con len(data) o len(clases), obteniendo un total de 5172 correos electrónicos [5:22], divididos entre ham y spam.
¿Qué es Spacy y por qué usarlo en Naive Bayes?
Spacy es una librería de procesamiento de lenguaje natural reconocida por su robustez y capacidad para llevar modelos a producción [5:52]. Se introduce como una herramienta nueva en el flujo de trabajo, y su función principal en este contexto es el tokenizador.
El tokenizer de Spacy [6:05] se encarga de dividir el texto en unidades individuales (tokens) de forma eficiente y confiable. A diferencia de métodos simples como split(), el tokenizador de Spacy maneja casos complejos de puntuación, caracteres especiales y estructuras lingüísticas.
- Permite implementar pipelines completos de procesamiento de texto.
- Su documentación es extensa y accesible.
- Está diseñado para entornos de producción, no solo experimentación.
Familiarizarse con Spacy representa una ventaja significativa, ya que abre la puerta a flujos de trabajo profesionales en NLP. La implementación concreta del tokenizador y su integración con el algoritmo de Naive Bayes se desarrollará en la siguiente sesión.
¿Ya habías trabajado con Spacy o es tu primer acercamiento? Comparte tu experiencia en los comentarios.