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