Alejandría

Busca en Alejandría

Lenguajes y marcos

LangExtract

Biblioteca para extraer información de texto con LLM y vincularla a pasajes del documento original.

01

En pocas palabras

Biblioteca para extraer información de texto con LLM y vincularla a pasajes del documento original.

Qué problema resuelve

Datos extraídos sin evidencia que permita comprobar de dónde provienen.

Cuándo utilizarlo

Documentos extensos especializados. Ejemplo: extraer fechas y obligaciones de contratos.

02

De la idea a la práctica

Funcionamiento, ejemplos y decisiones para pasar al siguiente nivel.

En el Radar compartido: Trial (valoración de la edición aportada).

Cómo funciona

El usuario proporciona instrucciones y ejemplos de entidades. La extracción conserva referencias a ubicaciones del texto y puede exportarse o visualizarse para revisión.

Ejemplo de uso

Extraer una obligación, su responsable y fecha; mostrar cada resultado junto al fragmento que lo respalda. Marcar ausencias y ambigüedades para revisión en lugar de completarlas por inferencia.

Ejemplo completo

import langextract as lx

prompt = """Extrae obligaciones del contrato: quién debe hacer qué y en qué plazo.
Usa el texto exacto del documento. No parafrasees ni infieras datos ausentes."""

ejemplos = [
    lx.data.ExampleData(
        text="El Deudor pagará la cuota mensual dentro de los primeros cinco días de cada mes.",
        extractions=[
            lx.data.Extraction(
                extraction_class="obligacion",
                extraction_text="pagará la cuota mensual dentro de los primeros cinco días de cada mes",
                attributes={"responsable": "Deudor", "plazo": "primeros cinco días de cada mes"},
            )
        ],
    )
]

resultado = lx.extract(
    text_or_documents=texto_contrato,
    prompt_description=prompt,
    examples=ejemplos,
    model_id="gemini-2.5-flash",
    extraction_passes=2,      # pasadas adicionales para mejorar la exhaustividad
    max_workers=8,            # procesar fragmentos en paralelo
    max_char_buffer=1500,     # tamaño de fragmento
)

lx.io.save_annotated_documents([resultado], output_name="obligaciones.jsonl", output_dir=".")
html = lx.visualize("obligaciones.jsonl")   # resalta cada extracción sobre el texto original

Qué la diferencia

Característica Beneficio
Anclaje en la fuente Cada extracción guarda su posición exacta en el texto: verificable
Pocos ejemplos Se adapta al dominio con ejemplos, sin entrenar un modelo
Documentos largos Divide en fragmentos, procesa en paralelo y hace varias pasadas
Visualización HTML interactivo para revisión humana
Proveedores Gemini, OpenAI y modelos locales mediante Ollama

Casos de uso

  • Contratos y pagarés: partes, montos, tasas, plazos, cláusulas de penalización.
  • Documentos regulatorios: obligaciones y fechas de cumplimiento.
  • Historias clínicas o informes: entidades y relaciones con su evidencia.
  • Correos y tickets: intención, producto, datos de contacto.

Evaluar la extracción

Construye un conjunto de documentos anotados a mano y mide precisión (extracciones correctas) y exhaustividad (obligaciones encontradas sobre las existentes). En documentos legales la exhaustividad suele importar más: una obligación omitida es más grave que una extracción de más que un revisor descarta.

Para convertir PDF a texto antes de extraer, usa Docling o MarkItDown. Para salida con esquema estricto sin anclaje, ver structured output.

Criterios de implementación

Preparar ejemplos del dominio, evaluar documentos largos y medir omisiones. Proteger fuentes sensibles y separar extracción de validación de reglas y formato.

Continúa en las fuentes

Documentación oficial para verificar detalles y explorar más.