หน่วยประมวลผลเฉพาะทางที่มี Document AI (Python)

1. บทนำ

ใน Codelab นี้ คุณจะได้เรียนรู้วิธีใช้โปรเซสเซอร์เฉพาะทางของ Document AI ในการแยกประเภทและแยกวิเคราะห์เอกสารเฉพาะทางด้วย Python สำหรับการจำแนกประเภทและการแยก เราจะใช้ไฟล์ PDF ตัวอย่างที่มีใบแจ้งหนี้ ใบเสร็จ และใบแจ้งยอดค่าสาธารณูปโภค จากนั้น สำหรับการแยกวิเคราะห์และการแยกเอนทิตี เราจะใช้ใบแจ้งหนี้เป็นตัวอย่าง

ขั้นตอนและโค้ดตัวอย่างนี้จะใช้งานได้กับเอกสารเฉพาะทางทั้งหมดที่ Document AI รองรับ

ข้อกำหนดเบื้องต้น

Codelab นี้สร้างขึ้นจากเนื้อหาที่แสดงใน Codelab อื่นๆ สำหรับ Document AI

เราขอแนะนำให้คุณทำ Codelab ต่อไปนี้ให้เสร็จก่อนดำเนินการต่อ

สิ่งที่คุณจะได้เรียนรู้

  • วิธีแยกประเภทและระบุจุดแยกสำหรับเอกสารเฉพาะทาง
  • วิธีแยกเอนทิตีสคีมาโดยใช้โปรเซสเซอร์พิเศษ

สิ่งที่คุณต้องมี

  • โปรเจ็กต์ Google Cloud
  • เบราว์เซอร์ เช่น Chrome หรือ Firefox
  • ความรู้เกี่ยวกับ Python 3

2. การตั้งค่า

Codelab นี้จะจะถือว่าคุณได้ทำตามขั้นตอนการตั้งค่า Document AI ใน Codelab เบื้องต้นเรียบร้อยแล้ว

โปรดทำตามขั้นตอนต่อไปนี้ก่อนดำเนินการต่อ

รวมทั้งต้องติดตั้ง Pandas ซึ่งเป็นไลบรารีการวิเคราะห์ข้อมูลยอดนิยมสำหรับ Python ด้วย

pip3 install --upgrade pandas 

3. สร้างผู้ประมวลผลข้อมูลเฉพาะทาง

คุณต้องสร้างอินสแตนซ์ของโปรเซสเซอร์ที่จะใช้สำหรับบทแนะนำนี้ก่อน

  1. ในคอนโซล ให้ไปที่ภาพรวมของ Document AI Platform
  2. คลิกสร้างโปรเซสเซอร์ เลื่อนลงมาที่เฉพาะทางแล้วเลือกตัวแยกเอกสารการจัดซื้อ
  3. ตั้งชื่อว่า "codelab-procurement-splitter" (หรือรหัสอื่นที่คุณจำได้) แล้วเลือกภูมิภาคที่ใกล้เคียงที่สุดในรายการ
  4. คลิกสร้างเพื่อสร้างโปรเซสเซอร์
  5. คัดลอกรหัสผู้ประมวลผลข้อมูล คุณต้องใช้สิ่งนี้ในรหัสในภายหลัง
  6. ทำขั้นตอนที่ 2-6 ซ้ำด้วยโปรแกรมแยกวิเคราะห์ใบแจ้งหนี้ (ซึ่งสามารถตั้งชื่อเป็น "codelab-invoice-parser")

ทดสอบโปรเซสเซอร์ในคอนโซล

คุณสามารถทดสอบโปรแกรมแยกวิเคราะห์ใบแจ้งหนี้ในคอนโซลได้โดยอัปโหลดเอกสาร

คลิก อัปโหลดเอกสาร และเลือกใบแจ้งหนี้ที่จะแยกวิเคราะห์ คุณสามารถดาวน์โหลดและใช้ใบแจ้งหนี้ตัวอย่างนี้ หากไม่มีใบแจ้งหนี้ที่ใช้ได้

google_invoice.png

เอาต์พุตควรมีลักษณะดังนี้

InvoiceParser.png

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

โปรแกรมแยกวิเคราะห์ใบขับขี่ของสหรัฐอเมริกา

บริการสินเชื่อรถยนต์

เครื่องตัดหญ้าแบบหยอดเหรียญและ ตัวแยกประเภท

บริการสินเชื่อรถยนต์

โปรแกรมแยกวิเคราะห์ W9

สัญญา

โปรแกรมแยกวิเคราะห์สัญญา

ดูเอกสารตัวอย่างอื่นๆ และเอาต์พุตของตัวประมวลผลได้ในเอกสารประกอบ

8. ขอแสดงความยินดี

ยินดีด้วย คุณใช้ Document AI ในการจัดประเภทและแยกข้อมูลจากเอกสารเฉพาะทางได้สำเร็จแล้ว เราขอแนะนำให้คุณทดลองใช้เอกสารประเภทอื่นๆ โดยเฉพาะ

ล้างข้อมูล

โปรดทำดังนี้เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในบทแนะนำนี้

  • ใน Cloud Console ให้ไปที่หน้าจัดการทรัพยากร
  • ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ของคุณ แล้วคลิกลบ
  • ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์แล้วคลิกปิดเครื่องเพื่อลบโปรเจ็กต์

ดูข้อมูลเพิ่มเติม

ศึกษาเพิ่มเติมเกี่ยวกับ Document AI ต่อไปด้วย Codelab ติดตามผลเหล่านี้

แหล่งข้อมูล

ใบอนุญาต

ผลงานนี้ได้รับอนุญาตภายใต้ใบอนุญาตทั่วไปครีเอทีฟคอมมอนส์แบบระบุแหล่งที่มา 2.0