Una herramienta de línea de comandos para extraer texto y anotaciones de archivos PDF utilizando PyMuPDF.
Menú principal de la aplicación:
- ✅ Extracción de texto: Extrae todo el texto de archivos PDF
- ✅ Extracción de anotaciones: Extrae comentarios, resaltados y otras anotaciones
- ✅ Interfaz de línea de comandos: Menú interactivo fácil de usar
- ✅ Organización automática: Guarda los resultados en directorios organizados
- ✅ Múltiples formatos: Salida en texto plano y JSON
- Python: 3.10 o superior
- uv: Gestor de paquetes y entornos virtuales de Python
Si no tienes uv instalado, puedes instalarlo siguiendo las instrucciones oficiales:
# En macOS y Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# En Windows (PowerShell)
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
# Alternativamente, con pip
pip install uv-
Clona el repositorio:
git clone <url-del-repositorio> cd pdf-extract
-
Instala las dependencias con uv:
uv sync
Esto creará automáticamente un entorno virtual y instalará todas las dependencias necesarias.
Ejecuta el programa con el menú interactivo:
uv run main.pyEsto mostrará un menú con las siguientes opciones:
- 1. Extract text from PDF: Extrae todo el texto del PDF
- 2. Extract annotations from PDF: Extrae anotaciones y comentarios
- 0. Exit: Salir del programa
También puedes usar la herramienta directamente desde la línea de comandos:
# Extraer texto de un PDF específico
uv run main.py --text /ruta/al/archivo.pdf
# Extraer anotaciones de un PDF específico
uv run main.py --annotations /ruta/al/archivo.pdf
# Usar un PDF como argumento posicional
uv run main.py /ruta/al/archivo.pdfuv run main.py --helppdf-extract/
├── main.py # Archivo principal con menú y CLI
├── pyproject.toml # Configuración del proyecto y dependencias
├── uv.lock # Lock file de dependencias
├── README.md # Este archivo
├── .gitignore # Archivos a ignorar por Git
├── data/
│ ├── input/ # Coloca aquí tus archivos PDF
│ └── output/ # Archivos de salida generados
│ ├── text/ # Texto extraído (.txt)
│ └── annotations/ # Anotaciones extraídas (.json)
└── src/
├── extractors/
│ ├── text_extractor.py # Extractor de texto
│ └── annotation_extractor.py # Extractor de anotaciones
└── utils/
└── file_utils.py # Utilidades para manejo de archivos
El proyecto utiliza las siguientes dependencias principales:
- PyMuPDF (fitz)
1.23.14: Biblioteca para manipulación de archivos PDF - Python
≥3.10: Versión mínima requerida de Python
Para ver todas las dependencias exactas, consulta:
uv tree# Instalar dependencias de desarrollo
uv sync --dev
# Ejecutar en modo desarrollo
uv run python main.pymain.py: Punto de entrada principal con interfaz CLI y menú interactivosrc/extractors/: Módulos para extracción de texto y anotacionessrc/utils/: Utilidades comunes para manejo de archivos
# Verificar código (si tienes herramientas de linting configuradas)
uv run ruff check .
uv run black --check .# Ejecutar el menú interactivo
uv run main.py
# Seleccionar opción 1
# El programa buscará PDFs en data/input/ automáticamente
# El texto se guardará en data/output/text/# Directamente desde línea de comandos
uv run main.py --annotations "data/input/documento.pdf"
# Las anotaciones se guardarán en data/output/annotations/documento_annotations.json# Usar un PDF específico como argumento
uv run main.py "/ruta/completa/al/documento.pdf"
# Esto abrirá el menú interactivo con el PDF ya seleccionadoSi encuentras este error, asegúrate de ejecutar con uv run:
# ❌ No hagas esto
python main.py
# ✅ Haz esto
uv run main.py- Asegúrate de que tus archivos PDF estén en
data/input/ - O proporciona la ruta completa al archivo PDF
- Verifica que el archivo tenga extensión
.pdf
En Linux/macOS, asegúrate de que el directorio tenga permisos de escritura:
chmod +w data/output/- Fork el proyecto
- Crea una rama para tu función (
git checkout -b feature/nueva-funcion) - Commit tus cambios (
git commit -am 'Agregar nueva función') - Push a la rama (
git push origin feature/nueva-funcion) - Abre un Pull Request
[Especificar licencia aquí]
- ✅ Extracción básica de texto de PDFs
- ✅ Extracción de anotaciones y comentarios
- ✅ Interfaz de línea de comandos
- ✅ Menú interactivo
- ✅ Organización automática de archivos de salida
