- Detección Automática: Primero intenta extraer texto nativo (rápido y 100% preciso).
- OCR de Respaldo: Si la página no tiene texto digital, activa Tesseract OCR para leer la imagen.
- Trazabilidad Total: Genera un archivo CSV/Excel donde cada fila indica el nombre del archivo original y el número de página, manteniendo el orden lógico del contenido.
- Limpieza Mínima: Preserva la estructura de las oraciones sin alterar el contenido original.
💻 El Código.
import fitz # PyMuPDF
import pandas as pd
from PIL import Image
import pytesseract
import os
# — CONFIGURACIÓN —
# Ruta al motor OCR (Ajustar según tu instalación)
pytesseract.pytesseract.tesseract_cmd = r”C:\Users\USUARIO\AppData\Local\Programs\Tesseract-OCR\tesseract.exe”
# Rutas de entrada y salida
pdf_path = r”tu_archivo_entrada.pdf”
output_path = r”texto_extraido_final.csv”
# ———————
def extraer_texto_pdf(path):
doc = fitz.open(path)
rows = []
for page_num in range(len(doc)):
page = doc[page_num]
# 1. Intento de extracción nativa
texto_final = page.get_text(“text”).strip()
# 2. Si no hay texto, aplicamos OCR (Fallback)
if not texto_final:
pix = page.get_pixmap(dpi=300)
img = Image.frombytes(“RGB”, [pix.width, pix.height], pix.samples)
texto_final = pytesseract.image_to_string(img, lang=”spa”).strip()
rows.append({
“archivo”: os.path.basename(path),
“pagina”: page_num + 1,
“texto”: texto_final
})
return rows
# Ejecución y guardado
datos = extraer_texto_pdf(pdf_path)
df = pd.DataFrame(datos)
df.to_csv(output_path, index=False, encoding=’utf-8-sig’)
print(f”✅ Proceso completado. Datos guardados en: {output_path}”)
📋 Requisitos para su uso.
- Python 3.x
- Tesseract OCR instalado en el sistema.
- Asegurarse de tener el archivo spa.traineddata
este en la carpeta de la instalación Tesseract-OCR\tessdata. Encaso de que no esté descargarlo (https://github.com/tesseract-ocr/tessdata) - Librerías necesarias:
pip install pymupdf pandas pytesseract pillow