1. مقدمه
در این کد لبه، یاد خواهید گرفت که چگونه از پردازشگرهای تخصصی Document AI برای طبقه بندی و تجزیه اسناد تخصصی با پایتون استفاده کنید. برای طبقهبندی و تقسیم، از یک فایل پیدیاف مثالی حاوی فاکتورها، رسیدها و بیانیههای ابزار استفاده خواهیم کرد. سپس برای تجزیه و استخراج موجودیت، از یک فاکتور به عنوان مثال استفاده می کنیم.
این رویه و کد نمونه با هر سند تخصصی پشتیبانی شده توسط Document AI کار می کند.
پیش نیازها
این کد لبه بر محتوای ارائه شده در سایر Codelab های هوش مصنوعی سند ساخته شده است.
توصیه می شود قبل از ادامه، Codelabs زیر را تکمیل کنید:
چیزی که یاد خواهید گرفت
- نحوه طبقه بندی و شناسایی نقاط تقسیم برای اسناد تخصصی.
- نحوه استخراج موجودیت های طرحواره شده با استفاده از پردازنده های تخصصی
آنچه شما نیاز دارید
2. راه اندازی
این Codelab فرض می کند که شما مراحل تنظیم AI سند فهرست شده در Codelab مقدماتی را تکمیل کرده اید.
لطفا قبل از ادامه مراحل زیر را انجام دهید:
همچنین باید Pandas را نصب کنید، یک کتابخانه محبوب تجزیه و تحلیل داده برای پایتون.
pip3 install --upgrade pandas
3. پردازنده های تخصصی ایجاد کنید
ابتدا باید نمونه هایی از پردازنده هایی که برای این آموزش استفاده می کنید ایجاد کنید.
- در کنسول، به Document AI Platform Overview بروید
- روی Create Processor کلیک کنید، به قسمت Specialized بروید و Procurement Doc Splitter را انتخاب کنید.
- نام آن را "codelab-procurement-splitter" (یا چیز دیگری که به یاد دارید) بگذارید و نزدیکترین منطقه را در لیست انتخاب کنید.
- برای ایجاد پردازنده خود روی Create کلیک کنید
- شناسه پردازنده را کپی کنید. بعدا باید از این در کد خود استفاده کنید.
- مراحل 2-6 را با تجزیه کننده فاکتور (که می توانید آن را "codelab-invoice-parser" نام گذاری کنید، تکرار کنید.
تست پردازنده در کنسول
شما می توانید تجزیه کننده فاکتور را در کنسول با بارگذاری یک سند آزمایش کنید.
روی آپلود سند کلیک کنید و فاکتوری را برای تجزیه انتخاب کنید. اگر فاکتوری برای استفاده ندارید می توانید این نمونه فاکتور را دانلود و استفاده کنید.
خروجی شما باید به شکل زیر باشد:
4. نمونه اسناد را دانلود کنید
ما چند نمونه سند برای استفاده در این آزمایشگاه داریم.
با استفاده از لینک های زیر می توانید فایل های PDF را دانلود کنید. سپس آنها را در نمونه Cloud Shell آپلود کنید .
همچنین، میتوانید آنها را از سطل ذخیرهسازی ابر عمومی ما با استفاده از 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
را به ترتیب با شناسه پروژه Cloud و مکان پردازنده خود جایگزین کنید.
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]
توجه داشته باشید که Procurement Splitter/Classifier به درستی انواع سند را در صفحات 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
استفاده کنید.
استخراج.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 همچنین از سایر راه حل های تخصصی ذکر شده در اینجا پشتیبانی می کند:
شما می توانید همین رویه را دنبال کنید و از همان کد برای مدیریت هر پردازنده تخصصی استفاده کنید.
اگر میخواهید راهحلهای تخصصی دیگر را امتحان کنید، میتوانید آزمایشگاه را با دیگر انواع پردازنده و اسناد نمونه تخصصی دوباره اجرا کنید.
نمونه اسناد
در اینجا برخی از اسناد نمونه وجود دارد که می توانید از آنها برای آزمایش سایر پردازنده های تخصصی استفاده کنید.
راه حل | نوع پردازنده | سند |
هویت | ||
وام دادن | ||
وام دادن | ||
قراردادها |
می توانید سایر اسناد نمونه و خروجی پردازنده را در مستندات بیابید.
8. تبریک می گویم
تبریک میگوییم، شما با موفقیت از Document AI برای طبقهبندی و استخراج دادهها از اسناد تخصصی استفاده کردید. ما شما را تشویق می کنیم که انواع اسناد تخصصی دیگر را آزمایش کنید.
پاکسازی
برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع استفاده شده در این آموزش:
- در Cloud Console، به صفحه مدیریت منابع بروید.
- در لیست پروژه، پروژه خود را انتخاب کنید و سپس روی Delete کلیک کنید.
- در گفتگو، ID پروژه را تایپ کنید و سپس بر روی Shut down کلیک کنید تا پروژه حذف شود.
بیشتر بدانید
با این Codelab های بعدی به یادگیری در مورد Document AI ادامه دهید.
- مدیریت پردازشگرهای هوش مصنوعی سند با پایتون
- سند هوش مصنوعی: انسان در حلقه
- Document AI Workbench: Uptraining
- Document AI Workbench: پردازنده های سفارشی
منابع
- آینده اسناد - لیست پخش YouTube
- مستندات هوش مصنوعی
- کتابخانه مشتری پایتون هوش مصنوعی را مستند کنید
- نمونه های AI سند
مجوز
این اثر تحت مجوز Creative Commons Attribution 2.0 Generic مجوز دارد.