Document AI Kullanan Özel İşlemciler (Python)

1. Giriş

Bu codelab'de, özel belgeleri Python ile sınıflandırmak ve ayrıştırmak için Document AI Uzman İşlemcilerini nasıl kullanacağınızı öğreneceksiniz. Sınıflandırma ve bölme için faturalar, makbuzlar ve elektrik/su/doğalgaz/internet ekstrelerini içeren örnek bir pdf dosyası kullanacağız. Ardından, ayrıştırma ve varlık çıkarma için örnek olarak bir fatura kullanacağız.

Bu prosedür ve örnek kod, Document AI tarafından desteklenen tüm özel belgelerde çalışır.

Ön koşullar

Bu codelab'de, diğer Document AI Codelab'lerinde sunulan içerikler temel alınır.

Devam etmeden önce aşağıdaki Codelab'leri tamamlamanız önerilir:

Neler öğreneceksiniz?

  • Özel dokümanlar için bölme noktalarını sınıflandırma ve tanımlama.
  • Özel işlemciler kullanarak şematik varlıkları ayıklama.

Gerekenler

  • Bir Google Cloud projesi
  • Chrome veya Firefox gibi bir tarayıcı
  • Python 3 Bilgisi

2. Kurulum

Bu codelab'de, Tanıtım Codelab'de listelenen Document AI Kurulum adımlarını tamamladığınız varsayılır.

Devam etmeden önce lütfen aşağıdaki adımları tamamlayın:

Ayrıca, Python için popüler bir Veri Analizi kitaplığı olan Pandas'ı yüklemeniz gerekir.

pip3 install --upgrade pandas

3. Özel işlemciler oluşturma

Öncelikle bu eğitim için kullanacağınız işlemcilerin örneklerini oluşturmanız gerekir.

  1. Konsolda Document AI Platformuna Genel Bakış'a gidin
  2. Create Processor'ı (İşlemci Oluştur) tıklayın, Specialized'e (Uzmanlaşmış) gidin ve Procurement Doc Splitter'ı (Procurement Doc Splitter) seçin.
  3. Dosyaya "codelab-procurement-splitter" adını verin. (Veya hatırlayacağınız başka bir şey) tıklayın ve listeden en yakın bölgeyi seçin.
  4. İşleyicinizi oluşturmak için Oluştur'u tıklayın.
  5. İşleyen kimliğini kopyalayın. Bunu daha sonra kodunuzda kullanmanız gerekir.
  6. 2-6 arasındaki adımları Fatura Ayrıştırıcı ile ("codelab-invoice-parser" olarak adlandırabilirsiniz) tekrar edin.

Console'da işlemciyi test edin

Bir belge yükleyerek konsolda Fatura Ayrıştırıcı'yı test edebilirsiniz.

Belge Yükle'yi tıklayın ve ayrıştırılacak bir fatura seçin. Kullanabileceğiniz fatura yoksa bu örnek faturayı indirip kullanabilirsiniz.

google_invoice.png

Çıkışınız aşağıdaki gibi görünmelidir:

InvoiceParser.png

4. Örnek dokümanları indirin

Bu laboratuvarda kullanabileceğiniz birkaç örnek dokümanımız var.

PDF'leri aşağıdaki bağlantıları kullanarak indirebilirsiniz. Daha sonra bunları Cloud Shell örneğine yükleyin.

Dilerseniz bunları gsutil kullanarak herkese açık Cloud Storage paketimizden indirebilirsiniz.

gsutil cp gs://cloud-samples-data/documentai/codelabs/specialized-processors/procurement_multi_document.pdf .

gsutil cp gs://cloud-samples-data/documentai/codelabs/specialized-processors/google_invoice.pdf .

5. Sınıflandır ve belgeleri böl

Bu adımda, çok sayfalı bir belgenin mantıksal bölünme noktalarını sınıflandırmak ve tespit etmek için online işlemci API'sini kullanacaksınız.

Birden fazla dosya göndermek istiyorsanız veya dosya boyutu online işleme maksimum sayfa sayısını aşıyorsa da toplu işlem API'sini kullanabilirsiniz. Bunu nasıl yapacağınızı Document AI OCR Codelab'de inceleyebilirsiniz.

API isteğinde bulunmak için gereken kod, İşleyen Kimliğinin dışında genel bir işleyen için de aynıdır.

Satın Alma Ayırıcı/Sınıflandırıcı

classification.py adında bir dosya oluşturun ve aşağıdaki kodu kullanın.

PROCUREMENT_SPLITTER_ID değerini daha önce oluşturduğunuz Tedarik Bölücü İşlemci kimliğiyle değiştirin. YOUR_PROJECT_ID ve YOUR_PROJECT_LOCATION yerine sırasıyla Cloud proje kimliğinizi ve işleyen konumunu girin.

classification.py

import pandas as pd
from google.cloud import documentai_v1 as documentai


def online_process(
    project_id: str,
    location: str,
    processor_id: str,
    file_path: str,
    mime_type: str,
) -> documentai.Document:
    """
    Processes a document using the Document AI Online Processing API.
    """

    opts = {"api_endpoint": f"{location}-documentai.googleapis.com"}

    # Instantiates a client
    documentai_client = documentai.DocumentProcessorServiceClient(client_options=opts)

    # The full resource name of the processor, e.g.:
    # projects/project-id/locations/location/processor/processor-id
    # You must create new processors in the Cloud Console first
    resource_name = documentai_client.processor_path(project_id, location, processor_id)

    # Read the file into memory
    with open(file_path, "rb") as file:
        file_content = file.read()

    # Load Binary Data into Document AI RawDocument Object
    raw_document = documentai.RawDocument(content=file_content, mime_type=mime_type)

    # Configure the process request
    request = documentai.ProcessRequest(name=resource_name, raw_document=raw_document)

    # Use the Document AI client to process the sample form
    result = documentai_client.process_document(request=request)

    return result.document


PROJECT_ID = "YOUR_PROJECT_ID"
LOCATION = "YOUR_PROJECT_LOCATION"  # Format is 'us' or 'eu'
PROCESSOR_ID = "PROCUREMENT_SPLITTER_ID"  # Create processor in Cloud Console

# The local file in your current working directory
FILE_PATH = "procurement_multi_document.pdf"
# Refer to https://cloud.google.com/document-ai/docs/processors-list
# for supported file types
MIME_TYPE = "application/pdf"

document = online_process(
    project_id=PROJECT_ID,
    location=LOCATION,
    processor_id=PROCESSOR_ID,
    file_path=FILE_PATH,
    mime_type=MIME_TYPE,
)

print("Document processing complete.")

types = []
confidence = []
pages = []

# Each Document.entity is a classification
for entity in document.entities:
    classification = entity.type_
    types.append(classification)
    confidence.append(f"{entity.confidence:.0%}")

    # entity.page_ref contains the pages that match the classification
    pages_list = []
    for page_ref in entity.page_anchor.page_refs:
        pages_list.append(page_ref.page)
    pages.append(pages_list)

# Create a Pandas Dataframe to print the values in tabular format.
df = pd.DataFrame({"Classification": types, "Confidence": confidence, "Pages": pages})

print(df)

Çıkışınız aşağıdaki gibi görünecektir:

$ python3 classification.py
Document processing complete.
         Classification Confidence Pages
0     invoice_statement       100%   [0]
1     receipt_statement        98%   [1]
2                 other        81%   [2]
3     utility_statement       100%   [3]
4  restaurant_statement       100%   [4]

Procurement Ayırıcı/Sınıflandırıcı'nın 0-1 ve 3-4 sayfalarındaki belge türlerini doğru şekilde tanımladığını unutmayın.

2. Sayfa, genel bir tıbbi alım formu içerdiğinden sınıflandırıcı tarafından doğru şekilde other olarak tanımladı.

6. Varlıkları çıkarma

Artık güven puanları, özellikler ve normalleştirilmiş değerler dahil olmak üzere şematik öğeleri dosyalardan ayıklayabilirsiniz.

API isteğinde bulunmak için kullanılacak kod, önceki adımla aynıdır ve online veya toplu isteklerle yapılabilir.

Tüzel kişilerin aşağıdaki bilgilerine erişiriz:

  • Tüzel Kişi Türü
    • (örn. invoice_date, receiver_name, total_amount)
  • Ham Değerler
    • Orijinal doküman dosyasında sunulan veri değerleri.
  • Normalleştirilmiş Değerler
    • Geçerliyse, normalleştirilmiş ve standart biçimdeki veri değerleri.
    • Kurumsal Bilgi Grafiği'nden de zenginleştirme içerebilir
  • Güven Değerleri
    • Ne kadar "emin" model, değerlerin doğru olmasıdır.

line_item gibi bazı varlık türleri, line_item/unit_price ve line_item/description gibi iç içe yerleştirilmiş varlıklar olan özellikleri de içerebilir.

Bu örnekte, daha kolay görüntülenmesi için iç içe yerleştirilmiş yapı düzelmektedir.

Fatura Ayrıştırıcı

extraction.py adında bir dosya oluşturun ve aşağıdaki kodu kullanın.

INVOICE_PARSER_ID yerine daha önce oluşturduğunuz Fatura Ayrıştırıcı İşleyici'nin kimliğini yazın ve google_invoice.pdf dosyasını kullanın.

extraction.py

import pandas as pd
from google.cloud import documentai_v1 as documentai


def online_process(
    project_id: str,
    location: str,
    processor_id: str,
    file_path: str,
    mime_type: str,
) -> documentai.Document:
    """
    Processes a document using the Document AI Online Processing API.
    """

    opts = {"api_endpoint": f"{location}-documentai.googleapis.com"}

    # Instantiates a client
    documentai_client = documentai.DocumentProcessorServiceClient(client_options=opts)

    # The full resource name of the processor, e.g.:
    # projects/project-id/locations/location/processor/processor-id
    # You must create new processors in the Cloud Console first
    resource_name = documentai_client.processor_path(project_id, location, processor_id)

    # Read the file into memory
    with open(file_path, "rb") as file:
        file_content = file.read()

    # Load Binary Data into Document AI RawDocument Object
    raw_document = documentai.RawDocument(content=file_content, mime_type=mime_type)

    # Configure the process request
    request = documentai.ProcessRequest(name=resource_name, raw_document=raw_document)

    # Use the Document AI client to process the sample form
    result = documentai_client.process_document(request=request)

    return result.document


PROJECT_ID = "YOUR_PROJECT_ID"
LOCATION = "YOUR_PROJECT_LOCATION"  # Format is 'us' or 'eu'
PROCESSOR_ID = "INVOICE_PARSER_ID"  # Create processor in Cloud Console

# The local file in your current working directory
FILE_PATH = "google_invoice.pdf"
# Refer to https://cloud.google.com/document-ai/docs/processors-list
# for supported file types
MIME_TYPE = "application/pdf"

document = online_process(
    project_id=PROJECT_ID,
    location=LOCATION,
    processor_id=PROCESSOR_ID,
    file_path=FILE_PATH,
    mime_type=MIME_TYPE,
)

types = []
raw_values = []
normalized_values = []
confidence = []

# Grab each key/value pair and their corresponding confidence scores.
for entity in document.entities:
    types.append(entity.type_)
    raw_values.append(entity.mention_text)
    normalized_values.append(entity.normalized_value.text)
    confidence.append(f"{entity.confidence:.0%}")

    # Get Properties (Sub-Entities) with confidence scores
    for prop in entity.properties:
        types.append(prop.type_)
        raw_values.append(prop.mention_text)
        normalized_values.append(prop.normalized_value.text)
        confidence.append(f"{prop.confidence:.0%}")

# Create a Pandas Dataframe to print the values in tabular format.
df = pd.DataFrame(
    {
        "Type": types,
        "Raw Value": raw_values,
        "Normalized Value": normalized_values,
        "Confidence": confidence,
    }
)

print(df)

Çıkışınız aşağıdaki gibi görünecektir:

$ python3 extraction.py
                     Type                                         Raw Value Normalized Value Confidence
0                     vat                                         $1,767.97                        100%
1          vat/tax_amount                                         $1,767.97      1767.97 USD         0%
2            invoice_date                                      Sep 24, 2019       2019-09-24        99%
3                due_date                                      Sep 30, 2019       2019-09-30        99%
4            total_amount                                         19,647.68         19647.68        97%
5        total_tax_amount                                         $1,767.97      1767.97 USD        92%
6              net_amount                                         22,379.39         22379.39        91%
7           receiver_name                                       Jane Smith,                         83%
8              invoice_id                                         23413561D                         67%
9        receiver_address  1600 Amphitheatre Pkway\nMountain View, CA 94043                         66%
10         freight_amount                                           $199.99       199.99 USD        56%
11               currency                                                 $              USD        53%
12          supplier_name                                        John Smith                         19%
13         purchase_order                                         23413561D                          1%
14        receiver_tax_id                                         23413561D                          0%
15          supplier_iban                                         23413561D                          0%
16              line_item                   9.99 12 12 ft HDMI cable 119.88                        100%
17   line_item/unit_price                                              9.99             9.99        90%
18     line_item/quantity                                                12               12        77%
19  line_item/description                                  12 ft HDMI cable                         39%
20       line_item/amount                                            119.88           119.88        92%
21              line_item           12 399.99 27" Computer Monitor 4,799.88                        100%
22     line_item/quantity                                                12               12        80%
23   line_item/unit_price                                            399.99           399.99        91%
24  line_item/description                              27" Computer Monitor                         15%
25       line_item/amount                                          4,799.88          4799.88        94%
26              line_item                Ergonomic Keyboard 12 59.99 719.88                        100%
27  line_item/description                                Ergonomic Keyboard                         32%
28     line_item/quantity                                                12               12        76%
29   line_item/unit_price                                             59.99            59.99        92%
30       line_item/amount                                            719.88           719.88        94%
31              line_item                     Optical mouse 12 19.99 239.88                        100%
32  line_item/description                                     Optical mouse                         26%
33     line_item/quantity                                                12               12        78%
34   line_item/unit_price                                             19.99            19.99        91%
35       line_item/amount                                            239.88           239.88        94%
36              line_item                      Laptop 12 1,299.99 15,599.88                        100%
37  line_item/description                                            Laptop                         83%
38     line_item/quantity                                                12               12        76%
39   line_item/unit_price                                          1,299.99          1299.99        90%
40       line_item/amount                                         15,599.88         15599.88        94%
41              line_item              Misc processing fees 899.99 899.99 1                        100%
42  line_item/description                              Misc processing fees                         22%
43   line_item/unit_price                                            899.99           899.99        91%
44       line_item/amount                                            899.99           899.99        94%
45     line_item/quantity                                                 1                1        63%

7. İsteğe bağlı: Diğer özel işlemcileri deneme

Belgeleri sınıflandırmak ve fatura ayrıştırmak amacıyla Procurement için Document AI'ı başarıyla kullandınız. Document AI, burada listelenen diğer özel çözümleri de destekler:

Herhangi bir özel işlemciyi işlemek için aynı prosedürü izleyebilir ve aynı kodu kullanabilirsiniz.

Diğer özel çözümleri denemek isterseniz laboratuvarı diğer işlemci türleri ve özel örnek dokümanlarla yeniden çalıştırabilirsiniz.

Örnek Belgeler

Diğer özel işlemcileri denemek için kullanabileceğiniz bazı örnek dokümanları aşağıda bulabilirsiniz.

Çözüm

İşlemci Türü

Belge

Kimlik

ABD Sürücü Belgesi Ayrıştırıcı

Kredi

Kredi Dağıtıcı ve Sınıflandırıcı

Kredi

W9 Ayrıştırıcı

Sözleşmeler

Sözleşme Ayrıştırıcı

Diğer örnek dokümanları ve işlemci çıktılarını belgelerde bulabilirsiniz.

8. Tebrikler

Tebrikler, özel belgelerden veri sınıflandırmak ve ayıklamak için Document AI'ı başarıyla kullandınız. Diğer özel belge türleriyle denemeler yapmanızı öneririz.

Temizleme

Bu eğiticide kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini önlemek amacıyla:

  • Cloud Console'da Kaynakları yönetin sayfasına gidin.
  • Proje listesinden projenizi seçin ve ardından Sil'i tıklayın.
  • İletişim kutusuna proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın.

Daha Fazla Bilgi

Takip eden Codelab uygulamaları ile Document AI hakkında bilgi edinmeye devam edin.

Kaynaklar

Lisans

Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.