معالجات متخصصة باستخدام الذكاء الاصطناعي للمستندات (Python)

1. مقدمة

في هذا الدرس التطبيقي حول الترميز، ستتعلّم كيفية استخدام المعالجات المتخصصة في تكنولوجيا الذكاء الاصطناعي للمستندات لتصنيف المستندات المتخصّصة وتحليلها باستخدام لغة بايثون. للتصنيف والتقسيم، سنستخدم ملف pdf كمثال يحتوي على الفواتير والإيصالات وكشوف الخدمات. بعد ذلك، سنستخدم فاتورة كمثال من أجل التحليل واستخراج الكيانات.

سيعمل هذا الإجراء ونموذج الرمز البرمجي مع أي مستند متخصص متوافق مع Document AI.

المتطلبات الأساسية

يعتمد هذا الدرس التطبيقي حول الترميز على المحتوى المقدَّم في الدروس التطبيقية الأخرى حول الترميز الخاص بالذكاء الاصطناعي للمستندات.

ننصحك بإكمال الدروس التطبيقية التالية حول الترميز قبل المتابعة:

المعلومات التي ستطّلع عليها

  • كيفية تصنيف وتحديد نقاط التقسيم للمستندات المتخصصة.
  • كيفية استخراج الكيانات المخططة باستخدام معالِجات متخصّصة.

المتطلبات

  • مشروع على Google Cloud
  • متصفح، مثل Chrome أو Firefox
  • معرفة بايثون 3

2. بدء الإعداد

يفترض هذا الدرس التطبيقي حول الترميز أنّك أكملت خطوات إعداد Document AI الموضحة في الدرس التمهيدي حول الترميز.

يُرجى إكمال الخطوات التالية قبل المتابعة:

ستحتاج أيضًا إلى تثبيت Pandas، وهي مكتبة شائعة لتحليل البيانات في Python.

pip3 install --upgrade pandas

3- إنشاء معالجات متخصصة

يجب أولاً إنشاء مثيلات للمعالجات التي ستستخدمها في هذا البرنامج التعليمي.

  1. في وحدة التحكّم، انتقِل إلى Document AI Platform Overview
  2. انقر على إنشاء معالج، ثم مرِّر لأسفل إلى متخصص واختر مقسم مستند الشراء.
  3. أدخِل الاسم "codelab-procurement-splitter". (أو أي شيء آخر ستتذكره) وحدد أقرب منطقة في القائمة.
  4. انقر على إنشاء لإنشاء المعالج
  5. انسخ رقم تعريف معالج البيانات. يجب استخدام هذا في الرمز لاحقًا.
  6. كرِّر الخطوات من 2 إلى 6 باستخدام المحلل اللغوي للفواتير (الذي يمكنك تسميته "codelab-invoice-parser")

معالج الاختبار في وحدة التحكّم

يمكنك اختبار "المحلل اللغوي للفاتورة" في وحدة التحكم عن طريق تحميل مستند.

انقر على "تحميل مستند" واختَر فاتورة لتحليلها. ويمكنك تنزيل نموذج الفاتورة هذا واستخدامه إذا لم يكن لديك فاتورة متاحة للاستخدام.

google_invoice.png

يجب أن تبدو مخرجاتك على هذا النحو:

InvoiceParser.png

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 أيضًا الحلول المتخصّصة الأخرى المُدرجة هنا:

يمكنك اتباع الإجراء نفسه واستخدام الرمز نفسه للتعامل مع أي معالج بيانات متخصص.

إذا كنت ترغب في تجربة الحلول المتخصصة الأخرى، يمكنك إعادة تشغيل التمرين المعملي باستخدام أنواع معالجات أخرى ومستندات نموذجية متخصصة.

نماذج المستندات

إليك بعض نماذج المستندات التي يمكنك استخدامها لتجربة المعالجات المتخصصة الأخرى.

الحلّ

نوع المعالج

مستند

الهوية

محلّل لغوي لرخص القيادة الأمريكية

إقراض

مقسّمات الإقراض المصنِّف

إقراض

المحلل اللغوي W9

العقود

محلّل للعقد

يمكنك العثور على نماذج مستندات أخرى ومخرجات معالج البيانات في المستندات.

8. تهانينا

تهانينا، لقد تمكّنت من استخدام Document AI بنجاح لتصنيف البيانات واستخراجها من المستندات المتخصّصة. ننصحك بتجربة أنواع المستندات المتخصّصة الأخرى.

تنظيف

لتجنُّب تحمُّل الرسوم المفروضة على حسابك على Google Cloud مقابل الموارد المستخدَمة في هذا البرنامج التعليمي:

  • في Cloud Console، انتقِل إلى صفحة إدارة الموارد.
  • في قائمة المشاريع، اختَر مشروعك ثم انقر على "حذف".
  • في مربع الحوار، اكتب معرّف المشروع ثم انقر على "إيقاف التشغيل" لحذف المشروع.

مزيد من المعلومات

يمكنك مواصلة التعرّف على مزيد من المعلومات حول Document AI من خلال هذه الدروس التطبيقية حول الترميز.

المراجع

الترخيص

هذا العمل مرخّص بموجب رخصة المشاع الإبداعي 2.0 مع نسب العمل إلى مؤلف عام.