Presentamos LangExtract: una biblioteca de extracción de información impulsada por Gemini

30 DE JULIO DE 2025
Akshay Goel ML Software Engineer
Atilla Kiraly ML Software Engineer

En el mundo actual, lleno de datos, los textos no estructurados, como notas clínicas detalladas, documentos legales largos, hilos de comentarios de los clientes e informes de noticias en evolución, guardan información valiosa. Examinar manualmente esta información o crear un código a medida para procesar los datos requiere mucho tiempo y es un proceso que suele tener errores, y el uso inconsciente de modelos modernos de lenguaje grande (LLM) puede introducir errores. ¿Qué pasaría si pudieras extraer programáticamente la información exacta que necesitas y, al mismo tiempo, asegurarte de que los resultados estén estructurados y vinculados de manera confiable a su fuente?

Hoy, nos complace presentar LangExtract, una nueva biblioteca de Python de código abierto diseñada para permitir a los desarrolladores hacer precisamente eso. LangExtract proporciona una interfaz ligera para varios LLM, como nuestros modelos Gemini, para procesar grandes volúmenes de texto no estructurado en información estructurada basada en sus instrucciones personalizadas, lo que garantiza tanto la flexibilidad como la trazabilidad.

Ya sea que estés trabajando con informes médicos, resúmenes financieros o cualquier otro dominio de texto pesado, LangExtract ofrece una forma flexible y poderosa de aprovechar los datos que hay dentro de ese texto.


¿Qué hace que LangExtract sea eficaz para la extracción de información?

LangExtract ofrece una combinación única de capacidades que la hacen útil para la extracción de información:

  • Fundamentación precisa: Cada entidad extraída se asigna a sus desplazamientos de caracteres exactos en el texto de origen. Como se demuestra en las siguientes animaciones, esta función proporciona trazabilidad resaltando visualmente cada extracción en el texto original, lo que facilita mucho la evaluación y verificación de la información extraída.

  • Resultados estructurados confiables: Define el resultado deseado utilizando la representación de datos LangExtracts y proporciona ejemplos concisos. LangExtract utiliza esto para hacer cumplir un esquema, aprovechando la generación controlada en modelos compatibles como Gemini para garantizar resultados estructurados de manera coherente. Esto proporciona resultados sólidos, como se demuestra en nuestro análisis de texto completo de Romeo y Julieta.

  • Extracción optimizada de información de contexto largo: Obtener información de documentos grandes puede ser complejo. Por ejemplo, mientras los LLM muestran un buen rendimiento en muchos puntos de referencia, las pruebas de aguja en un pajar en contextos de millones de tokens muestran que la sensibilidad puede disminuir en escenarios de obtención de múltiples hechos. LangExtract está diseñada para manejar esto con una estrategia de fragmentación, procesamiento paralelo y múltiples pases de extracción en contextos más pequeños y enfocados.

  • Visualización interactiva: Pasa de tener un texto sin formato a una visualización HTML interactiva e independiente en minutos. LangExtract facilita la revisión de las entidades extraídas en contexto, con compatibilidad para explorar miles de anotaciones.

  • Compatibilidad flexible para backends de LLM: Trabaja con tus modelos preferidos, ya sean LLM basados en la nube (como la familia Gemini de Google) o modelos de código abierto integrados en el dispositivo.

  • Flexible en todos los dominios: Define las tareas de extracción de información para cualquier dominio con solo unos pocos ejemplos bien elegidos, sin la necesidad de ajustar un LLM. LangExtract "aprende" el resultado deseado y puede aplicarlo a entradas de texto nuevas y grandes. Consulta cómo funciona con este ejemplo de extracción de medicamentos.

  • Utilización del conocimiento mundial de LLM: Además de extraer entidades fundamentadas, LangExtract puede aprovechar el conocimiento mundial de un modelo para complementar la información extraída. Esta información puede ser explícita (es decir, derivada del texto de origen) o inferida (es decir, derivada del conocimiento mundial inherente del modelo). La precisión y la relevancia de ese conocimiento complementario, particularmente cuando se infiere, están fuertemente influenciadas por las capacidades del LLM elegido y la precisión de los ejemplos de indicación que guían la extracción.


Inicio rápido: de Shakespeare a objetos estructurados

A continuación, te mostramos cómo extraer detalles de los personajes de una línea de Shakespeare.

Primero, instala la biblioteca:

Para obtener instrucciones de configuración más detalladas, incluidos entornos virtuales y configuración de claves API, consulta el proyecto README.

pip install langextract
Python

Luego, define tu tarea de extracción. Proporciona una indicación clara y un ejemplo conciso de alta calidad para guiar el modelo.

importar textwrap
importar langextract as lx
 
# 1. Definir una indicación precisa
prompt = textwrap.dedent("""\
Extraer caracteres, emociones y relaciones en orden de aparición.
Usar texto exacto para extracciones. No parafrasear ni superponer entidades.
Proporcionar atributos significativos para cada entidad para agregar contexto.""")
 
# 2. Proporcionar un ejemplo de alta calidad para guiar el modelo
examples = [
    lx.data.ExampleData(
        text=(
            "ROMEO. Pero, ¡alto! ¿Qué luz alumbra esa ventana? Es"
            " el oriente, y Julieta es el sol."
        ),
        extractions=[
            lx.data.Extraction(
                extraction_class="character",
                extraction_text="ROMEO",
                attributes={"emotional_state": "wonder"},
            ),
            lx.data.Extraction(
                extraction_class="emotion",
                extraction_text="Pero, ¡alto!",
                attributes={"feeling": "gentle awe"},
            ),
            lx.data.Extraction(
                extraction_class="relationship",
                extraction_text="Julieta es el sol",
                attributes={"type": "metaphor"},
            ),
        ],
    )
]
 
# 3. Ejecutar extracción en texto de entrada
input_text = (
    "Lady Julieta contemplaba las estrellas con anhelo, con el corazón dolido por Romeo"
)
result = lx.extract(
    text_or_documents=input_text,
    prompt_description=prompt,
    examples=examples,
    model_id="gemini-2.5-pro",
)
Python

El objeto result contiene las entidades extraídas, que se pueden guardar en un archivo JSONL. A partir de ahí, puedes generar un archivo HTML interactivo para ver las anotaciones. Esta visualización es ideal para demostraciones o para evaluar la calidad de la extracción, ya que te ahorra un tiempo valioso. Funciona a la perfección en entornos como Google Colab o se puede guardar como un archivo HTML independiente que se puede ver desde tu navegador.

# Guardar los resultados en un archivo JSONL
lx.io.save_annotated_documents([result], output_name="extraction_results.jsonl")
 
# Genera la visualización interactiva desde el archivo
html_content = lx.visualize("extraction_results.jsonl")
con open("visualization.html", "w") como f:
    f.write(html_content)
Python

Flexibilidad para dominios especializados

Los mismos principios anteriores se aplican a dominios especializados como medicina, finanzas, ingeniería o derecho. Las ideas detrás de LangExtract se aplicaron por primera vez a la extracción de información médica y pueden ser eficaces para procesar textos clínicos. Por ejemplo, puede identificar medicamentos, dosis y otros atributos de medicamentos, y luego asignar relaciones entre ellos. Esta capacidad fue una parte fundamental de la investigación que condujo a esta biblioteca, que puedes leer en nuestro documento sobre la aceleración de la extracción de información médica.

La siguiente animación muestra a LangExtract procesando un texto clínico para extraer entidades relacionadas con medicación y agruparlas en la medicación de origen.

Demostración de informes radiológicos estructurados

A fin de mostrar el poder de LangExtract en un campo especializado, desarrollamos una demostración interactiva para informes de radiología estructurada llamada RadExtract en Hugging Face. Esta demostración muestra cómo LangExtract puede procesar un informe de radiología de texto libre y convertir automáticamente sus hallazgos clave en un formato estructurado, destacando también los hallazgos importantes. Este enfoque es importante en radiología, donde la estructuración de informes aumenta la claridad, garantiza la integridad y mejora la interoperabilidad de los datos para la investigación y la atención clínica.

Prueba la demostración en HuggingFace: https://google-radextract.hf.space


Declinación de garantías: El ejemplo de extracción de medicamentos y la demostración de informes estructurados anteriores son solo para fines ilustrativos de la capacidad de referencia de LangExtract. No representan un producto terminado o aprobado, no están destinados a diagnosticar o sugerir el tratamiento de ninguna enfermedad o afección, y no deben usarse para asesoramiento médico.


Primeros pasos con LangExtract: recursos y próximos pasos

Nos entusiasma ver las formas innovadoras en que los desarrolladores usarán LangExtract para obtener información a partir del texto. Sumérgete en la documentación, explora los ejemplos en nuestro repositorio de GitHub y comienza a transformar tus datos no estructurados hoy mismo.