使用版面配置剖析器處理文件

版面配置剖析器會擷取文字、表格和清單等文件內容元素,並建立情境感知分塊,以便在生成式 AI 和探索應用程式中檢索資訊。

版面配置剖析器功能

  • 剖析文件版面配置。您可以將 HTML 或 PDF 檔案輸入版面配置剖析器,以便辨識文字區塊、表格、清單等內容元素,以及標題和標題等結構元素。這些元素可協助定義文件的組織和階層,並提供豐富的內容和結構元素,為資訊擷取和探索建立更多背景資訊。

  • 分割文件。Layout Parser 可將文件分割成多個區塊,保留原始文件版面配置階層的相關資訊。產生答案的 LLM 可使用區塊來改善相關性,並減少運算負載。

    在分割時考量文件版面配置,可改善語意一致性,並減少內容在擷取和 LLM 產生時的雜訊。區塊中的所有文字都來自相同的版面配置實體,例如標題、副標題或清單。

限制

限制如下:

  • 線上處理:
    • 所有檔案類型的輸入檔案大小上限為 20 MB
    • 每個 PDF 檔案最多 15 頁
  • 批次處理:
    • PDF 檔案單一檔案大小上限為 40 MB
    • 每個 PDF 檔案的頁數上限為 500 頁

依檔案類型偵測版面配置

下表列出版面配置剖析器可偵測的每個文件檔案類型元素。

檔案類型 偵測到的元素 限制
HTML 段落、表格、清單、標題、標題、頁首、頁尾 請注意,剖析作業主要仰賴 HTML 標記,因此可能無法擷取以 CSS 為基礎的格式設定。
PDF 段落、表格、標題、標題、頁首、頁尾 橫跨多個頁面的表格可能會分割為兩個表格。
DOCX (預先發布版) 段落、跨多個頁面的表格、清單、標題、標題元素 不支援巢狀資料表。
PPTX (預先發布版) 段落、表格、清單、標題、標題元素 為確實辨識標題,請在 PowerPoint 檔案中標示標題。不支援巢狀表格和隱藏的簡報。
XLSX/XLSM (預先發布版) Excel 試算表中的資料表,支援 INTFLOATSTRING 不支援多個表格偵測。隱藏的工作表、資料列或資料欄也可能會影響偵測結果。

事前準備

如要啟用版面配置剖析器,請按照下列步驟操作:

  1. 按照「建立及管理處理器」中的操作說明,建立版面配置剖析器。

    處理器類型名稱為 LAYOUT_PARSER_PROCESSOR

  2. 按照「啟用處理器」一文的操作說明,啟用版面配置剖析器。

使用版面配置剖析器傳送線上處理要求

  1. 將文件輸入版面配置剖析器,以便剖析及分割。

    請參考「傳送處理要求」中的批次處理要求操作說明。

    ProcessDocumentRequestProcessOptions.layoutConfig 中設定欄位。

    REST

    使用任何要求資料之前,請先替換以下項目:

    • LOCATION:處理器的位置,例如:
      • us - 美國
      • eu - 歐盟
    • PROJECT_ID:您的 Google Cloud 專案 ID。
    • PROCESSOR_ID:自訂處理器的 ID。
    • MIME_TYPE:版面配置剖析器支援 application/pdftext/html
    • DOCUMENT:要分割為多個區塊的內容。版面配置剖析器可接受原始 PDF 或 HTML 文件,或由版面配置剖析器輸出的剖析文件。
    • CHUNK_SIZE:選用。用於拆分文件時使用的區塊大小 (以符號為單位)。
    • INCLUDE_ANCESTOR_HEADINGS:選用。布林值。在分割文件時,是否要納入祖系標題。

    HTTP 方法和網址:

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

    JSON 要求主體:

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

    如要傳送要求,請選擇以下其中一個選項:

    curl

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    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

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    $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
    回應中會包含處理過的文件,其中含有版面配置和分塊資訊,分別是 Document.documentLayoutDocument.chunkedDocument

    Python

    詳情請參閱 Document AI Python API 參考說明文件

    如要向 Document AI 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。

    
    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
    
    

使用版面配置剖析器批次處理文件

請按照下列程序,在單一要求中剖析及分割多份文件。

  1. 將文件輸入版面配置剖析器,以便剖析及分割。

    請參考「傳送處理要求」中的批次處理要求操作說明。

    請在提出 batchProcess 要求時,在 ProcessOptions.layoutConfig 中設定欄位。

    輸入

    以下 JSON 範例會設定 ProcessOptions.layoutConfig

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

    更改下列內容:

    • CHUNK_SIZE:在分割文件時使用的最大區塊大小 (以符記數量為單位)。
    • INCLUDE_ANCESTOR_HEADINGS_BOOLEAN:是否要在分割文件時納入祖系標題。祖系標題是原始文件中子標題的父項。這些資訊可為某個區塊提供額外資訊,說明該區塊在原始文件中的確切位置。每個區塊最多可包含兩個層級的標題。

後續步驟