1. Pengantar
Dalam codelab ini, Anda akan mempelajari cara menggunakan Prosesor Khusus Document AI untuk mengklasifikasikan dan mengurai dokumen khusus dengan Python. Untuk klasifikasi dan pemisahan, kita akan menggunakan contoh {i>file<i} pdf yang berisi faktur, tanda terima, dan laporan utilitas. Kemudian, untuk penguraian dan ekstraksi entitas, kami akan menggunakan invoice sebagai contoh.
Prosedur dan kode contoh ini akan berfungsi dengan semua dokumen khusus yang didukung oleh Document AI.
Prasyarat
Codelab ini dibangun berdasarkan konten yang disajikan dalam Codelab Document AI lainnya.
Sebaiknya Anda menyelesaikan Codelab berikut sebelum melanjutkan:
- Pengenalan Karakter Optik (OCR) dengan Document AI dan Python
- Penguraian Formulir dengan Document AI (Python)
Yang akan Anda pelajari
- Cara mengklasifikasikan dan mengidentifikasi titik pemisahan untuk dokumen khusus.
- Cara mengekstrak entitas skema menggunakan pemroses khusus.
Yang Anda butuhkan
2. Mempersiapkan
Codelab ini akan menganggap Anda telah menyelesaikan langkah-langkah Penyiapan Document AI yang tercantum di Codelab Pengantar.
Harap selesaikan langkah-langkah berikut sebelum melanjutkan:
Anda juga perlu menginstal Pandas, library Analisis Data yang populer untuk Python.
pip3 install --upgrade pandas
3. Membuat prosesor khusus
Anda harus terlebih dahulu membuat instance prosesor yang akan Anda gunakan untuk tutorial ini.
- Di konsol, buka Document AI Platform Overview
- Klik Create Processor, scroll ke bawah ke Specialized, lalu pilih Procurement Doc Splitter.
- Beri nama "codelab-procurement-splitter" (Atau hal lain yang akan Anda ingat) dan pilih region terdekat di daftar.
- Klik Create untuk membuat prosesor
- Salin ID prosesor. Anda harus menggunakan ini dalam kode nanti.
- Ulangi Langkah 2-6 dengan Parser Invoice (yang dapat Anda beri nama "codelab-invoice-parser")
Menguji prosesor di Console
Anda dapat menguji Invoice Parser di konsol dengan mengupload dokumen.
Klik Upload Dokumen dan pilih faktur untuk diurai. Anda dapat mendownload dan menggunakan contoh invoice ini jika belum memiliki invoice untuk digunakan.
Output Anda akan terlihat seperti ini:
4. Download contoh dokumen
Kami memiliki beberapa contoh dokumen yang dapat digunakan untuk lab ini.
Anda dapat mengunduh PDF menggunakan tautan berikut. Kemudian upload file ke instance Cloud Shell.
Atau, Anda dapat mendownloadnya dari Bucket Cloud Storage publik kami menggunakan gsutil
.
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. Klasifikasikan & bagi dokumen
Pada langkah ini, Anda akan menggunakan API pemrosesan online untuk mengklasifikasikan dan mendeteksi titik pemisahan logis untuk dokumen multi-halaman.
Anda juga dapat menggunakan API batch processing jika ingin mengirim beberapa file atau jika ukuran file melebihi halaman maksimum pemrosesan online. Anda dapat meninjau cara melakukannya di Codelab OCR Document AI.
Kode untuk membuat permintaan API sama untuk prosesor umum selain ID Prosesor.
Pemisah/Pengklasifikasi Pengadaan
Buat file bernama classification.py
dan gunakan kode di bawah ini.
Ganti PROCUREMENT_SPLITTER_ID
dengan ID untuk Prosesor Pemisah Pengadaan yang Anda buat sebelumnya. Ganti YOUR_PROJECT_ID
dan YOUR_PROJECT_LOCATION
dengan Project ID Cloud dan Lokasi Prosesor Anda.
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)
Output Anda akan terlihat seperti ini:
$ 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]
Perhatikan Pemisah/Pengklasifikasi Pengadaan mengidentifikasi dengan benar jenis dokumen pada halaman 0-1 dan 3-4.
Halaman 2 berisi formulir asupan medis generik, sehingga pengklasifikasi mengidentifikasinya dengan benar sebagai other
.
6. Mengekstrak entity
Sekarang Anda dapat mengekstrak entity yang memiliki skema dari file, termasuk skor keyakinan, properti, dan nilai yang dinormalkan.
Kode untuk membuat permintaan API sama dengan langkah sebelumnya, dan dapat dilakukan dengan permintaan online atau batch.
Kami akan mengakses informasi berikut dari entitas:
- Jenis Entitas
- (misalnya,
invoice_date
,receiver_name
,total_amount
)
- (misalnya,
- Nilai Mentah
- Nilai data seperti yang ditampilkan dalam file dokumen asli.
- Nilai yang dinormalisasi
- Nilai data dalam format yang dinormalkan dan standar, jika berlaku.
- Juga dapat menyertakan pengayaan dari Pustaka Pengetahuan Perusahaan
- Nilai Keyakinan
- Seberapa "yakin" modelnya adalah nilainya akurat.
Beberapa jenis entity, seperti line_item
juga dapat menyertakan properti yang merupakan entity bertingkat seperti line_item/unit_price
dan line_item/description
.
Contoh ini meratakan struktur bertingkat untuk kemudahan dilihat.
Parser Invoice
Buat file bernama extraction.py
dan gunakan kode di bawah ini.
Ganti INVOICE_PARSER_ID
dengan ID untuk Pemroses Parser Invoice yang Anda buat sebelumnya dan gunakan file google_invoice.pdf
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)
Output Anda akan terlihat seperti ini:
$ 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. Opsional: Coba pemroses khusus lainnya
Anda telah berhasil menggunakan Document AI untuk Pengadaan untuk mengklasifikasikan dokumen dan mengurai invoice. Document AI juga mendukung solusi khusus lainnya yang tercantum di sini:
Anda dapat mengikuti prosedur yang sama dan menggunakan kode yang sama untuk menangani prosesor khusus.
Jika ingin mencoba solusi khusus lainnya, Anda dapat menjalankan kembali lab dengan jenis prosesor lain dan dokumen sampel khusus.
Contoh Dokumen
Berikut adalah beberapa contoh dokumen yang dapat Anda gunakan untuk mencoba prosesor khusus lainnya.
Solusi | Jenis Prosesor | Dokumen |
Identitas | ||
Pinjaman | ||
Pinjaman | ||
Kontrak |
Anda dapat menemukan dokumen contoh dan output prosesor lainnya di dokumentasi.
8. Selamat
Selamat, Anda telah berhasil menggunakan Document AI untuk mengklasifikasikan dan mengekstrak data dari dokumen khusus. Sebaiknya Anda bereksperimen dengan jenis dokumen khusus lainnya.
Pembersihan
Agar tidak menimbulkan tagihan ke akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini:
- Di Cloud Console, buka halaman Mengelola resource.
- Dalam daftar project, pilih project Anda lalu klik Hapus.
- Pada dialog, ketik project ID, lalu klik Matikan untuk menghapus project.
Pelajari Lebih Lanjut
Lanjutkan belajar tentang Document AI dengan Codelab berikut ini.
- Mengelola prosesor Document AI dengan Python
- Document AI: Memerlukan Interaksi Manusia
- Document AI Workbench: Melakukan Pelatihan
- Document AI Workbench: Prosesor Kustom
Referensi
- Masa Depan Dokumen - Playlist YouTube
- Dokumentasi Document AI
- Library Klien Python Document AI
- Sampel Document AI
Lisensi
Karya ini dilisensikan berdasarkan Lisensi Umum Creative Commons Attribution 2.0.