Aplicación web de recuperación de información que indexa colecciones de documentos XML validados contra un esquema XSD. El sistema extrae automáticamente las Unidades Estructurales (UE) definidas en el esquema y crea un índice con campos dinámicos para cada UE, permitiendo búsquedas avanzadas con métricas de relevancia.
Tarea 7 - Equipo 7:
- Joel Alexander Jiménez Jiménez
- Rodolfo Gilberto Castillo Vega
- José Ramón Gascón Enriquez
- ✅ Validación XML/XSD: Valida documentos XML contra esquemas XSD utilizando lxml
- ✅ Extracción de UE: Detecta y extrae automáticamente Unidades Estructurales
- ✅ Indexación dinámica: Crea índices con campos dinámicos según las UE del esquema
- ✅ Búsqueda avanzada: Búsqueda simple, por campo y multi-campo con Whoosh
- ✅ Interfaz web moderna: UI responsive con tema oscuro
- ✅ 4 modos de carga: XSD+Carpeta, Auto-detección, Subir archivos, Descargar desde URL
- ✅ Métricas visuales: Gráficos de relevancia y distribución de resultados
- ✅ Sugerencias de búsqueda: Autocompletado basado en contenido indexado
- ✅ Palabras relacionadas: Panel con términos semánticamente relacionados
- ✅ Análisis en español: Soporte para análisis de texto en español
tarea_final_sistemas/
├── src/
│ ├── modules/
│ │ ├── __init__.py
│ │ ├── xml_validator.py # Validación XML y extracción de UE
│ │ ├── indexer.py # Indexación con Whoosh
│ │ └── searcher.py # Búsqueda de documentos
│ ├── utils/
│ │ └── file_utils.py # Utilidades de archivos
│ └── web/
│ ├── app.py # Aplicación Flask (servidor)
│ └── templates/
│ └── index.html # Interfaz web
├── data/ # Datos de ejemplo
│ ├── documento.xsd # Esquema XSD de ejemplo
│ └── *.xml # Documentos XML de ejemplo
├── tests/ # Pruebas unitarias
│ ├── test_xml_validator.py
│ ├── test_indexer_searcher.py
│ └── test_file_utils.py
├── uploads/ # Archivos subidos temporalmente
├── index/ # Índice Whoosh (generado)
├── pyproject.toml # Configuración del proyecto
├── uv.lock # Lock file de dependencias
└── README.md # Este archivo
- Python 3.9 o superior
- UV (gestor de paquetes ultrarrápido)
git clone <url-del-repositorio>
cd tarea_final_sistemasUV es un gestor de paquetes Python extremadamente rápido desarrollado por Astral. Selecciona tu sistema operativo:
🐧 Linux
Opción A - Script oficial (recomendado):
curl -LsSf https://astral.sh/uv/install.sh | shOpción B - Con wget:
wget -qO- https://astral.sh/uv/install.sh | shOpción C - Con pipx:
pipx install uvDespués de instalar, reinicia tu terminal o ejecuta:
source ~/.bashrc
# o si usas zsh:
source ~/.zshrcVerificar instalación:
uv --version🍎 macOS
Opción A - Script oficial (recomendado):
curl -LsSf https://astral.sh/uv/install.sh | shOpción B - Con Homebrew:
brew install uvOpción C - Con pipx:
pipx install uvDespués de instalar, reinicia tu terminal o ejecuta:
source ~/.zshrc
# o si usas bash:
source ~/.bash_profileVerificar instalación:
uv --version🪟 Windows
Opción A - PowerShell (recomendado):
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"Opción B - Con winget:
winget install --id=astral-sh.uv -eOpción C - Con Scoop:
scoop install uvOpción D - Con pip:
pip install uvDespués de instalar, reinicia PowerShell o CMD.
Verificar instalación:
uv --version# Crear entorno virtual (automático con uv sync)
uv syncEste comando:
- Crea automáticamente un entorno virtual en
.venv/ - Lee las dependencias de
pyproject.toml - Instala todas las dependencias necesarias
Si necesitas activar el entorno para otros propósitos:
# Linux/macOS
source .venv/bin/activate
# Windows (PowerShell)
.venv\Scripts\Activate.ps1
# Windows (CMD)
.venv\Scripts\activate.batuv run python -m src.web.appUna vez iniciado el servidor, abre tu navegador en:
http://localhost:5000
La aplicación ofrece 4 modos de carga de documentos:
| Modo | Descripción |
|---|---|
| 📁 XSD + Carpeta | Selecciona un archivo XSD y una carpeta con XMLs |
| 🔍 Auto-detectar | Detecta automáticamente el esquema desde los XMLs |
| 📤 Subir Archivos | Sube archivos XML directamente desde tu computadora |
| 🌐 URL | Descarga documentos XML desde una URL |
Pasos:
- Selecciona el modo de carga deseado
- Proporciona los archivos/carpeta según el modo
- Haz clic en "Indexar Documentos"
- Espera a que se complete la indexación
Búsqueda simple:
- Escribe tu consulta en el campo de búsqueda
- Las sugerencias aparecerán mientras escribes
- Presiona Enter o haz clic en "Buscar"
Búsqueda por campo:
- Activa "Búsqueda por campo"
- Selecciona el campo (título, autor, resumen, etc.)
- Escribe tu consulta
- Busca
Panel de palabras relacionadas:
- A la derecha verás términos relacionados con tu búsqueda
- Haz clic en cualquier palabra para buscarla
Visualiza estadísticas de tus búsquedas:
- Distribución de relevancia: Gráfico de barras con scores
- Coincidencias por campo: Dónde se encontraron los términos
- Tendencia de scores: Línea temporal de relevancia
Documentación completa y guía de uso dentro de la aplicación.
uv run pytestuv run pytest -vuv run pytest --cov=src# Solo pruebas de validación XML
uv run pytest tests/test_xml_validator.py -v
# Solo pruebas de indexación y búsqueda
uv run pytest tests/test_indexer_searcher.py -v
# Solo pruebas de utilidades
uv run pytest tests/test_file_utils.py -v| Tecnología | Propósito |
|---|---|
| Python 3.9+ | Lenguaje de programación |
| Flask | Framework web para el servidor |
| lxml | Parsing XML, validación XSD, XPath |
| Whoosh | Motor de indexación y búsqueda full-text |
| UV | Gestión ultrarrápida de paquetes Python |
| Chart.js | Visualización de métricas |
| pytest | Framework de pruebas unitarias |
El proyecto incluye un esquema XSD de ejemplo (data/documento.xsd) con las siguientes Unidades Estructurales:
| Campo | Descripción |
|---|---|
titulo |
Título del documento |
autor |
Autor del documento |
fecha |
Fecha de creación |
resumen |
Resumen del contenido |
cuerpo |
Cuerpo principal del documento |
conclusiones |
Conclusiones |
referencias |
Referencias bibliográficas |
palabras_clave |
Palabras clave del documento |
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Documentos XML │────▶│ Validación │────▶│ Extracción UE │
└─────────────────┘ │ (XSD) │ └────────┬────────┘
└──────────────────┘ │
▼
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Resultados │◀────│ Búsqueda │◀────│ Indexación │
│ + Métricas │ │ (Whoosh) │ │ (Whoosh) │
└─────────────────┘ └──────────────────┘ └─────────────────┘
Linux/macOS:
export PATH="$HOME/.cargo/bin:$PATH"
source ~/.bashrc # o ~/.zshrcWindows: Reinicia PowerShell o CMD después de la instalación.
chmod +x ~/.cargo/bin/uvVerifica que el puerto 5000 esté disponible:
# Linux/macOS
lsof -i :5000
# Windows
netstat -ano | findstr :5000# Limpiar y reinstalar
rm -rf .venv uv.lock
uv syncEste proyecto fue desarrollado como parte del curso de Recuperación de Información - UACJ.
Para preguntas o sugerencias, contactar a los miembros del Equipo 7.