ব্যাচে পিডিএফ পার্স করার সময়, কেন প্রতিটি প্রক্রিয়া নিজেই ফাইল খুলবে?
মাল্টি-প্রসেস টাস্কগুলিকে সিরিয়ালাইজেবল প্যারামিটারে পাস করা উচিত এবং প্রতিটি ওয়ার্ক ইউনিটকে ডকুমেন্ট বা পেজ অবজেক্ট শেয়ার করার পরিবর্তে স্বাধীনভাবে ডকুমেন্ট খুলতে দেওয়া উচিত। নিম্নলিখিত পরীক্ষাগুলি বিভক্ত কভারেজ এবং স্বাধীনভাবে খোলা কর্মী ফাংশনগুলি; পোর্টেবল এবং নিরীক্ষাযোগ্য থাকার জন্য, উদাহরণটি ক্রমিক করা হয় এবং এটি একটি বহু-প্রক্রিয়া কার্যক্ষমতা পরীক্ষা হিসাবে পাস করে না।
ব্যাচে পিডিএফ প্রসেস করার সময়, অনেক লোক একই ডকুমেন্ট অবজেক্ট শেয়ার করতে একাধিক প্রসেস চাইবে, এই ভেবে যে এটি ঝামেলা বাঁচবে। প্রকৃতপক্ষে, Document এবং Page অবজেক্টগুলি সেই প্রক্রিয়ার সাথে আবদ্ধ যা তাদের তৈরি করেছে, এবং প্রসেস জুড়ে তাদের ব্যবহার করার সময় সমস্যা দেখা দিতে পারে। এই নিবন্ধটি এমন ডেভেলপারদের জন্য উপযুক্ত যাদের PDF পৃষ্ঠাগুলিকে বিভক্ত করতে এবং ব্যাচে পাঠ্য বের করতে একাধিক প্রক্রিয়া ব্যবহার করতে হবে। পড়ার পর, আপনি জানতে পারবেন যে শিশু প্রক্রিয়ায় কোন প্যারামিটারগুলি পাস করা উচিত, কীভাবে শিশু প্রক্রিয়াটি ফাইলটি খুলতে হবে এবং কোন ক্ষেত্রে এটি একটি একক প্রক্রিয়ায় ফিরে আসা বা ওসিআর প্রবর্তন করা প্রয়োজন।
উদাহরণটি সিন্থেটিক নমুনা ব্যবহার করে এবং কোডটি মেমরিতে ইনপুট তৈরি করে। এটি সেগমেন্টেড কভারেজ এবং স্বাধীনভাবে খোলা ফাইলগুলির প্রক্রিয়াকরণ যাচাই করে এবং সমস্ত বাস্তব ফাইল বা পণ্যের কার্যকারিতার গ্যারান্টি উপস্থাপন করে না। গুরুত্বপূর্ণ নথিগুলি প্রক্রিয়া করার আগে, অনুগ্রহ করে মূলগুলি রাখুন এবং নীচের সীমানা এবং গ্রহণযোগ্য আইটেমগুলি অনুসারে সেগুলি পর্যালোচনা করুন৷
ব্যাচে পিডিএফ পার্স করার সময়, প্রতিটি প্রক্রিয়া কীভাবে ফাইলটি খুলবে? এক বাক্যে উপসংহার
মাল্টি-প্রসেস টাস্কগুলি সিরিয়ালাইজেবল প্যারামিটারে পাস করা উচিত এবং Document বা Page অবজেক্ট শেয়ার করার পরিবর্তে কাজের প্রতিটি ইউনিট স্বাধীনভাবে ডকুমেন্ট খুলতে হবে।
| আপনার অবস্থা | প্রস্তাবিত অভ্যাস | কারণ |
|---|---|---|
| PDF এর মাল্টি-প্রসেস ব্যাচ প্রসেসিং প্রয়োজন | ফাইলের নাম, পৃষ্ঠা নম্বর পরিসীমা ইত্যাদির মতো সিরিয়ালাইজেবল প্যারামিটারগুলি পাস করুন এবং প্রতিটি শিশু প্রক্রিয়া pymupdf.open() নিজে থেকেই কল করে | Document অন্তর্নিহিত সি স্ট্রাকচার পয়েন্টার এবং ফাইল হ্যান্ডেল ধারণ করে এবং প্রক্রিয়াগুলি জুড়ে নিরাপদে পাস করা যায় না |
Document বা Page বস্তু সরাসরি পাস করতে চান | সুপারিশ করা হয় না | আচার ব্যর্থতার কারণে বাধা দেবে, বা অবৈধ পয়েন্টারের কারণে ব্যতিক্রম |
| একাধিক প্রসেস একই আউটপুট ফাইলে লিখতে চায় | প্রতিটি প্রক্রিয়া স্বাধীন অস্থায়ী ফাইল লেখে, যা মূল প্রক্রিয়া দ্বারা একত্রিত হয় | যখন সিঙ্ক্রোনাইজেশন অনুপস্থিত থাকে, তখন বিষয়বস্তু স্তব্ধ বা দূষিত হতে পারে |
| ক্রস-পেজ অ্যাসোসিয়েশন প্রয়োজন, যেমন টেবিল ক্রস-পেজ মার্জিং এবং ফুল-টেক্সট ইন্ডেক্সিং | একক-প্রক্রিয়া প্রক্রিয়াকরণে ফিরে যান, বা একটি বিশেষ খণ্ডিত একত্রীকরণ কৌশল ডিজাইন করুন | প্রক্রিয়াগুলি একে অপরের থেকে বিচ্ছিন্ন এবং প্রসঙ্গ শেয়ার করতে পারে না |
কেন ডকুমেন্ট অবজেক্ট চাইল্ড প্রসেসে পাঠানো যাবে না?
মূল কারণ হল Document অভ্যন্তরীণভাবে অন্তর্নিহিত C কাঠামোতে পয়েন্টার এবং ফাইল হ্যান্ডলগুলি ধারণ করে। এই সম্পদগুলি তাদের তৈরি করা প্রক্রিয়ার মেমরি স্পেসে আবদ্ধ। প্রক্রিয়াগুলি পেরিয়ে যাওয়ার পরে, পয়েন্টারগুলি অবৈধ হয়ে যায় এবং হ্যান্ডেলগুলি অন্য প্রক্রিয়া দ্বারা আইনত অ্যাক্সেস করা যায় না।
সঠিক পন্থা হল ফাইলের নাম (স্ট্রিং) এবং পৃষ্ঠা পরিসীমার মতো শুধুমাত্র সিরিয়ালাইজেবল পরামিতিগুলি পাস করা এবং প্রতিটি শিশু প্রক্রিয়াকে pymupdf.open() স্বাধীনভাবে তার নিজস্ব মেমরি স্পেসে কল করতে দেওয়া। এটি একটি কর্মক্ষমতা আপস নয়. শিশু প্রক্রিয়াটি তার নিজের অধিকারে একটি স্বাধীন সত্তা এবং নিরাপদে আনা বা রেন্ডারিং ক্রিয়াকলাপগুলি সম্পাদন করার জন্য তার নিজস্ব নথির দৃষ্টান্ত প্রয়োজন৷
স্বয়ংসম্পূর্ণ রচনা উদাহরণ
নির্ভরতার জন্য নীচের কোডের আমদানি তালিকা দেখুন। কোডটি মেমরিতে ইনপুট তৈরি করে, এটি একটি বিচ্ছিন্ন পরিবেশে পুনরুত্পাদন করা সহজ করে তোলে।
import pymupdf
def partition(total, chunk):
if type(chunk) is not int or chunk <= 0:
raise ValueError("positive chunk required")
return [(start, min(start + chunk, total)) for start in range(0, total, chunk)]
def worker(raw, start, end):
with pymupdf.open(stream=raw, filetype="pdf") as doc:
return [(i, doc[i].get_text()) for i in range(start, end)]
with pymupdf.open() as doc:
for index in range(5):
doc.new_page().insert_text((50, 50), f"Page {index}")
raw = doc.tobytes()
tasks = partition(5, 2)
assert tasks == [(0, 2), (2, 4), (4, 5)]
results = [item for start, end in tasks for item in worker(raw, start, end)]
assert [i for i, text in results] == list(range(5))
assert all(f"Page {i}" in text for i, text in results)
assert partition(0, 2) == []
নির্ভরতা এবং অপারেশন নির্দেশাবলী
উদাহরণে, pool.map-এর chunksize ডিফল্ট মান 1 ব্যবহার করে, যেটি এমন পরিস্থিতিতে উপযুক্ত যেখানে একটি টাস্কের গ্রানুলারিটি বড়। যদি অনেক পৃষ্ঠা থাকে এবং একক পৃষ্ঠা প্রক্রিয়াকরণ দ্রুত হয়, তাহলে আন্তঃপ্রক্রিয়া যোগাযোগ ওভারহেড কমাতে chunksize বাড়ানো যেতে পারে। যাইহোক, এই উদাহরণ নিরাপত্তার উপর ফোকাস করে, পারফরম্যান্স টিউনিং নয়।
সংশ্লেষণ উদাহরণ: সঠিক ইনপুট এবং বিপদ সীমানা
সঠিক ইনপুট: টিপল (segment_id, filename, start_page, end_page) পাস করুন। যেখানে filename হল একটি স্ট্রিং পাথ এবং start_page এবং end_page হল পূর্ণসংখ্যা। পরামিতি প্রাপ্তির পরে, চাইল্ড প্রক্রিয়া নিজেই ফাইলটি খোলে, নির্দিষ্ট পৃষ্ঠা নম্বর পরিসর প্রক্রিয়া করে এবং ফলাফলের তালিকা প্রদান করে।
বিপদ সীমানা:
- পৃষ্ঠা সংখ্যা সীমার বাইরে: যদি পৃষ্ঠা নম্বরের পরিসরটি
(18, 25)হয়, কিন্তু নথিতে আসলে মাত্র 20টি পৃষ্ঠা থাকে, শিশু প্রক্রিয়াটি 21 পৃষ্ঠায় অ্যাক্সেস করলে সীমার বাইরে একটি সূচী ট্রিগার হবে৷ Documentসরাসরি পাস করা: আচার ব্যর্থ হলে ভেঙে যাবে।- একই ফাইল লেখা একাধিক প্রক্রিয়া: সিঙ্ক্রোনাইজেশন প্রক্রিয়া ছাড়া, আউটপুট বিষয়বস্তু ইন্টারলিভ বা ক্ষতিগ্রস্ত হবে।
সমাধান হল শিশু প্রক্রিয়ার প্রবেশের সময় পৃষ্ঠা নম্বরের পরিসর doc.page_count অতিক্রম করেছে কিনা তা অবিলম্বে যাচাই করা এবং সমস্ত I/O ক্রিয়াকলাপকে স্বাধীন লক্ষ্য পথ বা মেমরি বাফার ব্যবহার করতে দেওয়া। রানটাইম ধরার ব্যতিক্রমগুলির উপর নির্ভর না করে নন-সিরিয়ালাইজেবল অবজেক্টগুলিকে ডিজাইন পর্যায়ে টাস্ক প্যারামিটার থেকে বাদ দেওয়া উচিত।
📊 মূল তুলনা
| মাত্রা | পাস ডকুমেন্ট অবজেক্ট | সিরিয়ালাইজেবল প্যারামিটার পাস করুন (প্রস্তাবিত) |
|---|---|---|
| এটা প্রক্রিয়া জুড়ে পাস করা যেতে পারে? | না, আচারের কারণে এটি ব্যর্থ হবে | হ্যাঁ, স্ট্রিং এবং পূর্ণসংখ্যা সরাসরি পাস করা যেতে পারে |
| অন্তর্নিহিত সম্পদের মালিকানা | এটি তৈরি করা প্রক্রিয়ার সাথে আবদ্ধ | প্রতিটি শিশু প্রক্রিয়া নিজেই ফাইল খোলে |
| ত্রুটি আচরণ | pickle.PicklingError বা শিশু প্রক্রিয়া নিঃশব্দে ক্র্যাশ হয় | যদি পৃষ্ঠা নম্বরটি সীমার বাইরে থাকে তবে এটি প্রবেশদ্বারে যাচাই করা যেতে পারে। |
গ্রহণযোগ্যতার মানদণ্ড এবং ম্যানুয়াল পর্যালোচনা সীমানা
| ঘটনা পর্যবেক্ষণ করুন | সম্ভাব্য কারণ | প্রক্রিয়াকরণ সিদ্ধান্ত |
|---|---|---|
pickle.PicklingError বা শিশু প্রক্রিয়া নিঃশব্দে ক্র্যাশ হয় | দস্তাবেজ/পৃষ্ঠার মতো অ-ক্রমিক বস্তুগুলি পাস করা হয় | শুধুমাত্র স্ট্রিং, পূর্ণসংখ্যা, এবং tuples হিসাবে মৌলিক ধরনের পাস |
| আংশিক পৃষ্ঠা নম্বর খালি স্ট্রিং প্রদান করে | পৃষ্ঠার সংখ্যা পৃষ্ঠার প্রকৃত সংখ্যাকে ছাড়িয়ে গেছে, অথবা পৃষ্ঠাটি পাঠ্য স্তর ছাড়াই একটি বিশুদ্ধ চিত্র | পৃষ্ঠা নম্বর সীমানা যাচাই; বিশুদ্ধ চিত্র পৃষ্ঠা চিহ্নিত করার জন্য OCR প্রয়োজন, যা প্রত্যাশিত আচরণ |
| আউটপুট ফাইল বিষয়বস্তু বিকৃত হয় | একাধিক প্রক্রিয়া একই ফাইলে লিখুন | প্রতিটি প্রক্রিয়া স্বাধীন অস্থায়ী ফাইল লেখে, এবং প্রধান প্রক্রিয়া তাদের একত্রিত করে। |
| মেমরির ব্যবহার প্রক্রিয়ার সংখ্যার সাথে রৈখিকভাবে বৃদ্ধি পায় | প্রক্রিয়া প্রতি সম্পূর্ণ নথি লোড | এই ওভারহেড গ্রহণ করুন; নথিটি খুব বড় হলে, পরিবর্তে পেজড স্ট্রিমিং ব্যবহার করুন |
এই মোডটি এমন কাজের জন্য উপযুক্ত নয় যেগুলির জন্য ক্রস-পেজ কনটেক্সট অ্যাসোসিয়েশন প্রয়োজন, যেমন ক্রস-পেজ টেবিল মার্জিং এবং ফুল-টেক্সট ইনডেক্স বিল্ডিং, কারণ প্রক্রিয়াগুলি একে অপরের থেকে বিচ্ছিন্ন। এই ধরনের প্রয়োজনীয়তার সম্মুখীন হলে, আপনার একক-প্রক্রিয়া প্রক্রিয়াকরণে ফিরে আসা উচিত, বা একটি বিশেষ ব্লক একত্রীকরণ কৌশল ডিজাইন করা উচিত।
উপরন্তু, উদাহরণ শুধুমাত্র "নিরাপদ সমান্তরাল নিষ্কাশন" যাচাই করে, যার মানে এই নয় যে শেষ থেকে শেষ প্রভাব উপলব্ধ। পাঠ্যের গুণমান, কোডিং সঠিকতা এবং বিন্যাস সংরক্ষণের ডিগ্রি এখনও ম্যানুয়াল নমুনা পর্যালোচনার প্রয়োজন। স্ক্যান করা পিডিএফগুলিতে বিশেষ মনোযোগ দেওয়া উচিত, কারণ প্লেইন টেক্সট এক্সট্রাকশন সম্পূর্ণভাবে ব্যর্থ হতে পারে এবং এই সময়ে ওসিআর চালু করতে হবে।
যদি তুমি......
আপনি যদি সমান্তরালভাবে ব্যাচগুলিতে PDF টেক্সট বের করতে চান
পৃষ্ঠা নম্বর ব্যবধান অনুযায়ী কাজটি বিভক্ত করুন, শুধুমাত্র মৌলিক প্রকারগুলি পাস করুন যেমন ফাইলের নাম এবং পৃষ্ঠা নম্বর, এবং প্রতিটি উপ-প্রক্রিয়া ফাইলটি স্বাধীনভাবে খোলে।
আপনার টাস্কের জন্য পৃষ্ঠা জুড়ে ফলাফল মার্জ করার প্রয়োজন হলে
একটি একক প্রক্রিয়ায় ফিরে আসার জন্য অগ্রাধিকার দিন, বা একটি ব্লক একত্রিতকরণ কৌশল ডিজাইন করুন, এবং সমান্তরালতাকে জোর করবেন না।
আপনি যদি একটি স্ক্যান করা PDF নিয়ে কাজ করছেন
প্রথমে একটি টেক্সট স্তর আছে কিনা তা নিশ্চিত করুন। যদি না হয়, আপনাকে প্রক্রিয়াটিতে একটি OCR লিঙ্ক যোগ করতে হবে এবং আবার চেক করতে হবে।
❓ প্রায়শই জিজ্ঞাসিত প্রশ্ন (FAQ)
1. কেন ডকুমেন্ট অবজেক্ট সরাসরি চাইল্ড প্রসেসে পাঠানো যাবে না?
Document অভ্যন্তরীণভাবে পয়েন্টার এবং ফাইল হ্যান্ডলগুলিকে অন্তর্নিহিত C কাঠামোর দিকে নির্দেশ করে। এই সংস্থানগুলি যে প্রক্রিয়াটি তৈরি করেছে তার সাথে আবদ্ধ। প্রক্রিয়া পেরিয়ে যাওয়ার পরে তারা অবৈধ হয়ে যাবে। আচার ব্যর্থতার কারণে স্থানান্তরও ব্যাহত হবে।
2. চাইল্ড প্রসেসকে আলাদাভাবে ফাইল খুলতে হবে কেন?
একটি স্বাধীন সত্তা হিসাবে, শিশু প্রক্রিয়ার নিজেই নিজের নথির উদাহরণ প্রয়োজন যাতে নিরাপদে নিষ্কাশন বা রেন্ডারিং সম্পূর্ণ করা যায়। এটি সঠিক পদ্ধতি এবং কর্মক্ষমতা ত্রুটি নয়।
3. পৃষ্ঠা নম্বর পরিসীমা অতিক্রম করলে আমার কী করা উচিত?
শিশু প্রক্রিয়ার প্রবেশের সময় পৃষ্ঠা নম্বরটি doc.page_count ছাড়িয়ে গেছে কিনা তা অবিলম্বে পরীক্ষা করুন। সীমা ছাড়িয়ে গেলে অ্যাক্সেস করা চালিয়ে যাবেন না।
4. একই সময়ে একাধিক প্রসেস একই আউটপুট ফাইলে লিখতে পারে?
সুপারিশ করা হয় না. যখন কোন সিঙ্ক্রোনাইজেশন মেকানিজম থাকে না, তখন বিষয়বস্তু ইন্টারলিভ বা ক্ষতিগ্রস্ত হবে। প্রতিটি প্রক্রিয়া স্বাধীন অস্থায়ী ফাইল লিখতে অনুমতি দেওয়া উচিত, এবং তারপর মূল প্রক্রিয়া দ্বারা একত্রীকরণ.
📝 সারাংশ
একাধিক প্রক্রিয়ায় পিডিএফ প্রক্রিয়া করার সময়, সিরিয়ালাইজেবল প্যারামিটারগুলি পাস করা এবং প্রতিটি উপ-প্রক্রিয়াকে স্বাধীনভাবে ফাইলটি খুলতে দেওয়া নিরাপদ। ক্রস-পৃষ্ঠা সম্পর্কিত কাজগুলি এবং স্ক্যান করা ফাইলগুলিকে আলাদাভাবে মূল্যায়ন করা দরকার এবং শেষ পর্যন্ত বাস্তব নমুনাগুলি এখনও ম্যানুয়াল নমুনা পর্যালোচনার জন্য ব্যবহার করা প্রয়োজন৷
এটি এখনই চেষ্টা করুন: অনুবাদ শুরু করতে নথিটি আপলোড করুন, মূল বিন্যাস বজায় রেখে৷
নথি অনুবাদের জন্য চেকলিস্ট ব্যবহার করুন
প্রথমে পৃষ্ঠার ক্রম, উৎসের অবস্থান এবং পাঠ্যের অখণ্ডতা পরীক্ষা করুন এবং তারপর অনুবাদ প্রক্রিয়ায় একই অসংবেদনশীল নমুনা জমা দিন। অনুবাদের পরে, আপনাকে এখনও শিরোনাম, পাঠ্য এবং চিত্রগুলি সঠিকভাবে সঙ্গতিপূর্ণ কিনা তা পরীক্ষা করতে হবে। আপনি কেবল পাঠ্যটি মসৃণ কিনা তা পরীক্ষা করতে পারবেন না।
OmniDoc (পণ্য পোর্টাল) একটি মাল্টি-ফরম্যাট নথি অনুবাদ পোর্টাল প্রদান করে, এবং অফিসিয়াল ওয়েবসাইট OCR, শব্দকোষ এবং দ্বিভাষিক তুলনা ফাংশনগুলি প্রবর্তন করে। যে দলগুলি ফাইল থেকে সরাসরি কাজ করতে চায় তাদের জন্য, এটি বাস্তব জীবনের নমুনাগুলির সাথে মূল্যায়ন করার মতো একটি পথ। আপনার কাছে আপলোড করার অনুমতি আছে এমন সংবেদনশীল ফাইলগুলি ব্যবহার করুন এবং ফলাফলগুলি পর্যালোচনা করতে এই নিবন্ধে চেক আইটেমগুলি ব্যবহার করুন৷ এই নিবন্ধে OmniDoc ওপেন সোর্স লাইব্রেরি বা অভ্যন্তরীণ অ্যালগরিদম ব্যবহার করে এমন কোনও দাবি নেই, বা উদাহরণগুলি পণ্যের কার্যকারিতা পরীক্ষার বিকল্প নয়।
রেফারেন্স ইন্টারফেস ভিত্তি: PyMuPDF ডকুমেন্টেশন


