Procesar documentos con Layout Parser

Layout Parser extrae elementos de contenido de documentos, como texto, tablas y listas, y crea fragmentos contextualizados que facilitan la recuperación de información en aplicaciones de IA generativa y de descubrimiento.

Funciones de Layout Parser

  • Analizar diseños de documentos. Puedes introducir archivos HTML o PDF en Layout Parser para identificar elementos de contenido, como bloques de texto, tablas, listas y elementos estructurales, como títulos y encabezados. Estos elementos ayudan a definir la organización y la jerarquía de un documento con contenido enriquecido y elementos estructurales que pueden crear más contexto para la recuperación y el descubrimiento de información.

  • Fracciona los documentos. Layout Parser puede dividir los documentos en fragmentos que conservan información contextual sobre la jerarquía de diseño del documento original. Los LLMs que generan respuestas pueden usar fragmentos para mejorar la relevancia y reducir la carga computacional.

    Tener en cuenta el diseño de un documento durante la fragmentación mejora la coherencia semántica y reduce el ruido en el contenido cuando se usa para la recuperación y la generación de LLMs. Todo el texto de un fragmento procede de la misma entidad de diseño, como un encabezado, un subtítulo o una lista.

Limitaciones

Se aplican las siguientes limitaciones:

  • Procesamiento online:
    • El tamaño máximo del archivo de entrada es de 20 MB para todos los tipos de archivo.
    • Máximo de 15 páginas por archivo PDF
  • Procesamiento por lotes:
    • Tamaño máximo de un único archivo PDF de 1 GB
    • Máximo de 500 páginas por archivo PDF

Detección de diseño por tipo de archivo

En la siguiente tabla se enumeran los elementos que Layout Parser puede detectar por tipo de archivo de documento.

Tipo de archivo Tipo MIME Elementos detectados Limitaciones
HTML text/html párrafo, tabla, lista, título, encabezado, encabezado de página, pie de página Ten en cuenta que el análisis depende en gran medida de las etiquetas HTML, por lo que es posible que no se capture el formato basado en CSS.
PDF application/pdf párrafo, tabla, título, encabezado, encabezado de página, pie de página Las tablas que abarcan varias páginas pueden dividirse en dos tablas.
DOCX (vista previa) application/vnd.openxmlformats-officedocument.wordprocessingml.document párrafos, tablas en varias páginas, listas, títulos y elementos de encabezado No se admiten tablas anidadas.
PPTX (vista previa) application/vnd.openxmlformats-officedocument.presentationml.presentation Elementos de párrafo, tabla, lista, título y encabezado Para que los encabezados se identifiquen correctamente, deben marcarse como tales en el archivo de PowerPoint. No se admiten las tablas anidadas ni las diapositivas ocultas.
XLSX (Vista previa) application/vnd.openxmlformats-officedocument.spreadsheetml.sheet Tablas de hojas de cálculo de Excel que admiten los valores INT, FLOAT y STRING No se admite la detección de varias tablas. Las hojas, filas o columnas ocultas también pueden afectar a la detección.
XLSM (vista previa) application/vnd.ms-excel.sheet.macroenabled.12 hoja de cálculo con macros habilitadas que admite los valores INT, FLOAT y STRING No se admite la detección de varias tablas. Las hojas, filas o columnas ocultas también pueden afectar a la detección.

Antes de empezar

Para activar el analizador de diseño, sigue estos pasos:

  1. Crea un analizador de diseño siguiendo las instrucciones de Crear y gestionar procesadores.

    El nombre del tipo de procesador es LAYOUT_PARSER_PROCESSOR.

  2. Habilita Layout Parser siguiendo las instrucciones de Habilitar un procesador.

Enviar una solicitud de proceso online con Layout Parser

  1. Introduce documentos en Layout Parser para analizarlos y dividirlos en fragmentos.

    Sigue las instrucciones para enviar solicitudes de procesamiento en lote que se indican en la sección Enviar una solicitud de procesamiento.

    Configura los campos en ProcessOptions.layoutConfig en ProcessDocumentRequest.

    REST

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • LOCATION: la ubicación de tu procesador, por ejemplo:
      • us - Estados Unidos
      • eu - Unión Europea
    • PROJECT_ID: tu ID de proyecto Google Cloud .
    • PROCESSOR_ID: el ID de tu procesador personalizado.
    • MIME_TYPE: Layout Parser admite application/pdf y text/html.
    • DOCUMENT: el contenido que se va a dividir en fragmentos. Layout Parser acepta documentos PDF o HTML sin procesar, o documentos analizados que haya generado Layout Parser.
    • CHUNK_SIZE: opcional. Tamaño del fragmento, en tokens, que se usará al dividir los documentos.
    • INCLUDE_ANCESTOR_HEADINGS: opcional. Booleano. Indica si se deben incluir los encabezados de los elementos superiores al dividir documentos.

    Método HTTP y URL:

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

    Cuerpo JSON de la solicitud:

    // 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 tu solicitud, elige una de estas opciones:

    curl

    Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente 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

    Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente 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
    La respuesta incluye el documento procesado con información sobre el diseño y la segmentación como Document.documentLayout y Document.chunkedDocument.

    Python

    Para obtener más información, consulta la documentación de referencia de la API Python de Document AI.

    Para autenticarte en Document AI, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo 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
    
    

Procesar documentos por lotes con Layout Parser

Sigue este procedimiento para analizar y dividir en fragmentos varios documentos en una sola solicitud.

  1. Introduce documentos en Layout Parser para analizarlos y dividirlos en fragmentos.

    Sigue las instrucciones para enviar solicitudes de procesamiento en lote que se indican en la sección Enviar una solicitud de procesamiento.

    Configura los campos de ProcessOptions.layoutConfig al enviar una solicitud batchProcess.

    Entrada

    En el siguiente ejemplo de JSON se configura ProcessOptions.layoutConfig.

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

    Haz los cambios siguientes:

    • CHUNK_SIZE: tamaño máximo del fragmento, en número de tokens, que se usará al dividir documentos.
    • INCLUDE_ANCESTOR_HEADINGS_BOOLEAN: Indica si se deben incluir los encabezados de los elementos antecesores al dividir documentos. Los encabezados principales son los padres de los subencabezados del documento original. Pueden proporcionar un fragmento con contexto adicional sobre su posición en el documento original. Se pueden incluir hasta dos niveles de encabezados en un fragmento.

Siguientes pasos