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
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.
- Konsolda Document AI Platform Overview (Document AI Platform'a Genel Bakış) sayfasına gidin.
- İşlemci Oluştur'u tıklayın, Özel'e gidin ve Satın Alma Belgesi Bölücü'yü seçin.
- 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.
- İşleyicinizi oluşturmak için Oluştur'u tıklayın.
- İşlemci kimliğini kopyalayın. Bunu daha sonra kodunuzda kullanmanız gerekir.
- 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.

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

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)
- (ör.
- İş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 | ||
Kredi | ||
Kredi | ||
Sözleşmeler |
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.
- Python ile Document AI işlemcilerini yönetme
- Document AI: İnsan Destekli Yapay Zeka
- Document AI Workbench: Uptraining
- Document AI Workbench: Özel İşleyiciler
Kaynaklar
- The Future of Documents - YouTube Playlist
- 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.