۱. مقدمه
در این آزمایشگاه کد، شما یاد خواهید گرفت که چگونه از پردازندههای تخصصی هوش مصنوعی اسناد برای طبقهبندی و تجزیه اسناد تخصصی با پایتون استفاده کنید. برای طبقهبندی و تقسیمبندی، از یک فایل pdf نمونه حاوی فاکتورها، رسیدها و صورتحسابهای کاربردی استفاده خواهیم کرد. سپس، برای تجزیه و استخراج موجودیت، از یک فاکتور به عنوان نمونه استفاده خواهیم کرد.
این رویه و کد نمونه با هر سند تخصصی پشتیبانی شده توسط Document AI کار خواهد کرد.
پیشنیازها
این آزمایشگاه کد بر اساس محتوای ارائه شده در سایر آزمایشگاههای کد هوش مصنوعی اسناد ساخته شده است.
توصیه میشود قبل از ادامه، Codelabs زیر را تکمیل کنید:
آنچه یاد خواهید گرفت
- نحوه طبقهبندی و شناسایی نقاط تقسیم برای اسناد تخصصی.
- نحوه استخراج موجودیتهای طرحوارهای با استفاده از پردازندههای تخصصی.
آنچه نیاز دارید
۲. راهاندازی
این آزمایشگاه کد فرض میکند که شما مراحل راهاندازی هوش مصنوعی سند که در آزمایشگاه کد مقدماتی ذکر شده است را تکمیل کردهاید.
لطفا قبل از ادامه مراحل زیر را انجام دهید:
همچنین باید Pandas ، یک کتابخانه محبوب تحلیل داده برای پایتون، را نصب کنید.
pip3 install --upgrade pandas
۳. پردازندههای تخصصی ایجاد کنید
ابتدا باید نمونههایی از پردازندههایی که برای این آموزش استفاده خواهید کرد را ایجاد کنید.
- در کنسول، به نمای کلی پلتفرم هوش مصنوعی اسناد بروید
- روی ایجاد پردازنده کلیک کنید، به پایین بروید تا به بخش تخصصی (Specialized) برسید و گزینه تقسیمکننده اسناد تدارکات (Procurement Doc Splitter) را انتخاب کنید.
- نام آن را «codelab-procurement-splitter» (یا هر نام دیگری که به خاطر دارید) بگذارید و نزدیکترین ناحیه را در لیست انتخاب کنید.
- برای ایجاد پردازنده خود، روی ایجاد کلیک کنید
- شناسه پردازنده را کپی کنید. بعداً باید از آن در کد خود استفاده کنید.
- مراحل ۲ تا ۶ را با Invoice Parser (که میتوانید آن را "codelab-invoice-parser" بنامید) تکرار کنید.
پردازنده را در کنسول تست کنید
شما میتوانید با آپلود یک سند، تجزیهکننده فاکتور را در کنسول آزمایش کنید.
روی «بارگذاری سند» کلیک کنید و یک فاکتور برای تجزیه و تحلیل انتخاب کنید. اگر فاکتور نمونهای برای استفاده ندارید، میتوانید آن را دانلود و استفاده کنید.

خروجی شما باید به این شکل باشد:

۴. دانلود نمونه اسناد
ما چند نمونه سند برای استفاده در این آزمایشگاه داریم.
شما میتوانید فایلهای 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 .
۵. اسناد را طبقهبندی و تقسیم کنید
در این مرحله شما از API پردازش آنلاین برای طبقهبندی و تشخیص نقاط تقسیم منطقی برای یک سند چند صفحهای استفاده خواهید کرد.
همچنین اگر میخواهید چندین فایل ارسال کنید یا اگر اندازه فایل از حداکثر تعداد صفحات پردازش آنلاین بیشتر است، میتوانید از API پردازش دستهای استفاده کنید. میتوانید نحوه انجام این کار را در آزمایشگاه کد OCR هوش مصنوعی سند (Document AI OCR Codelab) مرور کنید.
کد لازم برای ارسال درخواست API برای یک پردازنده عمومی، جدا از شناسه پردازنده، یکسان است.
تقسیمکننده/طبقهبندیکننده تدارکات
یک فایل به نام classification.py ایجاد کنید و از کد زیر استفاده کنید.
به جای PROCUREMENT_SPLITTER_ID ، شناسهی پردازندهی تقسیمکنندهی تدارکات که قبلاً ایجاد کردهاید را قرار دهید. به جای YOUR_PROJECT_ID و YOUR_PROJECT_LOCATION ، به ترتیب شناسهی پروژهی ابری و موقعیت پردازندهی خود را قرار دهید.
طبقهبندی.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 به درستی شناسایی کرده است.
صفحه ۲ شامل یک فرم مصرف پزشکی عمومی است، بنابراین طبقهبندیکننده به درستی آن را به عنوان other شناسایی کرده است.
۶. استخراج موجودیتها
اکنون میتوانید موجودیتهای طرحوارهشده، شامل نمرات اطمینان، ویژگیها و مقادیر نرمالشده را از فایلها استخراج کنید.
کد مربوط به ایجاد درخواست 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%
۷. اختیاری: پردازندههای تخصصی دیگر را امتحان کنید
شما با موفقیت از هوش مصنوعی اسناد برای تدارکات، برای طبقهبندی اسناد و تجزیه فاکتور استفاده کردید. هوش مصنوعی اسناد همچنین از سایر راهحلهای تخصصی ذکر شده در اینجا پشتیبانی میکند:
شما میتوانید همین رویه را دنبال کنید و از همان کد برای مدیریت هر پردازنده تخصصی استفاده کنید.
اگر مایلید سایر راهحلهای تخصصی را امتحان کنید، میتوانید آزمایشگاه را با انواع پردازندههای دیگر و اسناد نمونه تخصصی دوباره اجرا کنید.
اسناد نمونه
در اینجا چند نمونه سند وجود دارد که میتوانید برای امتحان کردن سایر پردازندههای تخصصی از آنها استفاده کنید.
راه حل | نوع پردازنده | سند |
هویت | ||
وام | ||
وام | ||
قراردادها |
میتوانید سایر اسناد نمونه و خروجی پردازنده را در مستندات پیدا کنید.
۸. تبریک
تبریک میگوییم، شما با موفقیت از هوش مصنوعی اسناد برای طبقهبندی و استخراج دادهها از اسناد تخصصی استفاده کردید. ما شما را تشویق میکنیم که با انواع دیگر اسناد تخصصی آزمایش کنید.
پاکسازی
برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع استفاده شده در این آموزش:
- در کنسول ابری، به صفحه مدیریت منابع بروید.
- در لیست پروژهها، پروژه خود را انتخاب کنید و سپس روی حذف کلیک کنید.
- در کادر محاورهای، شناسه پروژه را تایپ کنید و سپس برای حذف پروژه، روی خاموش کردن (Shut down) کلیک کنید.
اطلاعات بیشتر
با این Codelabs های بعدی، به یادگیری در مورد هوش مصنوعی اسناد ادامه دهید.
- مدیریت پردازندههای هوش مصنوعی اسناد با پایتون
- هوش مصنوعی سند: انسان در حلقه
- میز کار هوش مصنوعی اسناد: آموزش پیشرفته
- میز کار هوش مصنوعی اسناد: پردازندههای سفارشی
منابع
- آینده اسناد - لیست پخش یوتیوب
- مستندسازی هوش مصنوعی
- کتابخانه کلاینت پایتون برای مستندسازی هوش مصنوعی
- نمونههای هوش مصنوعی اسناد
مجوز
این اثر تحت مجوز عمومی Creative Commons Attribution 2.0 منتشر شده است.