Detalhes do conteúdo

Num mundo em que a tecnologia e o conhecimento estão interligados, cada leitura é como uma aventura fantástica que nos dá uma sensação de sabedoria e inspira uma criatividade sem fim.

Gemini 2.0 PDF Explained: Exemplos de código e melhores práticas

Os documentos PDF, enquanto suporte importante para o armazenamento de informações empresariais e pessoais, sempre foram um grande desafio no domínio do processamento de dados. Com a introdução do modelo Gemini 2.0 pelo Google DeepMind, este domínio está a dar início a uma mudança sem precedentes. Neste documento, exploraremos o Gemini 2.0 como alterar completamente o padrão de processamento de PDF e, através de exemplos reais de código, mostraremos como utilizar esta tecnologia para lidar com vários tipos de documentos PDF.

Desafios tradicionais do processamento de PDF

Durante muito tempo, a conversão de documentos PDF em dados estruturados legíveis por máquina foi o domínio da IA e do processamento de dados do "grande problema". As soluções tradicionais podem ser divididas em três categorias:

  1. modelo end-to-end de fonte abertaO que é que os utilizadores fazem: Ficam muitas vezes sobrecarregados com a complexidade da apresentação e têm dificuldade em reconhecer com exatidão tabelas, gráficos e tipografia especial.
  2. Programa de combinação de vários modelosPor exemplo, o nv-ingest da NVIDIA requer 8 serviços e várias GPUs para ser implantado no Kubernetes, o que não é apenas complexo de implantar, mas também caro para agendar.
  3. Taxa comercial por serviçoO sistema de gestão de custos é um sistema de gestão de custos que, apesar de proporcionar alguma comodidade, é inconsistente quando se trata de esquemas complexos e os custos crescem exponencialmente quando aplicados em grande escala.

Estas soluções têm dificuldade em equilibrar a precisão, a escalabilidade e a relação custo-eficácia, especialmente quando confrontadas com cenários em que é necessário processar centenas de milhões de páginas de documentos, e o custo é muitas vezes proibitivo.

Configurando o ambiente e instalando o Gemini 2.0

Para começar a usar o Gemini 2.0 para processar documentos PDF, primeiro é necessário configurar o ambiente e criar um cliente de inferência. Aqui estão as etapas específicas:

Instalar as bibliotecas necessárias

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

Criando Clientes e Configurações de Modelos

PHP
from google import genai

# Criar cliente
api_key = "YOUR_API_KEY" # Substituir pela sua chave API.
cliente = genai.Client(api_key=api_key)

# Defina o modelo a ser utilizado
model_id = "gemini-2.0-flash" # Utilize também "gemini-2.0-flash-lite-preview-02-05" ou "gemini-2.0-pro-exp-02-05"

Carregamento e processamento de ficheiros PDF

PHP
# Carregar ficheiro PDF
invoice_pdf = client.files.upload(file="invoice.pdf", config={'display_name': 'invoice'})

# Ver em quantos tokens o ficheiro é convertido
file_size = client.models.count_tokens(model=model_id, contents=invoice_pdf)
print(f'Ficheiro: {invoice_pdf.display_name} é igual a {file_size.total_tokens} tokens')

# Exemplo de saída: Ficheiro: fatura é igual a 821 tokens

Com as etapas acima, concluímos a configuração do ambiente básico e carregamos com êxito o primeiro arquivo PDF para processamento. É importante notar que a API de ficheiros do Gemini permite armazenar até 20 GB de ficheiros por projeto, com um máximo de 2 GB por ficheiro, e que os ficheiros carregados são guardados durante 48 horas.

Prática de extração de dados estruturados em PDF

Uma caraterística poderosa do Gemini 2.0 é a capacidade de extrair dados estruturados de ficheiros PDF. A seguir, mostraremos como utilizar o modelo Pydantic do caso real com o Gemini para obter esta funcionalidade.

Definir métodos genéricos de extração de dados

Em primeiro lugar, definimos um método genérico para processar ficheiros PDF e devolver dados estruturados:

PHP
def extract_structured_data(file_path: str, model: BaseModel).
    # Carregamento de um ficheiro para a API File
    file = client.files.upload(file=file_path, config={'display_name': file_path.split('/')[-1].split('.') [0]})

    # Geração de uma resposta estruturada utilizando a API Gemini
    prompt = f "Extrair os dados estruturados do seguinte ficheiro PDF"
    response = client.models.generate_content(model=model_id,
                                             contents=[prompt, file], config={'response_mime_content')
                                             
                                                     'response_schema': model})

    O # transforma a resposta num modelo Pydantic e devolve-a
    return response.parsed

Caso 1: Extração de dados de facturas

Para a classe de faturação PDF, podemos definir o seguinte modelo para extrair informações-chave:

PHP
from pydantic import BaseModel, Field

class Item(BaseModel).
    description: str = Field(description="A descrição do item")
    quantidade: float = Field(description="The Qty of the item")
    gross_worth: float = Field(description="O valor bruto do artigo")

class Invoice(BaseModel).
    """Extrair o número da fatura, a data e todos os itens da lista com a descrição, a quantidade e o valor bruto e o valor bruto total. """"
    invoice_number: str = Field(description="O número da fatura, por exemplo, 1234567890")
    date: str = Field(description="A data da fatura, por exemplo, 2024-01-01")
    items: list[Item] = Field(description="A lista de itens com descrição, quantidade e valor bruto")
    total_gross_worth: float = Field(description="O valor bruto total da fatura")

# Extrair os dados utilizando este modelo
result = extract_structured_data("invoice.pdf", Invoice)

# Resultados de saída
print(f "Fatura extraída: {result.invoice_number} em {result.date} com valor bruto total {result.total_gross_worth}")
for item in result.items: print(f "Item: {item_gross_worth}")
    print(f "Item: {item.description} com quantidade {item.quantity} e valor bruto {item.gross_worth}")

Caso 2: Processamento de formulários com conteúdo manuscrito

Para formulários com conteúdo manuscrito, podemos definir modelos especializados de forma semelhante:

PHP
classe Form(BaseModel).
    """Extrair o número do formulário, a data de início do exercício, a data de fim do exercício e o passivo do plano no início do ano e no fim do ano. """"
    form_number: str = Field(description="O número do formulário")
    start_date: str = Field(description="Effective Date")
    beginning_of_year: float = Field(description="The plan liabilities beginning of the year")
    end_of_year: float = Field(description="The plan liabilities end of the year")

# Extrair dados
result = extract_structured_data("handwriting_form.pdf", Form)

# Resultados de saída
print(f'Número do formulário extraído: {result.form_number} com data de início {result.start_date}. \nPlano de responsabilidades início do ano {result.beginning_of_year} e fim do ano {result.end_of_year}')
# Exemplo de saída: Número de formulário extraído: CA530082 com data de início 02/05/2022.
# Passivos do plano no início do ano 40000.0 e no final do ano 55000.0

Através do exemplo acima, podemos ver que o Gemini 2.0 consegue identificar com precisão o conteúdo do texto no PDF, mesmo incluindo texto manuscrito, e convertê-lo para um formato de dados JSON estruturado, simplificando consideravelmente o processo de extração de dados.

Aplicações avançadas: fragmentação de documentos e compreensão semântica

Nos sistemas RAG (Retrieval Augmented Generation), a fragmentação de documentos é um passo fundamental para além da extração básica de texto, e o Gemini 2.0 permite-nos fazer tanto o OCR como a fragmentação semântica num único passo.

Exemplo de fragmentação semântica em PDF

Aqui está uma dica para converter PDF para Markdown e para a fragmentação semântica ao mesmo tempo:

PHP
CHUNKING_PROMPT = """OCR a seguinte página em Markdown. As tabelas devem ser formatadas como HTML.
Não coloque três pontos triplos à volta do seu resultado.
Divida o documento em secções de cerca de 250 a 1000 palavras. O nosso objetivo é
O nosso objetivo é identificar partes da página com o mesmo tema semântico.
Estes pedaços serão incorporados e utilizados num pipeline RAG.
Envolva os pedaços com as etiquetas html  .""""

O # usa este prompt para processamento
response = client.models.generate_content(
    model=model_id,
    contents=[CHUNKING_PROMPT, pdf_file]
)

conteúdo_em_cachos = response.text

Esta abordagem identifica os limites semânticos de um documento e gera partes de texto mais significativas, melhorando consideravelmente a precisão da recuperação subsequente. Em comparação com a fragmentação mecânica tradicional baseada no número de caracteres, a fragmentação semântica é mais capaz de manter a coerência e a integridade do conteúdo.

Extração de dados complexos com Pydantic

Para cenários mais complexos, podemos definir modelos Pydantic aninhados para lidar com vários níveis de dados:

PHP
class Person(BaseModel): first_name: str = Field(description="O primeiro nome da pessoa")
    first_name: str = Field(description="O primeiro nome da pessoa")
    last_name: str = Field(description="O último nome da pessoa")
    last_name: str = Field(description="The last name of the person") last_name: str = Field(description="The last name of the person")
    work_topics: list[Topic] = Field(description="Os domínios de interesse da pessoa; se não forem fornecidos, devolver uma lista vazia")

# Gerar uma resposta utilizando o modelo Pessoa
prompt = "Philipp Schmid é um engenheiro sénior de relações com programadores de IA na Google DeepMind que trabalha no Gemini, Gemma, com a missão de ajudar todos os programadores a construir e beneficiar da IA de uma forma responsável".
response = client.models.generate_content(
    model=model_id,
    contents=prompt,
    config={'response_mime_type': 'application/json', 'response_schema': Person}
)

O SDK # converte automaticamente a resposta para um modelo Pydantic
philipp: Person = response.parsed
print(f "O primeiro nome é {philipp.first_name}")

Otimização do desempenho e melhores práticas

Eis algumas práticas recomendadas para melhorar a eficiência e a precisão no processamento de documentos PDF em grande escala:

Processamento de lotes e otimização de fichas

Para a necessidade de lidar com um grande número de cenas PDF, é possível efetuar o processamento em lote para melhorar a eficiência:

PHP
async def batch_process_pdfs(file_paths, model, batch_size=10):: results = [].
    resultados = []
    for i in range(0, len(file_paths), batch_size):: batch = file_paths[i:i+batch_size): batch = file_paths[i:i
        lote = file_paths[i:i+batch_size]: resultados = [] for i in range(0, len(file_paths), batch_size).
        tarefas = [extract_structured_data(path, model) for path in batch]
        batch_results = await asyncio.gather(*tasks)
        results.extend(batch_results)
        print(f "Lote processado {i//batch_size + 1}/{(len(file_paths)+batch_size-1)//batch_size}")
    retornar resultados

Seleção de modelos e controlo de custos

A seleção da variante de modelo correta para os requisitos reais pode reduzir significativamente os custos:

  1. Gemini 2.0 FlashA melhor escolha para cenários de utilização geral, com uma excelente relação preço/desempenho
  2. Lanterna Gemini 2.0:: Oferece uma melhor relação qualidade/preço para documentos simples
  3. Gemini 2.0 ProTratamento de documentos ou cenários extremamente complexos que exigem uma elevada precisão

Segue-se uma comparação da eficiência de processamento dos diferentes modelos:

modelaçãoPáginas PDF processadas por dólar (conversão Markdown)
Gemini 2.0 FlashAprox. 6.000 páginas
Gemini 2.0 Flash LiteAprox. 12.000 páginas
Gemini 1.5 FlashAprox. 10.000 páginas
OpenAI 4-miniCerca de 450 páginas
OpenAI 4oCerca de 200 páginas
Cláusula antrópica-3.5Aprox. 100 páginas

Tratamento de erros e mecanismo de repetição

Num ambiente de produção, é fundamental implementar mecanismos robustos de tratamento de erros:

PHP
def extract_with_retry(file_path, model, max_retries=3):: for attempt in range(max_retries)
    for attempt in range(max_retries).
        try.
            return extract_structured_data(file_path, model): for attempt in range(max_retries): try.
        except Exception as e: if attempt == max_retries
            if attempt == max_retries - 1: print(f "Falha ao aceder ao ficheiro.
                print(f "Falha ao processar {caminho_do_ficheiro} após {max_retries} tentativas: {e}")
                return None
            print(f "A tentativa {tentativa+1} falhou, nova tentativa: {e}")
            time.sleep(2 ** tentativa) Estratégia de repetição exponencial #

Otimização do processamento de formulários

Para PDFs que contêm formulários complexos, as seguintes palavras-chave podem ser utilizadas para melhorar a precisão do reconhecimento de formulários:

PHP
TABLE_EXTRACTION_PROMPT = """Extrair todas as tabelas do PDF como tabelas HTML.
Preserve a estrutura exacta, incluindo células fundidas, cabeçalhos e formatação.
Cada tabela deve ser semanticamente completa e manter as relações entre as células.
Para valores numéricos, mantenha o seu formato exato, tal como apresentado no documento.""""

observações finais

Com os métodos e exemplos de código apresentados neste artigo, você já pode começar a usar o Gemini 2.0 para criar um poderoso sistema de processamento de documentos PDF. Desde a simples extração de texto até a análise de dados estruturados complexos e, em seguida, a fragmentação semântica, o Gemini 2.0 tem demonstrado excelente desempenho e uma ótima relação custo-benefício.

Embora ainda haja espaço para melhorias em áreas como o reconhecimento de caixas delimitadoras, mas à medida que a tecnologia continua a evoluir, temos razões para acreditar que o futuro do processamento de PDFs se tornará mais inteligente e eficiente. Para qualquer necessidade de processamento em grande escala de dados de documentos para indivíduos ou organizações, o Gemini 2.0 é, sem dúvida, digno de atenção e de adoção de avanços tecnológicos.

Para mais produtos, consultar

Ver mais em

ShirtAI - Inteligência penetrante O Grande Modelo do AIGC: inaugurando uma era de dupla revolução na engenharia e na ciência - Penetrating Intelligence
1:1 Restauração de Claude e GPT Site oficial - AI Cloud Native Aplicação de jogos em direto Leitor de visualização de desporto HD global (recomendado) - Blueshirt Technology
Serviço de trânsito baseado na API oficial - API GPTMeta Ajuda, alguém pode dar algumas dicas sobre como fazer perguntas no GPT? - Conhecimento
Loja digital de bens virtuais globais - Global SmarTone (Feng Ling Ge) Quão poderosa é a funcionalidade Claude airtfacts que o GPT instantaneamente não cheira bem? -BeepBeep

espaço publicitário

Testemunhe a super magia da IA em conjunto!

Abrace o seu assistente de IA e aumente a sua produtividade com apenas um clique!