Extractor automático de índices de notas desde PDFs financieros chilenos (NIIF)
Project description
📋 PDF Notes Extractor
Extractor automático de índices de notas desde PDFs de estados financieros chilenos (formato NIIF).
🎯 Descripción
Este proyecto automatiza la detección y extracción de índices de notas desde PDFs de estados financieros, generando un archivo Excel estructurado con la relación nota-página y métricas de confianza.
Características principales
- ✅ Detección automática de páginas de índice usando heurísticas robustas
- ✅ Soporte multi-backend: pdfplumber (default), PyMuPDF, PyPDF2
- ✅ Parsing inteligente de múltiples formatos de índice
- ✅ Mapeo automático de páginas impresas → páginas PDF
- ✅ Exportación a Excel con métricas de confianza
- ✅ CLI amigable con múltiples opciones de configuración
- ✅ Arquitectura extensible y bien documentada
📦 Instalación
Requisitos
- Python 3.8 o superior
- pip
Instalación básica
# Clonar repositorio
git clone <repo-url>
cd Table-Detector
# Crear entorno virtual
python -m venv venv
source venv/bin/activate # En Windows: venv\Scripts\activate
# Instalar dependencias básicas
pip install -e .
Instalación con backends alternativos
# Para PyMuPDF y PyPDF2
pip install -e ".[alternative]"
Instalación para desarrollo
# Incluye herramientas de testing y linting
pip install -e ".[dev]"
🚀 Uso
CLI Básico
# Extracción básica
notes-extractor extract input.pdf -o output.xlsx
# Con backend específico
notes-extractor extract input.pdf -o output.xlsx --backend pymupdf
# Con límite de páginas a escanear
notes-extractor extract input.pdf -o output.xlsx --scan-first 50
# Con mapeo de páginas
notes-extractor extract input.pdf -o output.xlsx --map-pages
# Modo debug
notes-extractor extract input.pdf -o output.xlsx --debug
Uso como librería
from notes_extractor.pipeline.orchestrator import NotesExtractorPipeline
from notes_extractor.config import ExtractorConfig
# Configurar
config = ExtractorConfig(
backend="pdfplumber",
enable_page_mapping=True,
min_confidence=0.6
)
# Ejecutar pipeline
pipeline = NotesExtractorPipeline(config)
result = pipeline.process("input.pdf", "output.xlsx")
# Acceder a resultados
print(f"Notas encontradas: {len(result.notes)}")
for note in result.notes:
print(f"{note.nota_id}: {note.titulo} - Pág. {note.pagina_impresa}")
📊 Formato de Salida
El archivo Excel generado contiene dos hojas:
Hoja 1: notas_paginas
| nota_id | titulo | pagina_impresa | pagina_pdf | pagina_fuente | confianza |
|---|---|---|---|---|---|
| 1 | Información general | 15 | 17 | 3 | 0.95 |
| 2 | Políticas contables | 18 | 20 | 3 | 0.92 |
Hoja 2: index_pages
| page_number | score | note_count | has_header | confidence |
|---|---|---|---|---|
| 3 | 25.5 | 15 | True | 0.89 |
| 4 | 22.3 | 12 | False | 0.85 |
🏗️ Arquitectura
Pipeline de Procesamiento:
PDF → Validación → Extracción de Texto → Detección de Índice →
Parsing → Normalización → Mapeo (opcional) → Exportación
Consulta Estructura.md para detalles completos de la arquitectura.
🧪 Testing
# Ejecutar todos los tests
pytest
# Con cobertura
pytest --cov=src/notes_extractor --cov-report=html
# Solo tests unitarios
pytest tests/unit/
# Solo tests de integración
pytest tests/integration/
📚 Documentación
🤝 Contribuir
Las contribuciones son bienvenidas. Por favor:
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
📝 Licencia
Este proyecto está bajo la licencia MIT. Ver LICENSE para más detalles.
🐛 Reportar Problemas
Si encuentras un bug o tienes una sugerencia, por favor abre un issue en GitHub.
📧 Contacto
Tu Nombre - tu@email.com
Project Link: https://github.com/tuusuario/Table-Detector
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pdf_notes_extractor-1.0.0.tar.gz.
File metadata
- Download URL: pdf_notes_extractor-1.0.0.tar.gz
- Upload date:
- Size: 43.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c3820ab2cabf7be823d70b2cb3afeb07ca8b82ed1fc447b70159a445291f2cee
|
|
| MD5 |
65c0dd6e52247c2e4988d941cf2bdfe1
|
|
| BLAKE2b-256 |
4aea4f230ea4d2f336da8188ecbe114482000445e567385c79afc448e4294292
|
File details
Details for the file pdf_notes_extractor-1.0.0-py3-none-any.whl.
File metadata
- Download URL: pdf_notes_extractor-1.0.0-py3-none-any.whl
- Upload date:
- Size: 40.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7c2eaa4e2b1ea8757ad00b5256cdcd4e5a383d2dbc1be48528303a6f5ed77e8e
|
|
| MD5 |
0709d5cc6c7e9d8163979ab01df9b6a1
|
|
| BLAKE2b-256 |
c8c8ae70dae9cf9cb3937f1d48107bc404ed57ad2110453ef359f20402dfb333
|