Processe documentos com o analisador de esquemas

O Layout Parser extrai elementos de conteúdo de documentos, como texto, tabelas e listas, e cria blocos sensíveis ao contexto que facilitam a obtenção de informações em aplicações de IA generativa e de descoberta.

Funcionalidades do analisador de esquemas

  • Analise esquemas de documentos. Pode introduzir ficheiros HTML ou PDF no analisador de esquemas para identificar elementos de conteúdo, como blocos de texto, tabelas, listas e elementos estruturais, como títulos e cabeçalhos. Estes elementos ajudam a definir a organização e a hierarquia de um documento com conteúdo avançado e elementos estruturais que podem criar mais contexto para a obtenção e a descoberta de informações.

  • Divida os documentos em partes. O Layout Parser pode dividir os documentos em partes que retêm informações contextuais sobre a hierarquia de esquemas do documento original. Os MDIs de geração de respostas podem usar blocos para melhorar a relevância e diminuir a carga computacional.

    Ter em conta o esquema de um documento durante a divisão em partes melhora a coerência semântica e reduz o ruído no conteúdo quando é usado para obtenção e geração de LLMs. Todo o texto num fragmento provém da mesma entidade de esquema, como um cabeçalho, um subtítulo ou uma lista.

Limitações

Aplicam-se as seguintes limitações:

  • Processamento online:
    • Tamanho máximo do ficheiro de entrada de 20 MB para todos os tipos de ficheiros
    • Máximo de 15 páginas por ficheiro PDF
  • Processamento em lote:
    • Tamanho máximo de ficheiro único de 1 GB para ficheiros PDF
    • Máximo de 500 páginas por ficheiro PDF

Deteção de esquemas por tipo de ficheiro

A tabela seguinte apresenta os elementos que o analisador de esquemas pode detetar por tipo de ficheiro de documento.

Tipo de ficheiro Tipo MIME Elementos detetados Limitações
HTML text/html parágrafo, tabela, lista, título, cabeçalho, cabeçalho da página, rodapé da página Tenha em atenção que a análise depende muito das etiquetas HTML, pelo que a formatação baseada em CSS pode não ser capturada.
PDF application/pdf parágrafo, tabela, título, cabeçalho, cabeçalho da página, rodapé da página As tabelas que abrangem várias páginas podem ser divididas em duas tabelas.
DOCX (Pré-visualizar) application/vnd.openxmlformats-officedocument.wordprocessingml.document Parágrafos, tabelas em várias páginas, listas, títulos e elementos de cabeçalho As tabelas aninhadas não são suportadas.
PPTX (pré-visualização) application/vnd.openxmlformats-officedocument.presentationml.presentation elementos de parágrafo, tabela, lista, título e cabeçalho Para que os títulos sejam identificados com precisão, devem ser marcados como tal no ficheiro do PowerPoint. Não são suportadas tabelas aninhadas nem diapositivos ocultos.
XLSX (pré-visualização) application/vnd.openxmlformats-officedocument.spreadsheetml.sheet tabelas em folhas de cálculo do Excel, compatíveis com os valores INT, FLOAT e STRING A deteção de várias tabelas não é suportada. As folhas, as linhas ou as colunas ocultas também podem afetar a deteção.
XLSM (Pré-visualização) application/vnd.ms-excel.sheet.macroenabled.12 Folha de cálculo com macros ativadas, que suporta os valores INT, FLOAT e STRING A deteção de várias tabelas não é suportada. As folhas, as linhas ou as colunas ocultas também podem afetar a deteção.

Antes de começar

Para ativar o analisador de esquemas, siga estes passos:

  1. Crie um analisador de esquemas seguindo as instruções em Criar e gerir processadores.

    O nome do tipo de processador é LAYOUT_PARSER_PROCESSOR.

  2. Ative o analisador de esquemas seguindo as instruções em Ative um processador.

Envie um pedido de processamento online com o analisador de esquemas

  1. Introduza documentos no Layout Parser para os analisar e dividir em partes.

    Siga as instruções para pedidos de processamento em lote em Envie um pedido de processamento.

    Configure campos em ProcessOptions.layoutConfig em ProcessDocumentRequest.

    REST

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • LOCATION: a localização do seu processador, por exemplo:
      • us – Estados Unidos
      • eu - União Europeia
    • PROJECT_ID: o ID do seu Google Cloud projeto.
    • PROCESSOR_ID: o ID do seu processador personalizado.
    • MIME_TYPE: o analisador de esquemas suporta application/pdf e text/html.
    • DOCUMENT: o conteúdo a dividir em partes. O Layout Parser aceita documentos PDF ou HTML não processados, ou documentos processados que foram gerados pelo Layout Parser.
    • CHUNK_SIZE: opcional. O tamanho do fragmento, em tokens, a usar ao dividir documentos.
    • INCLUDE_ANCESTOR_HEADINGS: opcional. Booleano. Se deve ou não incluir títulos antecessores ao dividir documentos.

    Método HTTP e URL:

    POST https://LOCATION-documentai.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/processors/PROCESSOR_ID:process

    Corpo JSON do pedido:

    // Sample for inputting raw documents such as PDF or HTML
    {
      "rawDocument": {
        "mimeType": "MIME_TYPE",
        "content": "DOCUMENT"
      },
      "processOptions": {
        "layoutConfig": {
          "chunkingConfig": {
            "chunkSize": "CHUNK_SIZE",
            "includeAncestorHeadings": "INCLUDE_ANCESTOR_HEADINGS",
          }
        }
      }
    }
    

    Para enviar o seu pedido, escolha uma destas opções:

    curl

    Guarde o corpo do pedido num ficheiro com o nome request.json, e execute o seguinte comando:

    curl -X POST \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://LOCATION-documentai.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/processors/PROCESSOR_ID:process"

    PowerShell

    Guarde o corpo do pedido num ficheiro com o nome request.json, e execute o seguinte comando:

    $headers = @{  }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://LOCATION-documentai.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/processors/PROCESSOR_ID:process" | Select-Object -Expand Content
    A resposta inclui o documento processado com informações de esquema e divisão em partes como Document.documentLayout e Document.chunkedDocument.

    Python

    Para mais informações, consulte a documentação de referência da API Python Document AI.

    Para se autenticar no Document AI, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

    
    from typing import Optional, Sequence
    
    from google.api_core.client_options import ClientOptions
    from google.cloud import documentai
    
    # TODO(developer): Uncomment these variables before running the sample.
    # project_id = "YOUR_PROJECT_ID"
    # location = "YOUR_PROCESSOR_LOCATION" # Format is "us" or "eu"
    # processor_id = "YOUR_PROCESSOR_ID" # Create processor before running sample
    # processor_version = "rc" # Refer to https://cloud.google.com/document-ai/docs/manage-processor-versions for more information
    # file_path = "/path/to/local/pdf"
    # mime_type = "application/pdf" # Refer to https://cloud.google.com/document-ai/docs/file-types for supported file types
    
    
    def process_document_layout_sample(
        project_id: str,
        location: str,
        processor_id: str,
        processor_version: str,
        file_path: str,
        mime_type: str,
    ) -> documentai.Document:
        process_options = documentai.ProcessOptions(
            layout_config=documentai.ProcessOptions.LayoutConfig(
                chunking_config=documentai.ProcessOptions.LayoutConfig.ChunkingConfig(
                    chunk_size=1000,
                    include_ancestor_headings=True,
                )
            )
        )
    
        document = process_document(
            project_id,
            location,
            processor_id,
            processor_version,
            file_path,
            mime_type,
            process_options=process_options,
        )
    
        print("Document Layout Blocks")
        for block in document.document_layout.blocks:
            print(block)
    
        print("Document Chunks")
        for chunk in document.chunked_document.chunks:
            print(chunk)
    
    
    
    def process_document(
        project_id: str,
        location: str,
        processor_id: str,
        processor_version: str,
        file_path: str,
        mime_type: str,
        process_options: Optional[documentai.ProcessOptions] = None,
    ) -> documentai.Document:
        # You must set the `api_endpoint` if you use a location other than "us".
        client = documentai.DocumentProcessorServiceClient(
            client_options=ClientOptions(
                api_endpoint=f"{location}-documentai.googleapis.com"
            )
        )
    
        # The full resource name of the processor version, e.g.:
        # `projects/{project_id}/locations/{location}/processors/{processor_id}/processorVersions/{processor_version_id}`
        # You must create a processor before running this sample.
        name = client.processor_version_path(
            project_id, location, processor_id, processor_version
        )
    
        # Read the file into memory
        with open(file_path, "rb") as image:
            image_content = image.read()
    
        # Configure the process request
        request = documentai.ProcessRequest(
            name=name,
            raw_document=documentai.RawDocument(content=image_content, mime_type=mime_type),
            # Only supported for Document OCR processor
            process_options=process_options,
        )
    
        result = client.process_document(request=request)
    
        # For a full list of `Document` object attributes, reference this page:
        # https://cloud.google.com/document-ai/docs/reference/rest/v1/Document
        return result.document
    
    

Processe documentos em lote com o analisador de esquemas

Use o procedimento seguinte para analisar e dividir vários documentos num único pedido.

  1. Introduza documentos no Layout Parser para os analisar e dividir em partes.

    Siga as instruções para pedidos de processamento em lote em Envie um pedido de processamento.

    Configure campos em ProcessOptions.layoutConfig quando fizer um pedido batchProcess.

    Entrada

    O exemplo JSON seguinte configura ProcessOptions.layoutConfig.

    "processOptions": {
      "layoutConfig": {
        "chunkingConfig": {
          "chunkSize": "CHUNK_SIZE",
          "includeAncestorHeadings": "INCLUDE_ANCESTOR_HEADINGS_BOOLEAN"
        }
      }
    }
    

    Substitua o seguinte:

    • CHUNK_SIZE: o tamanho máximo do fragmento, em número de tokens, a usar ao dividir documentos.
    • INCLUDE_ANCESTOR_HEADINGS_BOOLEAN: se deve incluir os títulos antecessores ao dividir documentos. Os títulos antecessores são os pais dos subtítulos no documento original. Podem fornecer um fragmento com contexto adicional acerca da respetiva posição no documento original. Podem ser incluídos até dois níveis de títulos com um fragmento.

O que se segue?