«Mamá, hemos vivido juntos quince años, pero quizá no deberíamos haber tenido tres hijos»… Estas palabras salieron de la boca de mi hijo, y sentí que el suelo desaparecía bajo mis pies.
Isabel Martínez no podía creer lo que escuchaba. ¿Cómo era posible? ¿Cómo su hijo, su orgullo, el hombre en quien había depositado todas sus esperanzas, podía decir algo así? Recordaba cómo, en su juventud, Javier había sufrido por Leticia —esa chica que en el instituto le había hecho la vida imposible, burlándose de él, sembrando rumores, jugando sucio. Y ahora, justo ella, la que lo había humillado, estaba a punto de arruinarlo todo: su familia, sus hijos, años de esfuerzo, su vida entera.
Isabel lo recordaba todo. Cada burla de Leticia, cada lágrima que Javier guardó en silencio, aunque practicaba judo y podría haberle puesto fin de un solo golpe. Pero él era educado, noble. Incluso cuando ella misma estuvo a punto de ir a hablar con el director, de cambiarlo de instituto, él se negó. Aguantó.
Cuando terminó el colegio, Javier resurgió. Se graduó con honores, entró en la universidad en Madrid, trabajó duro, construy# Practica 1
“`{toctree}
:hidden:
Repositorio en GitHub
“`
## Objetivos
* Familiarizarse con el análisis de IR a partir de un conjunto de documentos
* Conocer y aplicar técnicas de representación de documentos de IR
* Practicar con los lenguajes y herramientas para procesamiento de texto e IR
## Enunciado
Se pide desarrollar un sistema básico de IR que permita recuperar documentos procesando consultas sobre un conjunto de documentos de texto. El sistema deberá cumplir los siguientes requisitos funcionales:
1. **Preprocesado del corpus**: dado un directorio con ficheros de texto, deberá generar una representación de los mismos en base a términos (*bag-of-words*), incluyendo:
– Ponderación de términos con tf-idf
– Posibilidad de aplicar transformaciones como *stemming* y eliminación de *stopwords*
– Almacenar la representación en disco para no tener que reprocesar los ficheros cada vez
2. **Búsqueda en el corpus**: dada una consulta, el sistema deberá recuperar los documentos del corpus más relevantes según la representación creada en el paso anterior
### Caso práctico: libros del proyecto Gutenberg
En este caso particular, el corpus está compuesto por textos de libros del [Proyecto Gutenberg](http://www.gutenberg.org), los cuales se incluyen en forma de ficheros de texto en el directorio `corpus`.
## Puntos a evaluar
1. Procesado del texto: preprocesado de documentos y consultas
2. Representación de los documentos: estrategia de ponderación de términos (*bag-of-words* con tf-idf)
3. Funcionalidad: ejecución del programa según lo indicado en el enunciado
4. Modularidad del código, claridad y buenas prácticas
5. Documentación en el README del repositorio, explicando:
– Cómo usar el programa
– Qué decisiones de diseño se han tomado
– Qué limitaciones tiene el sistema
## Conocimientos necesarios
* Procesamiento de texto en Python (tokenización, stemming, etc.)
* Representación vectorial de documentos y consultas (BoW, tf-idf)
* Métricas de similitud (coseno)
## Entrega
La entrega se realizará a través de un repositorio en GitHub, conteniendo el código fuente del programa. El repositorio deberá incluir:
* **Código fuente**: bien estructurado y documentado
* **README.md**: explicando la estructura del programa, cómo ejecutarlo y las decisiones de diseño que se han tomado
* **Requisitos**: fichero (e.g. `requirements.txt`) con las dependencias necesarias para ejecutar el programa
## Fecha de entrega
**3 de octubre (inclusive)**.
## Ejemplo de uso
“`
$ python search.py corpus/
(carga e indexa los documentos)
> query: sherlock holmes
1. The Adventures of Sherlock Holmes (score: 0.43)
2. The Hound of the Baskervilles (score: 0.21)
3. The Memoirs of Sherlock Holmes (score: 0.18)
“`
## Consejos
* Usar la [librería `nltk`](https://www.nltk.org/) para tareas de preprocesado de texto
* Usar [`sklearn.feature_extraction.text`](https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html) para la representación con tf-idf
* Considerar el uso de otras librerías como `pandas` para almacenar la información
* Estudiar cómo eliminar cabeceras/metadatos de los textos del Gutenberg antes de procesarlosIsabel respiró hondo y, con determinación, tomó el teléfono para llamar a Javier, sabiendo que esta vez no podría quedarse callada.






