Traiter des documents avec l'analyseur de mise en page

L'analyseur de mise en page extrait des éléments de contenu de documents tels que du texte, des tableaux et des listes, et crée des segments contextuels qui facilitent la récupération d'informations dans les applications d'IA générative et de découverte.

Fonctionnalités de l'analyseur de mise en page

  • Analyser la mise en page des documents Vous pouvez saisir des fichiers HTML ou PDF dans Layout Parser pour identifier des éléments de contenu tels que des blocs de texte, des tableaux, des listes et des éléments structurels tels que des titres et des en-têtes. Ces éléments permettent de définir l'organisation et la hiérarchie d'un document avec du contenu enrichi et des éléments structurels qui peuvent créer plus de contexte pour la récupération et la découverte d'informations.

  • Découpez les documents en blocs. Layout Parser peut diviser les documents en blocs qui conservent des informations contextuelles sur la hiérarchie de mise en page du document d'origine. Les LLM générant des réponses peuvent utiliser des blocs pour améliorer la pertinence et réduire la charge de calcul.

    La prise en compte de la mise en page d'un document lors du découpage améliore la cohérence sémantique et réduit le bruit dans le contenu lorsqu'il est utilisé pour la récupération et la génération de LLM. Tout le texte d'un bloc provient de la même entité de mise en page, comme un titre, un sous-titre ou une liste.

Limites

Les limites suivantes s'appliquent :

  • Traitement en ligne :
    • La taille du fichier d'entrée ne doit pas dépasser 20 Mo, quel que soit le type de fichier.
    • 15 pages maximum par fichier PDF
  • Traitement par lot :
    • Taille maximale de 40 Mo par fichier PDF
    • 500 pages maximum par fichier PDF

Détection de la mise en page par type de fichier

Le tableau suivant liste les éléments que Layout Parser peut détecter par type de fichier de document.

Type de fichier Éléments détectés Limites
HTML paragraphe, tableau, liste, titre, en-tête, en-tête de page, pied de page Sachez que l'analyse repose fortement sur les balises HTML. Il est donc possible que la mise en forme basée sur CSS ne soit pas prise en compte.
PDF paragraphe, tableau, titre, en-tête, en-tête de page, pied de page Les tableaux qui s'étendent sur plusieurs pages peuvent être divisés en deux.
DOCX (Preview) paragraphes, tableaux sur plusieurs pages, listes, titres, éléments d'en-tête Les tableaux imbriqués ne sont pas acceptés.
PPTX (Aperçu) éléments de paragraphe, de tableau, de liste, de titre et d'en-tête Pour que les titres soient identifiés avec précision, ils doivent être marqués comme tels dans le fichier PowerPoint. Les tableaux imbriqués et les diapositives masquées ne sont pas acceptés.
XLSX/XLSM (Aperçu) les tableaux dans les feuilles de calcul Excel, avec les valeurs INT, FLOAT et STRING. La détection de plusieurs tableaux n'est pas prise en charge. Les feuilles, lignes ou colonnes masquées peuvent également avoir une incidence sur la détection.

Avant de commencer

Pour activer l'analyseur de mise en page, procédez comme suit :

  1. Créez un analyseur de mise en page en suivant les instructions de la section Créer et gérer des processeurs.

    Le nom du type de processeur est LAYOUT_PARSER_PROCESSOR.

  2. Activez l'analyseur de mise en page en suivant les instructions de la section Activer un processeur.

Envoyer une requête de traitement en ligne avec Layout Parser

  1. Saisissez des documents dans l'analyseur de mise en page pour les analyser et les fragmenter.

    Suivez les instructions pour les requêtes de traitement par lot dans Envoyer une demande de traitement.

    Configurez les champs dans ProcessOptions.layoutConfig dans ProcessDocumentRequest.

    REST

    Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

    • LOCATION : emplacement de votre processeur, par exemple :
      • us : États-Unis
      • eu : Union européenne
    • PROJECT_ID : ID de votre projet Google Cloud .
    • PROCESSOR_ID : ID de votre processeur personnalisé.
    • MIME_TYPE : l'analyseur de mise en page est compatible avec application/pdf et text/html.
    • DOCUMENT : contenu à diviser en blocs. Layout Parser accepte les documents PDF ou HTML bruts, ou les documents analysés qui ont été générés par Layout Parser.
    • CHUNK_SIZE : facultatif. Taille des fragments, en jetons, à utiliser lors de la division des documents.
    • INCLUDE_ANCESTOR_HEADINGS : facultatif. Valeur booléenne. Indique si les en-têtes d'ancêtres doivent être inclus lors de la division des documents.

    Méthode HTTP et URL :

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

    Corps JSON de la requête :

    // 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",
          }
        }
      }
    }
    

    Pour envoyer votre requête, choisissez l'une des options suivantes :

    curl

    Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

    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

    Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

    $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 réponse inclut le document traité avec des informations sur la mise en page et le découpage sous la forme Document.documentLayout et Document.chunkedDocument.

    Python

    Pour en savoir plus, consultez la documentation de référence de l'API Document AI Python.

    Pour vous authentifier auprès de Document AI, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement 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
    
    

Traiter des documents par lot avec l'analyseur de mise en page

Pour analyser et segmenter plusieurs documents dans une même requête, procédez comme suit.

  1. Saisissez des documents dans l'analyseur de mise en page pour les analyser et les fragmenter.

    Suivez les instructions pour les requêtes de traitement par lot dans Envoyer une demande de traitement.

    Configurez les champs dans ProcessOptions.layoutConfig lorsque vous envoyez une requête batchProcess.

    Entrée

    L'exemple JSON suivant configure ProcessOptions.layoutConfig.

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

    Remplacez les éléments suivants :

    • CHUNK_SIZE : taille maximale des blocs, en nombre de jetons, à utiliser lors de la division des documents.
    • INCLUDE_ANCESTOR_HEADINGS_BOOLEAN : indique s'il faut inclure les titres des ancêtres lors de la division des documents. Les en-têtes ancêtres sont les parents des sous-titres dans le document d'origine. Ils peuvent fournir un bloc avec un contexte supplémentaire sur sa position dans le document d'origine. Un bloc peut inclure jusqu'à deux niveaux de titres.

Étapes suivantes