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 les mises en page de documents Vous pouvez saisir des fichiers HTML ou PDF dans l'analyseur de mise en page pour identifier les éléments de contenu tels que les blocs de texte, les tableaux, les listes et les éléments structurels tels que les titres et les en-têtes. Ces éléments aident à définir l'organisation et la hiérarchie d'un document avec un contenu riche et des éléments structurels qui peuvent créer plus de contexte pour la récupération et la découverte d'informations.

  • Divisez les documents en blocs. L'analyseur de mise en page peut diviser les documents en segments 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 segments pour améliorer la pertinence et réduire la charge de calcul.

    Prendre en compte 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 :
    • Taille maximale du fichier d'entrée de 20 Mo pour tous les types de fichiers
    • 15 pages maximum par fichier PDF
  • Traitement par lot :
    • Taille maximale d'un fichier PDF : 40 Mo
    • 500 pages maximum par fichier PDF

Détection de mise en page par type de fichier

Le tableau suivant répertorie les éléments que l'analyseur de mise en page 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, 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 capturée.
PDF paragraphe, tableau, titre, en-tête, pied de page Les tableaux qui s'étendent sur plusieurs pages peuvent être divisés en deux.
DOCX (Preview) paragraphe, tableaux sur plusieurs pages, liste, titre, éléments de titre Les tables imbriquées ne sont pas acceptées.
PPTX (Preview) paragraphe, tableau, liste, titre, éléments de titre 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 (bêta) les tables des feuilles de calcul Excel, qui acceptent les valeurs INT, FLOAT et STRING ; La détection de plusieurs tables n'est pas possible. Les feuilles, lignes ou colonnes masquées peuvent également avoir un impact 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 l'analyseur de mise en page

  1. Importez 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 requête 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 Google Cloud projet.
    • 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 fragments. L'analyseur de mise en page accepte les documents PDF ou HTML bruts, ou les documents analysés qui ont été générés par l'analyseur de mise en page.
    • CHUNK_SIZE : facultatif. Taille de bloc, 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 ou non 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 de 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 le service 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 diviser plusieurs documents en une seule requête, procédez comme suit :

  1. Importez 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 requête 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 si les titres des ancêtres doivent être inclus lors de la division des documents. Les en-têtes d'ancêtres sont les parents des sous-titres dans le document d'origine. Ils peuvent fournir un extrait avec un contexte supplémentaire sur sa position dans le document d'origine. Vous pouvez inclure jusqu'à deux niveaux de titres avec un bloc.

Étape suivante