1. مقدمة
في هذا الدرس التطبيقي حول الترميز، ستتعلّم كيفية استخدام المعالجات المتخصصة في تكنولوجيا الذكاء الاصطناعي للمستندات لتصنيف المستندات المتخصّصة وتحليلها باستخدام لغة بايثون. للتصنيف والتقسيم، سنستخدم ملف pdf كمثال يحتوي على الفواتير والإيصالات وكشوف الخدمات. بعد ذلك، سنستخدم فاتورة كمثال من أجل التحليل واستخراج الكيانات.
سيعمل هذا الإجراء ونموذج الرمز البرمجي مع أي مستند متخصص متوافق مع Document AI.
المتطلبات الأساسية
يعتمد هذا الدرس التطبيقي حول الترميز على المحتوى المقدَّم في الدروس التطبيقية الأخرى حول الترميز الخاص بالذكاء الاصطناعي للمستندات.
ننصحك بإكمال الدروس التطبيقية التالية حول الترميز قبل المتابعة:
- التعرّف البصري على الأحرف (OCR) باستخدام Document AI وPython
- تحليل النماذج باستخدام الذكاء الاصطناعي للمستندات (Python)
المعلومات التي ستطّلع عليها
- كيفية تصنيف وتحديد نقاط التقسيم للمستندات المتخصصة.
- كيفية استخراج الكيانات المخططة باستخدام معالِجات متخصّصة.
المتطلبات
2. بدء الإعداد
يفترض هذا الدرس التطبيقي حول الترميز أنّك أكملت خطوات إعداد Document AI الموضحة في الدرس التمهيدي حول الترميز.
يُرجى إكمال الخطوات التالية قبل المتابعة:
ستحتاج أيضًا إلى تثبيت Pandas، وهي مكتبة شائعة لتحليل البيانات في Python.
pip3 install --upgrade pandas
3- إنشاء معالجات متخصصة
يجب أولاً إنشاء مثيلات للمعالجات التي ستستخدمها في هذا البرنامج التعليمي.
- في وحدة التحكّم، انتقِل إلى Document AI Platform Overview
- انقر على إنشاء معالج، ثم مرِّر لأسفل إلى متخصص واختر مقسم مستند الشراء.
- أدخِل الاسم "codelab-procurement-splitter". (أو أي شيء آخر ستتذكره) وحدد أقرب منطقة في القائمة.
- انقر على إنشاء لإنشاء المعالج
- انسخ رقم تعريف معالج البيانات. يجب استخدام هذا في الرمز لاحقًا.
- كرِّر الخطوات من 2 إلى 6 باستخدام المحلل اللغوي للفواتير (الذي يمكنك تسميته "codelab-invoice-parser")
معالج الاختبار في وحدة التحكّم
يمكنك اختبار "المحلل اللغوي للفاتورة" في وحدة التحكم عن طريق تحميل مستند.
انقر على "تحميل مستند" واختَر فاتورة لتحليلها. ويمكنك تنزيل نموذج الفاتورة هذا واستخدامه إذا لم يكن لديك فاتورة متاحة للاستخدام.
يجب أن تبدو مخرجاتك على هذا النحو:
4. تنزيل نماذج المستندات
لدينا بعض النماذج من المستندات لاستخدامها في هذا التمرين.
يمكنك تنزيل ملفات 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- تصنيف تقسيم المستندات
ستستخدم في هذه الخطوة واجهة برمجة تطبيقات المعالجة على الإنترنت لتصنيف نقاط التقسيم المنطقية واكتشافها لمستند متعدد الصفحات.
يمكنك أيضًا استخدام واجهة برمجة تطبيقات المعالجة على دفعات إذا كنت تريد إرسال عدة ملفات أو إذا تجاوز حجم الملف الحد الأقصى للمعالجة على الإنترنت للصفحات. يمكنك الاطّلاع على كيفية إجراء ذلك في الدرس التطبيقي حول ترميز التعرّف البصري على الأحرف (OCR) للمستندات.
رمز تقديم طلب البيانات من واجهة برمجة التطبيقات مماثل لمعالج عام بخلاف رقم تعريف معالج البيانات.
مقسِّم/مصنِّف المشتريات
أنشئ ملفًا باسم 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- استخراج العناصر
يمكنك الآن استخراج الكيانات المخططة من الملفات، بما في ذلك درجات الثقة والخصائص والقيم التي تمّت تسويتها.
ويكون رمز تقديم طلب البيانات من واجهة برمجة التطبيقات مطابقًا للخطوة السابقة، ويمكن إجراء ذلك من خلال الطلبات على الإنترنت أو الطلبات المجمّعة.
سنحصل على المعلومات التالية من الكيانات:
- نوع الكيان
- (مثال:
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 for Prorement لتصنيف المستندات وتحليل الفاتورة. يدعم Document AI أيضًا الحلول المتخصّصة الأخرى المُدرجة هنا:
يمكنك اتباع الإجراء نفسه واستخدام الرمز نفسه للتعامل مع أي معالج بيانات متخصص.
إذا كنت ترغب في تجربة الحلول المتخصصة الأخرى، يمكنك إعادة تشغيل التمرين المعملي باستخدام أنواع معالجات أخرى ومستندات نموذجية متخصصة.
نماذج المستندات
إليك بعض نماذج المستندات التي يمكنك استخدامها لتجربة المعالجات المتخصصة الأخرى.
الحلّ | نوع المعالج | مستند |
الهوية | ||
إقراض | ||
إقراض | ||
العقود |
يمكنك العثور على نماذج مستندات أخرى ومخرجات معالج البيانات في المستندات.
8. تهانينا
تهانينا، لقد تمكّنت من استخدام Document AI بنجاح لتصنيف البيانات واستخراجها من المستندات المتخصّصة. ننصحك بتجربة أنواع المستندات المتخصّصة الأخرى.
تنظيف
لتجنُّب تحمُّل الرسوم المفروضة على حسابك على Google Cloud مقابل الموارد المستخدَمة في هذا البرنامج التعليمي:
- في Cloud Console، انتقِل إلى صفحة إدارة الموارد.
- في قائمة المشاريع، اختَر مشروعك ثم انقر على "حذف".
- في مربع الحوار، اكتب معرّف المشروع ثم انقر على "إيقاف التشغيل" لحذف المشروع.
مزيد من المعلومات
يمكنك مواصلة التعرّف على مزيد من المعلومات حول Document AI من خلال هذه الدروس التطبيقية حول الترميز.
- إدارة معالجات الذكاء الاصطناعي للمستندات باستخدام Python
- الذكاء الاصطناعي المستند إلى الذكاء الاصطناعي: Human in the Loop
- منصة عمل الذكاء الاصطناعي للمستندات: التدريب
- منصة عمل الذكاء الاصطناعي للمستندات: معالِجات مخصَّصة
المراجع
- مستقبل المستندات - قائمة تشغيل على YouTube
- مستندات الذكاء الاصطناعي للمستندات
- مكتبة برامج Python المستندة إلى الذكاء الاصطناعي (AI)
- نماذج الذكاء الاصطناعي للمستندات
الترخيص
هذا العمل مرخّص بموجب رخصة المشاع الإبداعي 2.0 مع نسب العمل إلى مؤلف عام.