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
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.
- Konsolda Document AI Platformuna Genel Bakış'a gidin
- Create Processor'ı (İşlemci Oluştur) tıklayın, Specialized'e (Uzmanlaşmış) gidin ve Procurement Doc Splitter'ı (Procurement Doc Splitter) seçin.
- 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.
- İşleyicinizi oluşturmak için Oluştur'u tıklayın.
- İşleyen kimliğini kopyalayın. Bunu daha sonra kodunuzda kullanmanız gerekir.
- 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.
Çıkışınız aşağıdaki gibi görünmelidir:
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
)
- (örn.
- 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 | ||
Kredi | ||
Kredi | ||
Sözleşmeler |
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.
- Document AI işlemcilerini Python ile yönetme
- Document AI: Döngüdeki İnsan
- Document AI Workbench: Ek Eğitim
- Document AI Workbench: Özel İşlemciler
Kaynaklar
- Belgelerin Geleceği - YouTube Oynatma Listesi
- Document AI Belgeleri
- Document AI Python İstemci Kitaplığı
- Document AI Örnekleri
Lisans
Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.