কিভাবে পিডিএফ-এ একটি পরিমাণ পুনরুদ্ধার করবেন, পৃষ্ঠায় তার অবস্থান
এই নিবন্ধটি একটি নির্দিষ্ট আয়তক্ষেত্রের মধ্যে বারবার পরিমাণ পাঠ্য সনাক্ত করতে PyMuPDF ব্যবহার করে দেখায়। অক্টেট শব্দের প্রথম পাঁচটি ক্ষেত্র পার্স করে এবং প্রার্থীর সংখ্যা যাচাই করে, খণ্ড বিভাজনে ভুল ধারণা এড়ানো যায়। মেমরি-স্তরের পাইথন উদাহরণ, সীমানা প্রক্রিয়াকরণ কৌশল এবং গ্রহণযোগ্যতা সারণী প্রদান করে এবং OmniDoc নথি অনুবাদ কর্মপ্রবাহের সাথে সংযোগ করার জন্য ব্যবহারিক পরামর্শ দেয়।
কিভাবে ডুপ্লিকেট পরিমাণ সনাক্ত করতে হয়? এক বাক্যে উপসংহার
লেআউট স্থির হয়ে গেলে, প্রথমে পরিচিত এলাকা সীমাবদ্ধ করুন এবং তারপরে পাঠ্যটি পরীক্ষা করুন এবং বিচারের জন্য প্রার্থীর সংখ্যা কলারের কাছে ছেড়ে দিন। নিয়মিত অভিব্যক্তির স্তূপ চালিয়ে যাওয়ার চেয়ে ব্যাখ্যা করা সহজ এবং এতে নীরব ভুল হওয়ার সম্ভাবনা কম।
| আপনার অবস্থা | প্রস্তাবিত অভ্যাস | কারণ |
|---|---|---|
| পৃষ্ঠার একাধিক জায়গায় একই পরিমাণ দেখা যাচ্ছে | অনুসন্ধানটি আয়তক্ষেত্রাকার অঞ্চলে সীমাবদ্ধ করুন যেখানে ব্যবসার ক্ষেত্রটি অবস্থিত এবং তারপরে অনুসন্ধান করুন | সম্পূর্ণ পাঠ্য অনুসন্ধান কোন ক্ষেত্রটি ব্যবসার ক্ষেত্র তা নির্ধারণ করতে পারে না |
| ক্যোয়ারী এলাকায় একাধিক প্রার্থী রয়েছে | লেবেল বা ম্যানুয়াল দ্ব্যর্থতা সহ একত্রিত সমস্ত প্রার্থীকে ফেরত দিন | প্রোগ্রাম ব্যবসার জন্য পছন্দ করা উচিত নয় |
| ক্যোয়ারী এলাকায় কোন হিট নেই | কারণ চিহ্নিত করুন এবং মূল পৃষ্ঠাটি পরীক্ষা করুন, শূন্য প্যাডিং নেই | ভুল অঞ্চল, বিভক্ত পরিমাণ, বা অনুপস্থিত পাঠ্য স্তর শূন্য হিট হতে পারে |
| ফ্রেমের অবস্থান অফসেট দেখায় | ঘূর্ণন, ক্রপিং এবং রেন্ডারিং স্কেলিং এর জন্য স্পষ্ট রূপান্তর চেইন | ডিসপ্লে স্থানাঙ্ক এবং নিষ্কাশিত স্থানাঙ্ক মিশ্রিত করলে বিচ্যুতি ঘটবে |
একটি বিবৃতিতে দুটি অভিন্ন রাশি
1,200.00 একটি বিবৃতিতে দুবার উপস্থিত হয়: একবার বকেয়া কলামে এবং একবার বর্ণনা পাঠ্যে। পূর্ণ-পাঠ্য অনুসন্ধান তাদের খুঁজে পেতে পারে, কিন্তু এটি আপনার জন্য সিদ্ধান্ত নিতে পারে না কোনটি ব্যবসার ক্ষেত্র।
যদি ফর্ম লেআউটটি স্থির করা হয়, তবে নিয়মিত অভিব্যক্তি সামঞ্জস্য করার চেয়ে প্রথমে একটি পরিচিত এলাকা সীমাবদ্ধ করে এবং তারপর পাঠ্য অনুসন্ধান করে ব্যাখ্যা করা সহজ। মূল বিষয় হল "শুধুমাত্র একটি বাক্স খুঁজে বের করা" নয়, তবে শূন্য হিট এবং একাধিক হিট উভয়কেই পরিষ্কার ফলাফল হিসাবে বিবেচনা করা এবং প্রোগ্রামটিকে অননুমোদিত পছন্দ করতে না দেওয়া।
শুধু লেখা নয়, শব্দের অবস্থান ছেড়ে দিন
PyMuPDF এর `page.get_text("words")` অবস্থান সহ একটি শব্দ রেকর্ড প্রদান করে, সাধারণ ক্ষেত্রটি হল (x0, y0, x1, y1, text, block_no, line_no, word_no)। নিম্নলিখিত উদাহরণটি শুধুমাত্র প্রথম পাঁচটি ক্ষেত্র নেয়, এবং শেষ তিনটি সংখ্যা আপাতত আঞ্চলিক ফিল্টারিংয়ের সাথে জড়িত নয়।
এখানে "শব্দ" হল নিষ্কাশনকারী দ্বারা প্রদত্ত খণ্ড, যা ভাষাগত অর্থে একটি শব্দের সমান নয়, এবং এটি নিশ্চিত নয় যে একটি পরিমাণ সর্বদা একটি সম্পূর্ণ খণ্ড হবে৷ 1,200.00 বিচ্ছিন্ন করা হতে পারে বা সংলগ্ন ট্যাগ থাকতে পারে। এই নিবন্ধটি শুধুমাত্র সম্পূর্ণ টুকরোগুলির সঠিক মিলের সাথে সম্পর্কিত: আমি বরং এমন রেকর্ডগুলি হস্তান্তর করব যা পর্যালোচনার জন্য শর্ত পূরণ করে না তাদের আপাতদৃষ্টিতে আইনি পরিমাণে বিভক্ত করার চেয়ে।
একই পরিমাণের দুটি সিন্থেটিক পেজ দিয়ে যাচাই করুন
আমরা মেমরিতে একটি নতুন PDF পৃষ্ঠা তৈরি করি এবং উল্লম্ব স্থানাঙ্ক 120 এবং 420 এর কাছে একই পরিমাণ রাখি। ক্যোয়ারী এলাকা শুধুমাত্র উপরের পরিমাণ কভার করে.
পাঠ্য সন্নিবেশ বিন্দু হল বেসলাইন অবস্থান, পাঠ্য বাক্সের উপরের বাম কোণে নয়। আসল বাক্সের উচ্চতা এবং প্রস্থ ফন্ট এবং ফন্টের আকার দ্বারা প্রভাবিত হবে, তাই স্থানাঙ্কগুলিকে একটি নির্দিষ্ট মানতে হার্ড-কোড করা যাবে না।
একটি সঠিক আউটপুট দুটি শর্ত পূরণ করা উচিত:
- প্রশ্নোত্তর এলাকায় কেবল একজন প্রার্থী রয়েছেন এবং প্রার্থীর আয়তক্ষেত্রটি সম্পূর্ণরূপে অঞ্চলের মধ্যে রয়েছে।
- পুরো পৃষ্ঠায় প্রশ্নের পরিধি প্রসারিত করার পরে, দু'জন প্রার্থীকে পেতে হবে, এইভাবে অস্পষ্টতা শাখায় প্রবেশ করতে হবে।
অবশেষে, পৃষ্ঠায় না থাকা স্ট্রিং সহ শূন্য হিট পরীক্ষা করুন। এর জন্য কেবল একটি সফল প্রদর্শনের চেয়ে বাস্তব ইন্টারফেসের কাছাকাছি একটি চুক্তি প্রয়োজন।
রানেবল কোড: কলারকে প্রার্থীর পরিমাণ দিন
নির্ভরতা হল pymupdf। অনুগ্রহ করে পরীক্ষার পরিবেশে সংস্করণটি ইনস্টল করুন এবং লক করুন। নিচের কোডটি নেটওয়ার্ক অ্যাক্সেস করে না, ফাইল লেখে না এবং বিদ্যমান ক্লায়েন্ট ডকুমেন্টগুলি সংশোধন করে না; এটি কেবল প্রদর্শনের জন্য একটি পিডিএফ তৈরি করে।
import pymupdf
def locate(page, target, query):
query = pymupdf.Rect(query)
candidates = []
for word in page.get_text("words"):
x0, y0, x1, y1, text = word[:5]
box = pymupdf.Rect(x0, y0, x1, y1)
if text == target and query.contains(box):
candidates.append(tuple(box))
return candidates
def decide(candidates):
if len(candidates) == 0:
return "missing"
if len(candidates) > 1:
return "ambiguous"
return "unique"
with pymupdf.open() as doc:
page = doc.new_page(width=595, height=842)
page.insert_text((80, 120), "1,200.00", fontsize=11)
page.insert_text((80, 420), "1,200.00", fontsize=11)
query = pymupdf.Rect(72, 100, 300, 150)
local = locate(page, "1,200.00", query)
assert decide(local) == "unique"
assert query.contains(pymupdf.Rect(local[0]))
assert decide(locate(page, "1,200.00", page.rect)) == "ambiguous"
assert decide(locate(page, "999.99", query)) == "missing"
print("unique / ambiguous / missing cases passed")
contains এর সম্পূর্ণ অন্তর্ভুক্তি প্রয়োজন, কেবল এলাকার প্রান্তটি স্পর্শ করা নয়। যদি কোয়েরি বাক্সটি খুব শক্ত হয় তবে প্রান্তের পরিমাণটি শূন্য হিটে পড়তে পারে, যা স্বয়ংক্রিয়ভাবে পুরো পৃষ্ঠাটি শিথিল করার কারণ নয়। পরিসীমাটি কীভাবে সামঞ্জস্য করবেন তা সিদ্ধান্ত নেওয়ার আগে আপনার প্রথমে পরিমাপ এলাকার জন্য ব্যবহৃত স্থানাঙ্ক সিস্টেমটি পরীক্ষা করা উচিত।
যদি ব্যবসাটি সেন্টার পয়েন্টকে পড়ে যাওয়ার অনুমতি দেয়, তবে সীমানা ওভারল্যাপের জন্য একটি পৃথক নিয়ম এবং পরিপূরক পরীক্ষা লিখুন। একই ফাংশনের মধ্যে গোপনে রায়ের অর্থ পরিবর্তন করবেন না।
ব্যতিক্রমগুলি ব্লক করার জন্য উত্পাদন যুক্তি কেবল assert এর উপর নির্ভর করা উচিত নয়, কারণ অপ্টিমাইজেশন প্যাটার্নগুলি দাবিগুলি সরিয়ে ফেলতে পারে। উদাহরণের দাবিগুলি রিগ্রেশন চেকের জন্য ব্যবহৃত হয়; যখন সত্যই টাস্ক লাইনে অ্যাক্সেস করা হয়, তখন সুস্পষ্ট শর্তাধীন শাখা এবং ব্যবসায়িক অবস্থা ব্যবহার করা উচিত।
তিনটি ফলাফল, এটি পরিচালনা করার তিনটি উপায়
কোয়েরি ফলাফলগুলি সাধারণত তিনটি বিভাগে বিভক্ত করা হয়, প্রতিটি বিভিন্ন প্রক্রিয়াকরণ ক্রিয়া প্রয়োজন:
- শুধুমাত্র একটি হিট : এই অঞ্চলে কেবল একটি সম্পূর্ণ মিলে যাওয়া টুকরো রয়েছে, পৃষ্ঠা নম্বর, মূল পাঠ্য, আয়তক্ষেত্র এবং নিয়ম সংস্করণ সংরক্ষণ করে।
- জিরো হিট: সম্ভবত ভুল অঞ্চল, বিভাজিত পরিমাণ, বা অনুপস্থিত পাঠ্য স্তরগুলির কারণে। প্রার্থী হিসাবে কারণটি চিহ্নিত করুন, মূল পৃষ্ঠাটি পরীক্ষা করুন এবং শূন্য পূরণ করবেন না।
- একাধিক হিট: যদি একই এলাকায় ডুপ্লিকেট পরিমাণ থাকে বা টেমপ্লেটটি পরিবর্তিত হয়, তবে সমস্ত প্রার্থীকে ফেরত দিন, ট্যাগগুলি একত্রিত করুন বা ম্যানুয়ালি দ্ব্যর্থতা নিরসন করুন।
অন্য দুটি পরিস্থিতিও আলাদাভাবে পরিচালনা করা দরকার:
- বাক্স কিন্তু ভুল মান: পাঠ্য স্তরটি নিজেই ভুল হতে পারে বা মিলে যাওয়া লক্ষ্যটি ভুল হতে পারে; যাচাইয়ের জন্য মূল পৃষ্ঠায় ফিরে যান এবং স্থানাঙ্কগুলিকে সংখ্যাসূচক মান দ্বারা অনুমোদিত হওয়ার অনুমতি দেবেন না।
- বক্স অফসেট : ডিসপ্লে এবং নিষ্কাশন স্থানাঙ্কগুলি মিশ্রিত হতে পারে, ঘূর্ণন, ক্রপিং এবং রেন্ডারিং স্কেলিংয়ের জন্য পরিষ্কার ট্রানজিশন চেইন প্রয়োজন।
📊 মূল তুলনা
| তদন্ত পদ্ধতি | নির্ধারণের মানদণ্ড | সাবধানতা অবলম্বন করা দরকার |
|---|---|---|
| সম্পূর্ণ অন্তর্ভুক্তি (উদাহরণ ব্যবহৃত) | প্রার্থী আয়তক্ষেত্রটি সম্পূর্ণরূপে কোয়েরি এলাকার মধ্যে স্থাপন করা হয়েছে | যদি কোয়েরি বাক্সটি খুব শক্ত হয় তবে প্রান্তের পরিমাণটি শূন্য হিট হতে পারে |
| সেন্টার পয়েন্ট পড়ে (নিয়মগুলি আলাদাভাবে লিখতে হবে) | প্রার্থী কেন্দ্র পয়েন্টগুলি অঞ্চলের মধ্যে অবস্থিত | সীমানা ওভারল্যাপের জন্য পৃথক পরিপূরক পরীক্ষা প্রয়োজন |
| সম্পূর্ণ পৃষ্ঠাগুলি অনুসন্ধান করা হচ্ছে | সকল প্রার্থী অনুসন্ধান করুন | বেশিরভাগ ফলাফল অস্পষ্ট এবং লেবেলিং বা ম্যানুয়াল আরও বিচারের প্রয়োজন হয় |
এটি একটি সর্বজনীন পরিমাণ এক্সট্রাক্টর নয়
কোডটি মুদ্রা, হাজার হাজার বিভাজক বা দশমিক নিয়মগুলি বিশ্লেষণ করে না, বা এটি "বর্তমান সময়কাল প্রদেয়" এবং "পূর্ববর্তী সময়কালের ব্যালেন্স" এর মতো শব্দার্থকে স্বীকৃতি দেয় না। কেবল একজন প্রার্থী থাকার অর্থ এই নয় যে ব্যবসাটি সঠিক অর্থ।
স্ক্যান করা অনুলিপিটি প্রথমে পাঠ্য এবং অবস্থান উপলব্ধ হওয়া দরকার। পাঠ্য স্তর কিন্তু ভুল বিষয়বস্তু সহ পৃষ্ঠাগুলি কেবল অনুলিপি করা যেতে পারে বলে অনুমতি দেওয়া যাবে না।
এই নিবন্ধটি একটি অঘূর্ণিত রচনা পৃষ্ঠা ব্যবহার করে। যখন প্রকৃত পৃষ্ঠাটি ঘোরানো হয়, প্রথমে নির্দিষ্ট করুন যে কোয়েরি বাক্সটি প্রদর্শন স্ক্রিন থেকে আসে নাকি স্থানাঙ্কগুলি নিষ্কাশন করে এবং কেবলমাত্র প্রয়োজন হলে রূপান্তর করুন। উৎস নির্বিশেষে ম্যাট্রিক্স দ্বারা গুণ করবেন না।
উৎস পৃষ্ঠাগুলি সংরক্ষণ করার সময়, শূন্য-থেকে-শূন্য সূচক এবং ব্যক্তি-মুখী পৃষ্ঠা সংখ্যার মধ্যে পার্থক্য করুন যাতে পার্শ্ববর্তী পৃষ্ঠাগুলি পরীক্ষা করার সময় প্রমাণের অস্তিত্ব নেই এমন ভুল ধারণা এড়াতে পারে।
🎯 কোন পদ্ধতিটি আপনার জন্য উপযুক্ত?
যদি আপনার একটি নির্দিষ্ট লেআউট ফর্ম থেকে ডেটা বের করার প্রয়োজন হয়
প্রথমে, ব্যবসায়ের ক্ষেত্রটি যেখানে অবস্থিত সেই অঞ্চলটি সীমাবদ্ধ করুন, তারপরে পরিমাণটি সন্ধান করুন এবং পৃষ্ঠা নম্বর, আয়তক্ষেত্র এবং নিয়ম সংস্করণটি সংরক্ষণ করুন।
একাধিক প্রার্থীর মুখোমুখি হলে
প্রথম বিকল্পটি সরাসরি গ্রহণ করবেন না; সমস্ত প্রার্থীকে ফিরিয়ে দিন এবং ট্যাগ বা ম্যানুয়াল রায়ের উপর ভিত্তি করে ব্যবসায়ের ক্ষেত্রগুলি নির্ধারণ করুন।
যদি আপনার পৃষ্ঠাটি প্রায়শই শূন্য-হিট হয়ে যায়
প্রথমে, অঞ্চলটি স্থানাঙ্ক, পরিমাণ এবং পাঠ্য স্তরটি বিদ্যমান কিনা তা পরীক্ষা করুন, তারপরে সুযোগটি সামঞ্জস্য করবেন বা অন্যান্য নিষ্কাশন রুটে স্যুইচ করবেন কিনা তা সিদ্ধান্ত নিন।
আপনি যদি ডকুমেন্ট অনুবাদ করতে চান
পরিমাণ, তারিখ এবং পরিমাণের মতো মূল বিবরণ ম্যানুয়াল পর্যালোচনাতে অন্তর্ভুক্ত করা হয়, প্রযুক্তিগত পরিদর্শন এবং ম্যানুয়াল পর্যালোচনার মধ্যে শ্রমের স্পষ্ট বিভাজন সহ।
অনুবাদ পর্যালোচনার জন্য মূল সংখ্যাগুলি ছেড়ে দিন
ডকুমেন্ট অনুবাদ কেবল বাক্যের সাবলীলতার উপর ভিত্তি করে নয়, পরিমাণ, তারিখ এবং পরিমাণের মতো মূল আইটেমগুলির উপরও হওয়া উচিত। OmniDoc (প্রোডাক্ট এন্ট্রি) একাধিক ডকুমেন্ট অনুবাদ পোর্টাল সরবরাহ করে এবং অফিসিয়াল ওয়েবসাইটে প্রবর্তিত দ্বিভাষিক তুলনা একটি পর্যালোচনা এন্ট্রি পয়েন্ট হিসাবে কাজ করতে পারে; কোঅর্ডিনেট পজিশনিং স্ক্রিপ্টগুলি মূল প্রমাণ সংরক্ষণ এবং সমস্যার ক্ষেত্রগুলি সনাক্ত করতে সহায়তা করার জন্য উপযুক্ত।
আপনার আপলোড করার জন্য অনুমোদিত একটি ডিসেনসিটাইজেশন নমুনা ব্যবহার করে প্রথমে মূল্যায়ন করার পরামর্শ দেওয়া হয়। অনুবাদ দীর্ঘ হওয়ার সাথে সাথে বিষয়বস্তুর অবস্থান যুক্তিসঙ্গতভাবে পরিবর্তিত হতে পারে এবং "নতুন এবং পুরাতন স্থানাঙ্কগুলি ঠিক একই" সঠিক অনুবাদের জন্য একটি কঠিন শর্ত হিসাবে গ্রহণ করা উচিত নয়।
আরও মূল্যবান চেকগুলি হ'ল: পরিমাণটি ধরে রাখা হয়েছে কিনা, মুদ্রাটি স্পষ্টভাবে সংজ্ঞায়িত করা হয়েছে কিনা এবং সংশ্লিষ্ট লেবেলটি এখনও একই ব্যবসায়ের অর্থের দিকে ইঙ্গিত করে কিনা।
❓ প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী (FAQ)
1. কেন শুধু প্রথম আঘাত নিচ্ছে না?
কারণ পূর্ণ-পাঠ্য অনুসন্ধান কেবল আপনাকে বলতে পারে যে পরিমাণটি কোথায় প্রদর্শিত হয় এবং ব্যবসায়ের ক্ষেত্রটি কোন অংশটি তা নির্ধারণ করতে পারে না। সরাসরি প্রথম আঘাত নেওয়া সঠিক বলে মনে হতে পারে, তবে উত্সটি ইতিমধ্যে ভুল হতে পারে।
2. কেন কোয়েরি বাক্সটি কেবল প্রান্তটি স্পর্শ করার পরিবর্তে সম্পূর্ণ অন্তর্ভুক্তি প্রয়োজন?
উদাহরণটি অসম্পূর্ণ বিভাগগুলিকে বৈধ হিট হিসাবে বিবেচনা করা এড়াতে একটি সম্পূর্ণরূপে অন্তর্ভুক্ত নির্ধারণ পদ্ধতি ব্যবহার করে। যদি কোয়েরি বাক্সটি খুব শক্ত হয় এবং শূন্য হিট সৃষ্টি করে, তবে পুরো পৃষ্ঠাটি স্বয়ংক্রিয়ভাবে প্রশস্ত করার পরিবর্তে প্রথমে স্থানাঙ্ক সিস্টেম এবং পরিসীমাটি পরীক্ষা করুন।
3. কোয়েরির ফলাফল শূন্য হলে আপনার কী করা উচিত?
প্রার্থীর কারণ চিহ্নিত করুন এবং মূল পৃষ্ঠাটি পরীক্ষা করুন; শূন্য যোগ করবেন না। ভুল অঞ্চল, বিভাজিত পরিমাণ বা অনুপস্থিত পাঠ্য স্তরগুলি শূন্য হিট হতে পারে।
4. এই কোডটি কি সরাসরি আসল বিলে ব্যবহার করা যেতে পারে?
এটি সরাসরি ব্যবহার করা যাবে না। উদাহরণটি মুদ্রা, হাজার বিভাজক বা ব্যবসায়ের শব্দার্থ পরিচালনা করে না এবং এই নিবন্ধের সংশ্লেষণ নমুনা বাস্তব বিলের জন্য নির্ভুলতা পরীক্ষার প্রতিনিধিত্ব করে না।
📝 সারসংক্ষেপ
পরিমাণ নির্ধারণ করার সময়, প্রথমে অঞ্চলটি সংজ্ঞায়িত করুন, তারপরে বিচারের জন্য কলারকে প্রার্থীদের পুরো সংখ্যা দিন। শূন্য এবং একাধিক হিট উভয়ের পরিষ্কার হ্যান্ডলিং ক্রিয়া থাকা উচিত। প্রথমত, নিয়মগুলি যাচাই করার জন্য অ্যানক্সিমাইজড নমুনাগুলি ব্যবহার করুন, তারপরে ধীরে ধীরে বাস্তব নথিগুলি সংহত করুন।
এখনই অভিজ্ঞতা: অনুবাদ শুরু করতে আপনার নথি আপলোড করুন, মূল ফর্ম্যাটিং সংরক্ষণ করুন


