1. บทนำ
ใน Codelab นี้ คุณจะได้เรียนรู้วิธีใช้โปรเซสเซอร์เฉพาะทางของ Document AI ในการแยกประเภทและแยกวิเคราะห์เอกสารเฉพาะทางด้วย Python สำหรับการจำแนกประเภทและการแยก เราจะใช้ไฟล์ PDF ตัวอย่างที่มีใบแจ้งหนี้ ใบเสร็จ และใบแจ้งยอดค่าสาธารณูปโภค จากนั้น สำหรับการแยกวิเคราะห์และการแยกเอนทิตี เราจะใช้ใบแจ้งหนี้เป็นตัวอย่าง
ขั้นตอนและโค้ดตัวอย่างนี้จะใช้งานได้กับเอกสารเฉพาะทางทั้งหมดที่ Document AI รองรับ
ข้อกำหนดเบื้องต้น
Codelab นี้สร้างขึ้นจากเนื้อหาที่แสดงใน Codelab อื่นๆ สำหรับ Document AI
เราขอแนะนำให้คุณทำ Codelab ต่อไปนี้ให้เสร็จก่อนดำเนินการต่อ
- การรู้จำอักขระด้วยภาพ (OCR) ด้วย Document AI และ Python
- การแยกวิเคราะห์แบบฟอร์มด้วย Document AI (Python)
สิ่งที่คุณจะได้เรียนรู้
- วิธีแยกประเภทและระบุจุดแยกสำหรับเอกสารเฉพาะทาง
- วิธีแยกเอนทิตีสคีมาโดยใช้โปรเซสเซอร์พิเศษ
สิ่งที่คุณต้องมี
2. การตั้งค่า
Codelab นี้จะจะถือว่าคุณได้ทำตามขั้นตอนการตั้งค่า Document AI ใน Codelab เบื้องต้นเรียบร้อยแล้ว
โปรดทำตามขั้นตอนต่อไปนี้ก่อนดำเนินการต่อ
รวมทั้งต้องติดตั้ง Pandas ซึ่งเป็นไลบรารีการวิเคราะห์ข้อมูลยอดนิยมสำหรับ Python ด้วย
pip3 install --upgrade pandas
3. สร้างผู้ประมวลผลข้อมูลเฉพาะทาง
คุณต้องสร้างอินสแตนซ์ของโปรเซสเซอร์ที่จะใช้สำหรับบทแนะนำนี้ก่อน
- ในคอนโซล ให้ไปที่ภาพรวมของ Document AI Platform
- คลิกสร้างโปรเซสเซอร์ เลื่อนลงมาที่เฉพาะทางแล้วเลือกตัวแยกเอกสารการจัดซื้อ
- ตั้งชื่อว่า "codelab-procurement-splitter" (หรือรหัสอื่นที่คุณจำได้) แล้วเลือกภูมิภาคที่ใกล้เคียงที่สุดในรายการ
- คลิกสร้างเพื่อสร้างโปรเซสเซอร์
- คัดลอกรหัสผู้ประมวลผลข้อมูล คุณต้องใช้สิ่งนี้ในรหัสในภายหลัง
- ทำขั้นตอนที่ 2-6 ซ้ำด้วยโปรแกรมแยกวิเคราะห์ใบแจ้งหนี้ (ซึ่งสามารถตั้งชื่อเป็น "codelab-invoice-parser")
ทดสอบโปรเซสเซอร์ในคอนโซล
คุณสามารถทดสอบโปรแกรมแยกวิเคราะห์ใบแจ้งหนี้ในคอนโซลได้โดยอัปโหลดเอกสาร
คลิก อัปโหลดเอกสาร และเลือกใบแจ้งหนี้ที่จะแยกวิเคราะห์ คุณสามารถดาวน์โหลดและใช้ใบแจ้งหนี้ตัวอย่างนี้ หากไม่มีใบแจ้งหนี้ที่ใช้ได้
เอาต์พุตควรมีลักษณะดังนี้
4. ดาวน์โหลดเอกสารตัวอย่าง
เรามีเอกสารตัวอย่าง 2-3 รายการที่จะใช้สำหรับห้องทดลองนี้
คุณดาวน์โหลดไฟล์ PDF ได้โดยใช้ลิงก์ต่อไปนี้ จากนั้นอัปโหลดไปยังอินสแตนซ์ Cloud Shell
หรือจะดาวน์โหลดจากที่เก็บข้อมูล Cloud Storage สาธารณะของเราโดยใช้ 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. จำแนกประเภทและ แยกเอกสาร
ในขั้นตอนนี้ คุณจะใช้ API การประมวลผลออนไลน์เพื่อจัดประเภทและตรวจหาจุดแยกเชิงตรรกะสำหรับเอกสารที่มีหลายหน้า
นอกจากนี้คุณยังใช้ API การประมวลผลแบบกลุ่มได้หากต้องการส่งไฟล์หลายไฟล์ หรือหากขนาดไฟล์เกินหน้าสูงสุดในการประมวลผลออนไลน์ ดูวิธีการได้ที่ Document AI OCR Codelab
โค้ดสำหรับสร้างคำขอ API จะเหมือนกันสำหรับผู้ประมวลผลข้อมูลทั่วไป นอกเหนือจากรหัสผู้ประมวลผลข้อมูล
ตัวแยกประเภท/ตัวแยกประเภทการจัดซื้อ
สร้างไฟล์ชื่อ classification.py
และใช้รหัสด้านล่าง
แทนที่ PROCUREMENT_SPLITTER_ID
ด้วยรหัสสำหรับโปรเซสเซอร์สำหรับตัวแยกการจัดซื้อที่คุณสร้างไว้ก่อนหน้านี้ โดยแทนที่ YOUR_PROJECT_ID
และ YOUR_PROJECT_LOCATION
ด้วยรหัสโปรเจ็กต์ที่อยู่ในระบบคลาวด์และตำแหน่งของผู้ประมวลผลข้อมูลตามลำดับ
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)
เอาต์พุตควรมีลักษณะดังนี้
$ 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]
โปรดทราบว่าตัวแยกจัดซื้อ/ตัวแยกประเภทได้ระบุประเภทเอกสารอย่างถูกต้องในหน้า 0-1 และ 3-4
หน้า 2 ประกอบด้วยแบบฟอร์มข้อมูลทางการแพทย์ทั่วไป ตัวแยกประเภทจึงระบุให้ถูกต้องว่าเป็น other
6. แตกเอนทิตี
ตอนนี้คุณสามารถแยกเอนทิตีสคีมาออกจากไฟล์ รวมถึงคะแนนความเชื่อมั่น พร็อพเพอร์ตี้ และค่ามาตรฐาน
โค้ดสำหรับส่งคำขอ API จะเหมือนกับขั้นตอนก่อนหน้า และดำเนินการกับคำขอแบบออนไลน์หรือแบบกลุ่มก็ได้
เราจะเข้าถึงข้อมูลต่อไปนี้จากฝ่ายต่างๆ
- ประเภทบุคคล
- (เช่น
invoice_date
,receiver_name
,total_amount
)
- (เช่น
- ค่าดิบ
- ค่าข้อมูลตามที่แสดงในไฟล์เอกสารต้นฉบับ
- ค่ามาตรฐาน
- ค่าข้อมูลในรูปแบบมาตรฐานและมาตรฐาน หากมี
- และยังเพิ่มข้อมูลจากกราฟความรู้ขององค์กรได้ด้วย
- ค่าความเชื่อมั่น
- "แน่นอน" โมเดลคือค่าต่างๆ ถูกต้อง
เอนทิตีบางประเภท เช่น line_item
อาจมีพร็อพเพอร์ตี้ ซึ่งเป็นเอนทิตีที่ซ้อนกันอย่างเช่น line_item/unit_price
และ line_item/description
ได้ด้วย
ตัวอย่างนี้ทำให้โครงสร้างแบบซ้อนกันเป็นชั้นๆ เพื่อให้ดูได้ง่ายขึ้น
โปรแกรมแยกวิเคราะห์ใบแจ้งหนี้
สร้างไฟล์ชื่อ extraction.py
และใช้รหัสด้านล่าง
แทนที่ INVOICE_PARSER_ID
ด้วยรหัสของโปรแกรมแยกวิเคราะห์ใบแจ้งหนี้ที่คุณสร้างขึ้นก่อนหน้านี้และใช้ไฟล์ 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)
เอาต์พุตควรมีลักษณะดังนี้
$ 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. ไม่บังคับ: ลองใช้โปรเซสเซอร์พิเศษอื่นๆ
คุณได้ใช้ Document AI สำหรับการจัดซื้อเพื่อจำแนกเอกสารและแยกวิเคราะห์ใบแจ้งหนี้เรียบร้อยแล้ว Document AI ยังรองรับโซลูชันเฉพาะทางอื่นๆ ที่ระบุไว้ที่นี่ด้วย
คุณสามารถทำตามขั้นตอนเดิมและใช้โค้ดเดียวกันในการจัดการกับโปรเซสเซอร์พิเศษใดๆ
หากต้องการทดลองใช้โซลูชันเฉพาะด้านอื่นๆ คุณสามารถเรียกใช้ห้องทดลองอีกครั้งโดยใช้โปรเซสเซอร์ประเภทอื่นๆ และเอกสารตัวอย่างเฉพาะได้
เอกสารตัวอย่าง
ตัวอย่างเอกสารที่คุณสามารถใช้เพื่อทดลองใช้โปรเซสเซอร์พิเศษอื่นๆ
โซลูชัน | ประเภทโปรเซสเซอร์ | เอกสาร |
Identity | ||
บริการสินเชื่อรถยนต์ | ||
บริการสินเชื่อรถยนต์ | ||
สัญญา |
ดูเอกสารตัวอย่างอื่นๆ และเอาต์พุตของตัวประมวลผลได้ในเอกสารประกอบ
8. ขอแสดงความยินดี
ยินดีด้วย คุณใช้ Document AI ในการจัดประเภทและแยกข้อมูลจากเอกสารเฉพาะทางได้สำเร็จแล้ว เราขอแนะนำให้คุณทดลองใช้เอกสารประเภทอื่นๆ โดยเฉพาะ
ล้างข้อมูล
โปรดทำดังนี้เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในบทแนะนำนี้
- ใน Cloud Console ให้ไปที่หน้าจัดการทรัพยากร
- ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ของคุณ แล้วคลิกลบ
- ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์แล้วคลิกปิดเครื่องเพื่อลบโปรเจ็กต์
ดูข้อมูลเพิ่มเติม
ศึกษาเพิ่มเติมเกี่ยวกับ Document AI ต่อไปด้วย Codelab ติดตามผลเหล่านี้
- การจัดการตัวประมวลผล Document AI ด้วย Python
- Document AI: การทำงานของมนุษย์
- Document AI Workbench: การฝึกปรับปรุง
- Document AI Workbench: โปรเซสเซอร์ที่กำหนดเอง
แหล่งข้อมูล
- อนาคตของเอกสาร - เพลย์ลิสต์ YouTube
- เอกสารประกอบสำหรับ Document AI
- ไลบรารีของไคลเอ็นต์ Python สำหรับ Document AI
- ตัวอย่าง Document AI
ใบอนุญาต
ผลงานนี้ได้รับอนุญาตภายใต้ใบอนุญาตทั่วไปครีเอทีฟคอมมอนส์แบบระบุแหล่งที่มา 2.0