১. ভূমিকা
এই কোডল্যাবে আপনি শিখবেন কিভাবে পাইথন ব্যবহার করে ডকুমেন্ট এআই ফর্ম পার্সার দিয়ে হাতে লেখা ফর্ম পার্স করতে হয়।
আমরা উদাহরণ হিসেবে একটি সাধারণ মেডিকেল ভর্তি ফর্ম ব্যবহার করব, কিন্তু এই পদ্ধতিটি DocAI দ্বারা সমর্থিত যেকোনো সাধারণ ফর্মের ক্ষেত্রেই কাজ করবে।
পূর্বশর্ত
এই কোডল্যাবটি ডকুমেন্ট এআই-এর অন্যান্য কোডল্যাবে উপস্থাপিত বিষয়বস্তুর উপর ভিত্তি করে তৈরি করা হয়েছে।
এগিয়ে যাওয়ার আগে নিম্নলিখিত কোডল্যাবগুলো সম্পন্ন করার পরামর্শ দেওয়া হচ্ছে।
আপনি যা শিখবেন
- ডকুমেন্ট এআই ফর্ম পার্সার ব্যবহার করে স্ক্যান করা ফর্ম থেকে ডেটা কীভাবে পার্স ও এক্সট্র্যাক্ট করবেন।
আপনার যা যা লাগবে
- একটি গুগল ক্লাউড প্রজেক্ট
- একটি ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স
- পাইথন ৩ সম্পর্কে জ্ঞান
জরিপ
আপনি এই টিউটোরিয়ালটি কীভাবে ব্যবহার করবেন?
পাইথন নিয়ে আপনার অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?
গুগল ক্লাউড পরিষেবা ব্যবহারের অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?
২. সেটআপ এবং প্রয়োজনীয়তা
এই কোডল্যাবটি ধরে নেয় যে আপনি Document AI OCR কোডল্যাব- এ তালিকাভুক্ত Document AI সেটআপের ধাপগুলো সম্পন্ন করেছেন।
এগিয়ে যাওয়ার আগে অনুগ্রহ করে নিম্নলিখিত ধাপগুলো সম্পন্ন করুন:
আপনাকে পাইথনের জন্য একটি ওপেন সোর্স ডেটা অ্যানালাইসিস লাইব্রেরি, পান্ডাস (Pandas) -ও ইনস্টল করতে হবে।
pip3 install --upgrade pandas
৩. একটি ফর্ম পার্সার প্রসেসর তৈরি করুন
এই টিউটোরিয়ালটি ব্যবহারের জন্য আপনাকে প্রথমে ডকুমেন্ট এআই প্ল্যাটফর্মে একটি ফর্ম পার্সার প্রসেসর ইনস্ট্যান্স তৈরি করতে হবে।
- কনসোলে, ডকুমেন্ট এআই প্ল্যাটফর্ম ওভারভিউ- তে যান।
- Create Processor-এ ক্লিক করুন এবং Form Parser নির্বাচন করুন।

- একটি প্রসেসরের নাম নির্দিষ্ট করুন এবং তালিকা থেকে আপনার অঞ্চল নির্বাচন করুন।
- আপনার প্রসেসর তৈরি করতে ক্রিয়েট-এ ক্লিক করুন।
- আপনার প্রসেসর আইডি কপি করুন। পরবর্তীতে আপনার কোডে এটি অবশ্যই ব্যবহার করতে হবে।
ক্লাউড কনসোলে প্রসেসর পরীক্ষা করুন
আপনি কনসোলে একটি ডকুমেন্ট আপলোড করে আপনার প্রসেসরটি পরীক্ষা করে দেখতে পারেন। 'আপলোড ডকুমেন্ট'-এ ক্লিক করুন এবং পার্স করার জন্য একটি ফর্ম নির্বাচন করুন। আপনার কাছে ব্যবহারের জন্য কোনো নমুনা ফর্ম না থাকলে, আপনি এই নমুনা ফর্মটি ডাউনলোড করে ব্যবহার করতে পারেন।

আপনার আউটপুটটি দেখতে এইরকম হবে: 
৪. নমুনা ফর্মটি ডাউনলোড করুন
আমাদের কাছে একটি নমুনা নথি আছে, যাতে একটি সাধারণ চিকিৎসা তথ্য সংগ্রহের ফর্ম রয়েছে।
আপনি নিচের লিঙ্কটি ব্যবহার করে পিডিএফটি ডাউনলোড করতে পারেন। তারপর এটি ক্লাউড শেল ইনস্ট্যান্সে আপলোড করুন ।
বিকল্পভাবে, আপনি gsutil ব্যবহার করে আমাদের পাবলিক গুগল ক্লাউড স্টোরেজ বাকেট থেকে এটি ডাউনলোড করতে পারেন।
gsutil cp gs://cloud-samples-data/documentai/codelabs/form-parser/intake-form.pdf .
নিচের কমান্ডটি ব্যবহার করে ফাইলটি আপনার ক্লাউড শেলে ডাউনলোড হয়েছে কিনা তা নিশ্চিত করুন:
ls -ltr intake-form.pdf
৫. ফর্ম থেকে কী/ভ্যালু জোড়া বের করুন
এই ধাপে আপনি পূর্বে তৈরি করা ফর্ম পার্সার প্রসেসরটিকে কল করার জন্য অনলাইন প্রসেসিং এপিআই ব্যবহার করবেন। তারপর, আপনি ডকুমেন্টটিতে থাকা কী-ভ্যালু পেয়ারগুলো বের করবেন।
অনলাইন প্রসেসিং হলো একটিমাত্র ডকুমেন্ট পাঠানো এবং উত্তরের জন্য অপেক্ষা করার একটি পদ্ধতি। আপনি যদি একাধিক ফাইল পাঠাতে চান অথবা ফাইলের আকার অনলাইন প্রসেসিংয়ের সর্বোচ্চ পৃষ্ঠাসংখ্যা অতিক্রম করে, তবে ব্যাচ প্রসেসিংও ব্যবহার করতে পারেন। এটি কীভাবে করতে হয়, তা আপনি OCR কোডল্যাবে দেখে নিতে পারেন।
প্রসেসর আইডি ছাড়া প্রতিটি প্রসেসর টাইপের জন্য প্রসেস রিকোয়েস্ট করার কোড একই।
ডকুমেন্ট রেসপন্স অবজেক্টটিতে ইনপুট ডকুমেন্টের পৃষ্ঠাগুলোর একটি তালিকা থাকে।
প্রতিটি page অবজেক্টে ফর্ম ফিল্ডগুলোর একটি তালিকা এবং টেক্সটের মধ্যে সেগুলোর অবস্থান থাকে।
নিম্নলিখিত কোডটি প্রতিটি পৃষ্ঠার মধ্য দিয়ে পুনরাবৃত্তি করে এবং প্রতিটি কী, ভ্যালু ও কনফিডেন্স স্কোর বের করে। এটি একটি কাঠামোগত ডেটা যা ডেটাবেসে আরও সহজে সংরক্ষণ করা যায় বা অন্যান্য অ্যাপ্লিকেশনে ব্যবহার করা যায়।
form_parser.py নামে একটি ফাইল তৈরি করুন এবং নিচের কোডটি ব্যবহার করুন।
form_parser.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 image:
image_content = image.read()
# Load Binary Data into Document AI RawDocument Object
raw_document = documentai.RawDocument(
content=image_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
def trim_text(text: str):
"""
Remove extra space characters from text (blank, newline, tab, etc.)
"""
return text.strip().replace("\n", " ")
PROJECT_ID = "YOUR_PROJECT_ID"
LOCATION = "YOUR_PROJECT_LOCATION" # Format is 'us' or 'eu'
PROCESSOR_ID = "FORM_PARSER_ID" # Create processor in Cloud Console
# The local file in your current working directory
FILE_PATH = "intake-form.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,
)
names = []
name_confidence = []
values = []
value_confidence = []
for page in document.pages:
for field in page.form_fields:
# Get the extracted field names
names.append(trim_text(field.field_name.text_anchor.content))
# Confidence - How "sure" the Model is that the text is correct
name_confidence.append(field.field_name.confidence)
values.append(trim_text(field.field_value.text_anchor.content))
value_confidence.append(field.field_value.confidence)
# Create a Pandas Dataframe to print the values in tabular format.
df = pd.DataFrame(
{
"Field Name": names,
"Field Name Confidence": name_confidence,
"Field Value": values,
"Field Value Confidence": value_confidence,
}
)
print(df)
এখন আপনার কোডটি রান করুন এবং আপনি দেখবেন যে টেক্সটটি এক্সট্র্যাক্ট হয়ে আপনার কনসোলে প্রিন্ট হয়েছে।
আমাদের নমুনা ডকুমেন্টটি ব্যবহার করলে আপনি নিম্নলিখিত আউটপুটটি দেখতে পাবেন:
$ python3 form_parser.py
Field Name Field Name Confidence Field Value Field Value Confidence
0 Phone #: 0.999982 (906) 917-3486 0.999982
1 Emergency Contact: 0.999972 Eva Walker 0.999972
2 Marital Status: 0.999951 Single 0.999951
3 Gender: 0.999933 F 0.999933
4 Occupation: 0.999914 Software Engineer 0.999914
5 Referred By: 0.999862 None 0.999862
6 Date: 0.999858 9/14/19 0.999858
7 DOB: 0.999716 09/04/1986 0.999716
8 Address: 0.999147 24 Barney Lane 0.999147
9 City: 0.997718 Towaco 0.997718
10 Name: 0.997345 Sally Walker 0.997345
11 State: 0.996944 NJ 0.996944
...
৬. টেবিল পার্স করুন
ফর্ম পার্সার ডকুমেন্টের ভেতরের টেবিল থেকেও ডেটা বের করতে পারে। এই ধাপে, আমরা একটি নতুন নমুনা ডকুমেন্ট ডাউনলোড করব এবং টেবিল থেকে ডেটা বের করব। যেহেতু আমরা ডেটাটি পান্ডাসে লোড করছি, তাই এই ডেটা একটিমাত্র মেথড কলের মাধ্যমেই CSV ফাইল এবং আরও অনেক ফরম্যাটে আউটপুট করা যেতে পারে।
টেবিল সহ নমুনা ফর্মটি ডাউনলোড করুন
আমাদের কাছে একটি নমুনা ডকুমেন্ট আছে, যাতে একটি নমুনা ফর্ম এবং একটি টেবিল রয়েছে।
আপনি নিচের লিঙ্কটি ব্যবহার করে পিডিএফটি ডাউনলোড করতে পারেন। তারপর এটি ক্লাউড শেল ইনস্ট্যান্সে আপলোড করুন ।
বিকল্পভাবে, আপনি gsutil ব্যবহার করে আমাদের পাবলিক গুগল ক্লাউড স্টোরেজ বাকেট থেকে এটি ডাউনলোড করতে পারেন।
gsutil cp gs://cloud-samples-data/documentai/codelabs/form-parser/form_with_tables.pdf .
নিচের কমান্ডটি ব্যবহার করে ফাইলটি আপনার ক্লাউড শেলে ডাউনলোড হয়েছে কিনা তা নিশ্চিত করুন:
ls -ltr form_with_tables.pdf
টেবিলের ডেটা বের করুন
টেবিলের ডেটা প্রসেস করার অনুরোধটি কী-ভ্যালু পেয়ার বের করার অনুরোধের মতোই হুবহু একই। পার্থক্যটা হলো, রেসপন্সের কোন ফিল্ডগুলো থেকে আমরা ডেটা বের করি। টেবিলের ডেটা pages[].tables[] ফিল্ডে সংরক্ষিত থাকে।
এই উদাহরণটি প্রতিটি টেবিল ও পৃষ্ঠার হেডার সারি এবং বডি সারি থেকে তথ্য সংগ্রহ করে, তারপর টেবিলটি প্রিন্ট করে এবং একটি CSV ফাইল হিসেবে সংরক্ষণ করে।
table_parsing.py নামে একটি ফাইল তৈরি করুন এবং নিচের কোডটি ব্যবহার করুন।
table_parsing.py
# type: ignore[1]
"""
Uses Document AI online processing to call a form parser processor
Extracts the tables and data in the document.
"""
from os.path import splitext
from typing import List, Sequence
import pandas as pd
from google.cloud import 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 image:
image_content = image.read()
# Load Binary Data into Document AI RawDocument Object
raw_document = documentai.RawDocument(
content=image_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
def get_table_data(
rows: Sequence[documentai.Document.Page.Table.TableRow], text: str
) -> List[List[str]]:
"""
Get Text data from table rows
"""
all_values: List[List[str]] = []
for row in rows:
current_row_values: List[str] = []
for cell in row.cells:
current_row_values.append(
text_anchor_to_text(cell.layout.text_anchor, text)
)
all_values.append(current_row_values)
return all_values
def text_anchor_to_text(text_anchor: documentai.Document.TextAnchor, text: str) -> str:
"""
Document AI identifies table data by their offsets in the entirety of the
document's text. This function converts offsets to a string.
"""
response = ""
# If a text segment spans several lines, it will
# be stored in different text segments.
for segment in text_anchor.text_segments:
start_index = int(segment.start_index)
end_index = int(segment.end_index)
response += text[start_index:end_index]
return response.strip().replace("\n", " ")
PROJECT_ID = "YOUR_PROJECT_ID"
LOCATION = "YOUR_PROJECT_LOCATION" # Format is 'us' or 'eu'
PROCESSOR_ID = "FORM_PARSER_ID" # Create processor before running sample
# The local file in your current working directory
FILE_PATH = "form_with_tables.pdf"
# Refer to https://cloud.google.com/document-ai/docs/file-types
# 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,
)
header_row_values: List[List[str]] = []
body_row_values: List[List[str]] = []
# Input Filename without extension
output_file_prefix = splitext(FILE_PATH)[0]
for page in document.pages:
for index, table in enumerate(page.tables):
header_row_values = get_table_data(table.header_rows, document.text)
body_row_values = get_table_data(table.body_rows, document.text)
# Create a Pandas Dataframe to print the values in tabular format.
df = pd.DataFrame(
data=body_row_values,
columns=pd.MultiIndex.from_arrays(header_row_values),
)
print(f"Page {page.page_number} - Table {index}")
print(df)
# Save each table as a CSV file
output_filename = f"{output_file_prefix}_pg{page.page_number}_tb{index}.csv"
df.to_csv(output_filename, index=False)
এখন আপনার কোডটি রান করুন এবং আপনি দেখবেন যে টেক্সটটি এক্সট্র্যাক্ট হয়ে আপনার কনসোলে প্রিন্ট হয়েছে।
আমাদের নমুনা ডকুমেন্টটি ব্যবহার করলে আপনি নিম্নলিখিত আউটপুটটি দেখতে পাবেন:
$ python3 table_parsing.py
Page 1 - Table 0
Item Description
0 Item 1 Description 1
1 Item 2 Description 2
2 Item 3 Description 3
Page 1 - Table 1
Form Number: 12345678
0 Form Date: 2020/10/01
1 Name: First Last
2 Address: 123 Fake St
যে ডিরেক্টরি থেকে আপনি কোডটি চালাচ্ছেন, সেখানে আপনার দুটি নতুন CSV ফাইলও থাকা উচিত।
$ ls form_with_tables_pg1_tb0.csv form_with_tables_pg1_tb1.csv table_parsing.py
৭. অভিনন্দন
অভিনন্দন, আপনি সফলভাবে ডকুমেন্ট এআই এপিআই ব্যবহার করে একটি হাতে লেখা ফর্ম থেকে ডেটা বের করেছেন। আমরা আপনাকে অন্যান্য ফর্ম ডকুমেন্ট নিয়েও পরীক্ষা করার জন্য উৎসাহিত করছি।
পরিষ্কার করা
এই টিউটোরিয়ালে ব্যবহৃত রিসোর্সগুলির জন্য আপনার গুগল ক্লাউড অ্যাকাউন্টে চার্জ হওয়া এড়াতে:
- ক্লাউড কনসোলে, রিসোর্স পরিচালনা (Manage resources) পৃষ্ঠায় যান।
- প্রজেক্ট তালিকা থেকে আপনার প্রজেক্টটি নির্বাচন করে ডিলিট-এ ক্লিক করুন।
- ডায়ালগ বক্সে প্রজেক্ট আইডি টাইপ করুন এবং তারপর প্রজেক্টটি মুছে ফেলার জন্য 'শাট ডাউন'-এ ক্লিক করুন।
আরও জানুন
এই পরবর্তী কোডল্যাবগুলোর মাধ্যমে ডকুমেন্ট এআই সম্পর্কে আরও জানুন।
- ডকুমেন্ট এআই (পাইথন) সহ বিশেষায়িত প্রসেসর
- পাইথন ব্যবহার করে ডকুমেন্ট এআই প্রসেসর পরিচালনা করা
- ডকুমেন্ট এআই: হিউম্যান ইন লুপ
সম্পদ
লাইসেন্স
এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন ২.০ জেনেরিক লাইসেন্সের অধীনে রয়েছে।