44 lines
1.0 KiB
Python
44 lines
1.0 KiB
Python
"""
|
|
pdf_extractor.py — Extracción de texto de PDFs judiciales.
|
|
|
|
Sin LLM. Sin interpretación. Solo texto crudo.
|
|
Los PDFs nunca se guardan en disco — se procesan en memoria.
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import io
|
|
import re
|
|
|
|
from pypdf import PdfReader
|
|
|
|
MAX_CHARS = 600
|
|
|
|
|
|
def extraer_extracto(pdf_bytes: bytes) -> str | None:
|
|
"""
|
|
Extrae las primeras líneas de texto de un PDF judicial.
|
|
|
|
Retorna el extracto como string, o None si el PDF no tiene texto
|
|
extraíble (PDF escaneado, imagen, error de parseo).
|
|
"""
|
|
try:
|
|
reader = PdfReader(io.BytesIO(pdf_bytes))
|
|
texto = ""
|
|
for page in reader.pages:
|
|
texto += page.extract_text() or ""
|
|
if len(texto) >= MAX_CHARS:
|
|
break
|
|
|
|
texto = texto.strip()
|
|
if not texto:
|
|
return None
|
|
|
|
texto = re.sub(r"\n{3,}", "\n\n", texto)
|
|
|
|
if len(texto) > MAX_CHARS:
|
|
texto = texto[:MAX_CHARS] + "..."
|
|
|
|
return texto
|
|
except Exception:
|
|
return None
|