Detalles del contenido

En un mundo en el que la tecnología y el conocimiento están entrelazados, cada lectura es como una aventura asombrosa que te da una sensación de sabiduría e inspira una creatividad sin fin.

Explicación de Gemini 2.0 PDF: ejemplos de código y buenas prácticas

Los documentos PDF, como soporte importante para el almacenamiento de información empresarial y personal, siempre han sido un reto importante en el campo del procesamiento de datos. Con la introducción del modelo Gemini 2.0 por parte de Google DeepMind, este campo está experimentando un cambio sin precedentes. En este artículo, vamos a explorar Gemini 2.0 cómo cambiar completamente el modelo de procesamiento de PDF, y a través de los ejemplos de código reales para mostrar cómo utilizar esta tecnología para hacer frente a diversos tipos de documentos PDF.

Desafíos tradicionales del procesamiento de PDF

Durante mucho tiempo, la conversión de documentos PDF en datos estructurados legibles por máquina ha sido el campo de la IA y el procesamiento de datos del "gran problema". Las soluciones tradicionales pueden dividirse a grandes rasgos en tres categorías:

  1. modelo integral de código abierto: A menudo se sienten abrumados por la complejidad de la maquetación y tienen dificultades para identificar con precisión tablas, gráficos y tipografía especial.
  2. Programa combinado multimodelopor ejemplo, el nv-ingest de NVIDIA requiere 8 servicios y múltiples GPUs para ser desplegado en Kubernetes, lo que no solo es complejo de desplegar sino también caro de programar.
  3. Pago por servicioEl sistema de gestión de la calidad: Aunque ofrece cierta comodidad, la precisión es incoherente cuando se trata de trazados complejos y los costes crecen exponencialmente cuando se aplican a gran escala.

Estas soluciones tienen dificultades para encontrar un equilibrio entre precisión, escalabilidad y rentabilidad, sobre todo cuando hay que procesar cientos de millones de páginas de documentos, y el coste suele ser prohibitivo.

Configuración del entorno e instalación de Gemini 2.0

Para empezar a utilizar Gemini 2.0 para procesar documentos PDF, primero debe configurar el entorno y crear un cliente de inferencia. Estos son los pasos específicos:

Instalar las bibliotecas necesarias

PHP
%pip install "google-genai>=1"

Creación de clientes y configuraciones de modelos

PHP
from google import genai

# Crear cliente
api_key = "YOUR_API_KEY" # Sustitúyela por tu clave API.
client = genai.Client(api_key=api_key)

# Define el modelo a utilizar
model_id = "gemini-2.0-flash" # Utilice también "gemini-2.0-flash-lite-preview-02-05" o "gemini-2.0-pro-exp-02-05".

Cargar y procesar archivos PDF

PHP
# Subir archivo PDF
invoice_pdf = client.files.upload(file="factura.pdf", config={'nombre_visualizacion': 'factura'})

# Ver en cuántos tokens se convierte el archivo
tamaño_archivo = client.models.count_tokens(model=model_id, contents=factura_pdf)
print(f'Fichero: {invoice_pdf.display_name} equivale a {file_size.total_tokens} tokens')

# Salida de ejemplo: Archivo: factura igual a 821 tokens

Con los pasos anteriores, hemos completado la configuración del entorno base y cargado con éxito el primer archivo PDF para su procesamiento. Cabe destacar que la API de archivos de Gemini permite almacenar hasta 20 GB de archivos por proyecto, con un máximo de 2 GB por archivo, y los archivos cargados se guardan durante 48 horas.

Práctica de extracción de datos estructurados en PDF

Gemini 2.0 una potente función es la capacidad de extraer datos estructurados de archivos PDF. A continuación mostraremos cómo utilizar el modelo Pydantic con Gemini para lograr esta función mediante ejemplos prácticos.

Definir métodos genéricos de extracción de datos

En primer lugar, definimos un método genérico para procesar archivos PDF y devolver datos estructurados:

PHP
def extraer_datos_estructurados(ruta_archivo: str, modelo: BaseModel).
    # Carga de un archivo en la API de archivos
    file = client.files.upload(file=ruta_archivo, config={'display_name': file_path.split('/')[-1].split('.') [0]})

    # Generación de una respuesta estructurada mediante la API Gemini
    prompt = f "Extraer los datos estructurados del siguiente archivo PDF"
    response = client.models.generate_content(model=model_id,
                                             contents=[prompt, file], config={'response_mime_content')
                                             
                                                     'response_schema': model})

    # transforma la respuesta en un modelo Pydantic y lo devuelve
    return respuesta.analizada

Caso 1: Extracción de datos de facturas

Para la clase de factura PDF, podemos definir el siguiente modelo para extraer la información clave:

PHP
from pydantic import ModeloBase, Campo

clase Artículo(BaseModel).
    descripción: str = Field(descripción="La descripción del artículo")
    cantidad: float = Field(description="La cantidad del artículo")
    valor_bruto: float = Field(description="Valor bruto del artículo")

clase Factura(BaseModel).
    """Extraer el número de factura, la fecha y todos los elementos de la lista con la descripción, la cantidad y el valor bruto y el valor bruto total.""""
    número_factura: str = Field(description="El número de factura, por ejemplo 1234567890")
    date: str = Field(description="Fecha de la factura, por ejemplo 2024-01-01")
    items: list[Item] = Field(description="La lista de artículos con descripción, cantidad y valor bruto")
    valor_bruto_total: float = Field(description="Valor bruto total de la factura")

# Extrae los datos utilizando este modelo
result = extraer_datos_estructurados("factura.pdf", Factura)

# Salida de resultados
print(f "Factura extraída: {result.invoice_number} en {result.date} con valor bruto total {result.total_gross_worth}")
para artículo en resultado.artículos: print(f "Artículo: {artículo_valor_bruto}")
    print(f "Artículo: {artículo.descripción} con cantidad {artículo.cantidad} y valor bruto {artículo.valor_bruto}")

Caso 2: Tratamiento de formularios con contenido manuscrito

Para los formularios con contenido manuscrito, también podemos definir modelos especializados:

PHP
clase Formulario(BaseModel).
    """Extraer el número de formulario, la fecha de inicio fiscal, la fecha de finalización fiscal y las obligaciones del plan de principio de año y de final de año.""""
    form_number: str = Field(description="El número de formulario")
    fecha_inicio: str = Field(description="Fecha de entrada en vigor")
    beginning_of_year: float = Field(description="El pasivo del plan a principios de año")
    end_of_year: float = Field(description="El pasivo del plan al final del año")

# Extraer datos
result = extraer_datos_estructurados("escritura_form.pdf", Formulario)

# salida resultados
print(f'Número de formulario extraído: {result.número_formulario} con fecha de inicio {result.fecha_inicio}. \nPlan pasivo inicio del año {result.inicio_del_año} y fin del año {result.fin_del_año}')
# Ejemplo de salida: Número de formulario extraído: CA530082 con fecha de inicio 02/05/2022.
# Pasivo del plan principio del año 40000,0 y final del año 55000,0

A través del ejemplo anterior, podemos ver que Gemini 2.0 puede identificar con precisión el contenido de texto del PDF, incluso el texto manuscrito, y convertirlo a un formato de datos JSON estructurado, lo que simplifica enormemente el proceso de extracción de datos.

Aplicaciones avanzadas: fragmentación de documentos y comprensión semántica

En los sistemas RAG (Retrieval Augmented Generation), la fragmentación de documentos es un paso clave además de la extracción básica de texto, y Gemini 2.0 nos permite realizar tanto el OCR como la fragmentación semántica en un solo paso.

Ejemplo de fragmentación semántica de PDF

Aquí tienes un consejo para convertir PDF a Markdown y hacer semantic chunking al mismo tiempo:

PHP
CHUNKING_PROMPT = """OCR la siguiente página en Markdown. Las tablas deben tener formato HTML.
No rodee su salida con triple backticks.
Divida el documento en secciones de aproximadamente 250 - 1000 palabras. Nuestro objetivo es
Nuestro objetivo es identificar partes de la página con el mismo tema semántico.
Estos trozos se incrustarán y se utilizarán en una canalización RAG.
Rodee los trozos con etiquetas   html.""""

# utiliza esta instrucción para el procesamiento
response = cliente.modelos.generar_contenido(
    model=id_modelo,
    contents=[CHUNKING_PROMPT, pdf_file]
)

chunked_content = response.text

Este enfoque identifica los límites semánticos de un documento y genera trozos de texto más significativos, lo que mejora enormemente la precisión de la recuperación posterior. En comparación con la fragmentación mecánica tradicional basada en el número de caracteres, la fragmentación semántica es más capaz de mantener la coherencia y la integridad del contenido.

Extracción de datos complejos con Pydantic

Para escenarios más complejos, podemos definir modelos Pydantic anidados para manejar múltiples niveles de datos:

PHP
class Person(BaseModel): first_name: str = Field(description="El nombre de la persona")
    first_name: str = Field(description="El nombre de la persona")
    last_name: str = Field(description="El apellido de la persona")
    last_name: str = Field(description="El apellido de la persona") last_name: str = Field(description="El apellido de la persona")
    work_topics: list[Topic] = Field(description="Los campos de interés de la persona, si no se proporcionan devuelva una lista vacía")

# Generar una respuesta utilizando el modelo Persona
prompt = "Philipp Schmid es un Ingeniero Senior de Relaciones con Desarrolladores de IA en Google DeepMind trabajando en Gemini, Gemma con la misión de ayudar a cada desarrollador a construir y beneficiarse de la IA de manera responsable".
response = client.models.generate_content(
    model=id_modelo,
    contents=prompt,
    config={'response_mime_type': 'application/json', 'response_schema': Person}
)

El SDK # convierte automáticamente la respuesta en un modelo Pydantic
philipp: Persona = respuesta.analizada
print(f "El nombre es {philipp.first_name}")

Optimización del rendimiento y buenas prácticas

Estas son algunas de las mejores prácticas para mejorar la eficacia y la precisión al procesar documentos PDF a gran escala:

Procesamiento por lotes y optimización de fichas

Si tiene que tratar un gran número de escenas PDF, puede realizar el procesamiento por lotes para mejorar la eficacia:

PHP
async def batch_process_pdfs(file_paths, model, batch_size=10):: results = [].
    resultados = []
    for i in range(0, len(rutas_archivo), tamaño_lote):: batch = rutas_archivo[i:i+tamaño_lote): batch = rutas_archivo[i:i
        batch = rutas_archivo[i:i+tamaño_lote]: results = [] for i in range(0, len(rutas_archivo), tamaño_lote).
        tasks = [extraer_datos_estructurados(ruta, modelo) para ruta en lote].
        resultados_lote = await asyncio.gather(*tareas)
        results.extend(resultados_lote)
        print(f "Lote procesado {i//tamaño_lote + 1}/{(len(rutas_archivo)+tamaño_lote-1)//tamaño_lote}")
    devolver resultados

Selección de modelos y control de costes

Seleccionar la variante de modelo adecuada a las necesidades reales puede reducir considerablemente los costes:

  1. Gemini 2.0 FlashLa mejor opción para situaciones de uso general, con una excelente relación calidad-precio.
  2. Gemini 2.0 Flash-Lite:: Ofrece una mejor relación calidad-precio para documentos sencillos
  3. Géminis 2.0 Pro: Maneje documentos extremadamente complejos o escenas que requieran gran precisión

A continuación se compara la eficacia de procesamiento de los distintos modelos:

modelizaciónPáginas PDF procesadas por dólar (conversión Markdown)
Gemini 2.0 FlashAprox. 6.000 páginas
Gemini 2.0 Flash LiteAprox. 12.000 páginas
Géminis 1.5 FlashAprox. 10.000 páginas
OpenAI 4-miniAprox. 450 páginas
OpenAI 4oAlrededor de 200 páginas
Claude antrópico-3,5Aprox. 100 páginas

Tratamiento de errores y mecanismo de reintento

En un entorno de producción, es fundamental implantar mecanismos sólidos de gestión de errores:

PHP
def extraer_con_reintentos(ruta_archivo, modelo, max_reintentos=3):: for intento en rango(max_reintentos)
    para intento en rango(max_reintentos).
        intentar.
            return extraer_datos_estructurados(ruta_archivo, modelo): for intento en rango(entradas_máx): try.
        except Exception as e: if attempt == max_retries
            if attempt == max_retries - 1: print(f "Error al acceder al archivo.
                print(f "No se ha podido procesar {ruta_archivo} tras {máx_intentos} intentos: {e}")
                return Ninguno
            print(f "Intento {intento+1} fallido, reintento: {e}")
            time.sleep(2 **intento) # estrategia de reintento exponencial

Optimización del tratamiento de formularios

Para los PDF que contienen formularios complejos, se pueden utilizar las siguientes palabras clave para mejorar la precisión del reconocimiento de formularios:

PHP
TABLE_EXTRACTION_PROMPT = """Extraiga todas las tablas del PDF como tablas HTML.
Conserve la estructura exacta, incluidas las celdas combinadas, los encabezados y el formato.
Cada tabla debe ser semánticamente completa y mantener las relaciones entre celdas.
Para los valores numéricos, mantenga su formato exacto como se muestra en el documento.""""

observaciones finales

A través de los métodos y el código de ejemplo presentados en este artículo, ya puede empezar a utilizar Gemini 2.0 para construir un potente sistema de procesamiento de documentos PDF. Desde la simple extracción de texto hasta el complejo análisis sintáctico de datos estructurados, pasando por el chunking semántico, Gemini 2.0 ha demostrado un rendimiento excelente y muy rentable.

Aunque todavía hay margen de mejora en áreas como el reconocimiento de recuadros delimitadores, pero a medida que la tecnología sigue evolucionando, tenemos motivos para creer que el futuro del procesamiento de PDF será más inteligente y eficaz. Para cualquier necesidad de procesamiento a gran escala de datos de documentos para particulares u organizaciones, Gemini 2.0 es sin duda un producto digno de atención y de adopción de los avances tecnológicos.

Para más productos, visite

Más información en

ShirtAI - Inteligencia penetrante El Gran Modelo AIGC: el comienzo de una era de doble revolución en ingeniería y ciencia - Inteligencia Penetrante
Restauración 1:1 de Claude y GPT Sitio web oficial - AI Cloud Native Live Match App Global HD Sports Viewing Player (Recomendado) - Blueshirt Technology
Servicio de tránsito basado en la API oficial - GPTMeta API Ayuda, ¿alguien de ustedes puede proporcionar algunos consejos sobre cómo hacer preguntas en GPT? - Conocimientos
Tienda digital global de bienes virtuales - Global SmarTone (Feng Ling Ge) ¿Qué tan poderoso es Claude airtfacts característica que GPT al instante no huele bien? -BeepBeep

espacio publicitario

¡Presenciemos juntos la supermagia de la IA!

Adopte su asistente de inteligencia artificial y aumente su productividad con un solo clic.