Document AI Kullanan Özel İşlemciler (Python)

1. Giriş

Bu codelab'de, Python ile özel belgeleri sınıflandırmak ve ayrıştırmak için Document AI Specialized Processors'ı kullanmayı öğreneceksiniz. Sınıflandırma ve bölme için faturalar, makbuzlar ve hizmet ekstresi içeren örnek bir PDF dosyası kullanacağız. Ardından, ayrıştırma ve öğe çıkarma için örnek olarak bir fatura kullanacağız.

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

Ön koşullar

Bu codelab, diğer Document AI codelab'lerinde sunulan içeriklere dayanmaktadır.

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

Neler öğreneceksiniz?

  • Uzmanlık belgeleri için bölme noktalarını sınıflandırma ve tanımlama
  • Özel işlemciler kullanarak şemalandırılmış varlıkları ayıklama.

Gerekenler

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

2. Hazırlanma

Bu codelab'de, Giriş Codelab'inde listelenen Document AI kurulum adımlarını tamamladığınız varsayılır.

Lütfen devam etmeden önce aşağıdaki adımları tamamlayın:

Ayrıca Python için popüler bir veri analizi kitaplığı olan Pandas'ı da yüklemeniz gerekir.

pip3 install --upgrade pandas

3. Özel işleyiciler oluşturma

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

  1. Konsolda Document AI Platform Overview (Document AI Platform'a Genel Bakış) sayfasına gidin.
  2. İşlemci Oluştur'u tıklayın, Özel'e gidin ve Satın Alma Belgesi Bölücü'yü seçin.
  3. Bu işleme "codelab-procurement-splitter" adını verin (veya hatırlayacağınız başka bir ad) ve listede en yakın bölgeyi seçin.
  4. İşleyicinizi oluşturmak için Oluştur'u tıklayın.
  5. İşlemci kimliğini kopyalayın. Bunu daha sonra kodunuzda kullanmanız gerekir.
  6. 2-6 arasındaki adımları Fatura Ayrıştırıcı ile tekrarlayın (Buna "codelab-invoice-parser" adını verebilirsiniz).

Konsoldaki test işlemcisi

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

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

google_invoice.png

Çıkışınız şu şekilde görünmelidir:

InvoiceParser.png

4. Örnek dokümanları indirme

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

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

(tedarik_multi_document.PDF dosyasını indirin)

Alternatif olarak, gsutil kullanarak bunları 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. Dokümanları sınıflandırma ve bölme

Bu adımda, çok sayfalı bir belgeyi sınıflandırmak ve mantıksal ayırma noktalarını algılamak için online işleme API'sini kullanacaksınız.

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

API isteğinde bulunma kodu, İşlemci Kimliği dışında genel bir işlemci için aynıdır.

Satın alma ayırıcı/sınıflandırıcı

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

PROCUREMENT_SPLITTER_ID kısmını, daha önce oluşturduğunuz Procurement Splitter Processor'ın kimliğiyle değiştirin. YOUR_PROJECT_ID ve YOUR_PROJECT_LOCATION yerine sırasıyla Cloud projesi kimliğinizi ve işlemci konumunuzu 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ünmelidir:

$ 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]

Satın alma ayırıcı/sınıflandırıcının, 0-1 ve 3-4. sayfalardaki belge türlerini doğru şekilde tanımladığına dikkat edin.

2. sayfada genel bir tıbbi kayıt formu yer aldığından sınıflandırıcı, bu sayfayı doğru şekilde other olarak tanımladı.

6. Varlıkları ayıklama

Artık güven puanları, özellikler ve normalleştirilmiş değerler dahil olmak üzere şemalandırılmış öğeleri dosyalardan çıkarabilirsiniz.

API isteğinde bulunma kodu, önceki adımla aynıdır ve online veya toplu isteklerle yapılabilir.

Tüzel kişilerden aşağıdaki bilgilere erişeceğiz:

  • Tüzel Kişi Türü
    • (ör. invoice_date, receiver_name, total_amount)
  • İşlenmemiş Değerler
    • Veri değerleri, orijinal belge dosyasında gösterildiği şekildedir.
  • Normalleştirilmiş Değerler
    • Varsa normalleştirilmiş ve standart biçimde veri değerleri.
    • Kurumsal Bilgi Grafiği'nden zenginleştirme de içerebilir.
  • Güven Değerleri
    • Modelin, değerlerin doğru olduğundan ne kadar "emin" olduğu.

line_item gibi bazı öğe türleri, line_item/unit_price ve line_item/description gibi iç içe yerleştirilmiş öğeler olan özellikler de içerebilir.

Bu örnekte, kolay görüntüleme için iç içe yerleştirilmiş yapı düzleştirilmiştir.

Fatura Ayrıştırıcı

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

INVOICE_PARSER_ID kısmını, daha önce oluşturduğunuz Fatura Ayrıştırıcı İşlemcisi'nin kimliğiyle değiştirin 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ünmelidir:

$ 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 deneyin

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

Aynı prosedürü uygulayabilir ve aynı kodu kullanarak tüm özel işlemcileri yönetebilirsiniz.

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

Örnek Dokümanlar

Diğer özel işlemcileri denemek için kullanabileceğiniz bazı örnek belgeler aşağıda verilmiştir.

Çözüm

İşlemci Türü

Doküman

Kimlik

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

.

Kredi

Ödünç Verme Bölücü ve Sınıflandırıcı

(lending_multi_document.pdf dosyasını indirin)

Kredi

W9 Ayrıştırıcı

Sözleşmeler

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

Diğer örnek dokümanları ve işlemci çıkışını dokümanlarda bulabilirsiniz.

8. Tebrikler

Tebrikler, Document AI'yı kullanarak özel belgelerdeki verileri sınıflandırma ve ayıklama işlemini başarıyla tamamladınız. Diğer özel belge türlerini denemenizi öneririz.

Temizleme

Bu eğiticide kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız:

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

Daha Fazla Bilgi

Aşağıdaki takip Codelab'leriyle 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.