ডকুমেন্ট এআই (পাইথন) সহ বিশেষায়িত প্রসেসর

১. ভূমিকা

এই কোডল্যাবে, আপনি শিখবেন কিভাবে পাইথন ব্যবহার করে ডকুমেন্ট এআই স্পেশালাইজড প্রসেসরের সাহায্যে বিশেষায়িত ডকুমেন্ট শ্রেণীবদ্ধ ও পার্স করতে হয়। শ্রেণীবদ্ধকরণ এবং বিভাজনের জন্য, আমরা চালান, রসিদ এবং ইউটিলিটি বিল সম্বলিত একটি উদাহরণ পিডিএফ ফাইল ব্যবহার করব। তারপর, পার্সিং এবং এনটিটি এক্সট্র্যাকশনের জন্য, আমরা উদাহরণ হিসেবে একটি চালান ব্যবহার করব।

এই পদ্ধতি এবং উদাহরণ কোডটি ডকুমেন্ট এআই দ্বারা সমর্থিত যেকোনো বিশেষায়িত ডকুমেন্টের ক্ষেত্রে কাজ করবে।

পূর্বশর্ত

এই কোডল্যাবটি ডকুমেন্ট এআই-এর অন্যান্য কোডল্যাবে উপস্থাপিত বিষয়বস্তুর উপর ভিত্তি করে তৈরি করা হয়েছে।

এগিয়ে যাওয়ার আগে নিম্নলিখিত কোডল্যাবগুলি সম্পন্ন করার পরামর্শ দেওয়া হচ্ছে:

আপনি যা শিখবেন

  • বিশেষায়িত নথিপত্রের বিভাজন বিন্দুগুলো কীভাবে শ্রেণিবদ্ধ ও শনাক্ত করা যায়।
  • বিশেষায়িত প্রসেসর ব্যবহার করে কীভাবে স্কিম্যাটাইজড এনটিটিগুলো নিষ্কাশন করা যায়।

আপনার যা যা লাগবে

  • একটি গুগল ক্লাউড প্রজেক্ট
  • একটি ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স
  • পাইথন ৩ সম্পর্কে জ্ঞান

২. প্রস্তুতি গ্রহণ

এই কোডল্যাবটি ধরে নেয় যে আপনি প্রারম্ভিক কোডল্যাবে তালিকাভুক্ত ডকুমেন্ট এআই সেটআপ ধাপগুলো সম্পন্ন করেছেন।

এগিয়ে যাওয়ার আগে অনুগ্রহ করে নিম্নলিখিত ধাপগুলো সম্পন্ন করুন:

আপনাকে পাইথনের একটি জনপ্রিয় ডেটা অ্যানালাইসিস লাইব্রেরি, পান্ডাস (Pandas) -ও ইনস্টল করতে হবে।

pip3 install --upgrade pandas

৩. বিশেষায়িত প্রসেসর তৈরি করুন

এই টিউটোরিয়ালের জন্য আপনি যে প্রসেসরগুলো ব্যবহার করবেন, সেগুলোর ইনস্ট্যান্স প্রথমে তৈরি করতে হবে।

  1. কনসোলে, ডকুমেন্ট এআই প্ল্যাটফর্ম ওভারভিউ- তে যান।
  2. Create Processor-এ ক্লিক করুন, নিচে স্ক্রল করে Specialized পর্যন্ত যান এবং Procurement Doc Splitter নির্বাচন করুন।
  3. এটির নাম দিন "codelab-procurement-splitter" (অথবা এমন কিছু যা আপনার মনে থাকবে) এবং তালিকা থেকে সবচেয়ে কাছের অঞ্চলটি নির্বাচন করুন।
  4. আপনার প্রসেসর তৈরি করতে ক্রিয়েট-এ ক্লিক করুন।
  5. প্রসেসর আইডিটি কপি করুন। পরবর্তীতে আপনার কোডে এটি অবশ্যই ব্যবহার করতে হবে।
  6. ইনভয়েস পার্সার (যার নাম আপনি 'codelab-invoice-parser' রাখতে পারেন) ব্যবহার করে ধাপ ২-৬ পুনরাবৃত্তি করুন।

কনসোলে প্রসেসর পরীক্ষা করুন

আপনি কনসোলে একটি ডকুমেন্ট আপলোড করে ইনভয়েস পার্সারটি পরীক্ষা করে দেখতে পারেন।

আপলোড ডকুমেন্ট-এ ক্লিক করুন এবং পার্স করার জন্য একটি ইনভয়েস নির্বাচন করুন। আপনার কাছে ব্যবহারের জন্য কোনো ইনভয়েস না থাকলে, আপনি এই নমুনা ইনভয়েসটি ডাউনলোড করে ব্যবহার করতে পারেন।

google_invoice.png

আপনার আউটপুটটি দেখতে এইরকম হবে:

ইনভয়েসপার্সার.png

৪. নমুনা নথি ডাউনলোড করুন

এই ল্যাবের জন্য আমাদের কাছে কয়েকটি নমুনা নথি রয়েছে।

আপনি নিচের লিঙ্কগুলো ব্যবহার করে পিডিএফগুলো ডাউনলোড করতে পারেন। তারপর সেগুলো ক্লাউড শেল ইনস্ট্যান্সে আপলোড করুন

বিকল্পভাবে, আপনি 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 .

৫. নথিগুলোকে শ্রেণিবদ্ধ ও বিভক্ত করুন।

এই ধাপে আপনি একটি বহু-পৃষ্ঠার ডকুমেন্টের যৌক্তিক বিভাজন বিন্দুগুলোকে শ্রেণিবদ্ধ করতে ও শনাক্ত করতে অনলাইন প্রসেসিং এপিআই ব্যবহার করবেন।

আপনি যদি একাধিক ফাইল পাঠাতে চান অথবা ফাইলের আকার অনলাইন প্রসেসিংয়ের সর্বোচ্চ পৃষ্ঠা সংখ্যা অতিক্রম করে, তাহলে ব্যাচ প্রসেসিং এপিআই-ও ব্যবহার করতে পারেন। ডকুমেন্ট এআই ওসিআর কোডল্যাবে আপনি এটি কীভাবে করতে হয় তা দেখে নিতে পারেন।

প্রসেসর আইডি ছাড়া, একটি সাধারণ প্রসেসরের জন্য এপিআই অনুরোধ করার কোডটি হুবহু একই।

ক্রয় বিভাজক/শ্রেণীবিভাজক

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]

লক্ষ্য করুন, প্রকিউরমেন্ট স্প্লিটার/ক্লাসিফায়ারটি পৃষ্ঠা ০-১ এবং ৩-৪-এর নথির প্রকারগুলো সঠিকভাবে শনাক্ত করেছে।

পৃষ্ঠা ২-এ একটি সাধারণ মেডিকেল ভর্তির ফর্ম থাকায়, ক্লাসিফায়ারটি এটিকে সঠিকভাবে other হিসেবে শনাক্ত করেছে।

৬. সত্তাগুলো নিষ্কাশন করুন

এখন আপনি ফাইলগুলো থেকে কনফিডেন্স স্কোর, প্রোপার্টি এবং নর্মালাইজড ভ্যালু সহ স্কিম্যাটাইজড এনটিটিগুলো এক্সট্র্যাক্ট করতে পারবেন।

এপিআই অনুরোধ করার কোডটি আগের ধাপের মতোই, এবং এটি অনলাইন বা ব্যাচ অনুরোধের মাধ্যমে করা যেতে পারে।

আমরা সত্তাগুলো থেকে নিম্নলিখিত তথ্যগুলো সংগ্রহ করব:

  • সত্তার ধরণ
    • (যেমন 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%

৭. ঐচ্ছিক: অন্যান্য বিশেষায়িত প্রসেসর ব্যবহার করে দেখুন

আপনি সফলভাবে ডকুমেন্ট এআই ফর প্রকিউরমেন্ট ব্যবহার করে ডকুমেন্ট শ্রেণীবদ্ধ করেছেন এবং একটি ইনভয়েস বিশ্লেষণ করেছেন। ডকুমেন্ট এআই এখানে তালিকাভুক্ত অন্যান্য বিশেষায়িত সমাধানগুলোও সমর্থন করে:

যেকোনো বিশেষায়িত প্রসেসর পরিচালনা করার জন্য আপনি একই পদ্ধতি ও কোড ব্যবহার করতে পারেন।

আপনি যদি অন্যান্য বিশেষায়িত সমাধানগুলো পরখ করে দেখতে চান, তাহলে অন্য ধরনের প্রসেসর এবং বিশেষায়িত নমুনা নথি ব্যবহার করে ল্যাবটি পুনরায় চালাতে পারেন।

নমুনা নথি

এখানে কিছু নমুনা নথি দেওয়া হল যা আপনি অন্যান্য বিশেষায়িত প্রসেসরগুলি পরীক্ষা করার জন্য ব্যবহার করতে পারেন।

সমাধান

প্রসেসরের ধরন

নথি

পরিচয়

মার্কিন ড্রাইভার লাইসেন্স পার্সার

ঋণদান

লেন্ডিং স্প্লিটার এবং ক্লাসিফায়ার

ঋণদান

W9 পার্সার

চুক্তি

চুক্তি পার্সার

আপনি ডকুমেন্টেশনে অন্যান্য নমুনা ডকুমেন্ট এবং প্রসেসর আউটপুট খুঁজে পেতে পারেন।

৮. অভিনন্দন

অভিনন্দন, আপনি সফলভাবে ডকুমেন্ট এআই ব্যবহার করে বিশেষায়িত নথি থেকে ডেটা শ্রেণিবদ্ধ ও নিষ্কাশন করেছেন। আমরা আপনাকে অন্যান্য বিশেষায়িত ধরনের নথি নিয়েও পরীক্ষা-নিরীক্ষা করতে উৎসাহিত করছি।

পরিষ্কার-পরিচ্ছন্নতা

এই টিউটোরিয়ালে ব্যবহৃত রিসোর্সগুলির জন্য আপনার গুগল ক্লাউড অ্যাকাউন্টে চার্জ হওয়া এড়াতে:

  • ক্লাউড কনসোলে, রিসোর্স পরিচালনা (Manage resources) পৃষ্ঠায় যান।
  • প্রজেক্ট তালিকা থেকে আপনার প্রজেক্টটি নির্বাচন করে ডিলিট-এ ক্লিক করুন।
  • ডায়ালগ বক্সে প্রজেক্ট আইডি টাইপ করুন এবং তারপর প্রজেক্টটি মুছে ফেলার জন্য 'শাট ডাউন'-এ ক্লিক করুন।

আরও জানুন

এই পরবর্তী কোডল্যাবগুলোর মাধ্যমে ডকুমেন্ট এআই সম্পর্কে আরও জানুন।

সম্পদ

লাইসেন্স

এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন ২.০ জেনেরিক লাইসেন্সের অধীনে রয়েছে।