পিডিএফ অনুভূমিক দেখায়, কিন্তু নিষ্কাশিত স্থানাঙ্কগুলি ভুল: ঘূর্ণন ম্যাট্রিক্স পরিষ্কারভাবে ব্যাখ্যা করুন
পিডিএফ ঘূর্ণিত পৃষ্ঠাগুলির সমন্বয়হীন বিভাজন সমস্যা বিশ্লেষণ করুন, এবং PyMuPDF-এ অপরিবর্তিত স্থান এবং প্রদর্শন স্থানের মধ্যে ম্যাট্রিক্স রূপান্তর বিশদভাবে ব্যাখ্যা করুন। নথি অনুবাদ কর্মপ্রবাহে জটিল বিন্যাস পুনরুদ্ধার প্রভাবগুলি মূল্যায়ন করতে OmniDoc কীভাবে ব্যবহার করতে হয় তা ব্যাখ্যা করতে মেমরি সংশ্লেষণের উদাহরণ এবং গ্রহণযোগ্যতা চেকলিস্ট প্রদান করে৷
আমি যখন পিডিএফ প্রক্রিয়া করছিলাম, তখন আমি স্পষ্ট দেখতে পেলাম যে টেবিলটি পৃষ্ঠার ডানদিকে ছিল, কিন্তু নিষ্কাশিত স্থানাঙ্কগুলি উপরের বাম কোণে নির্দেশ করে, অথবা হাইলাইট করা রঙের ব্লক হেডার অবস্থানে পড়ে। এই ধরনের সমস্যা প্রায়শই পার্সিং লাইব্রেরিতে একটি বাগ নয়, কিন্তু PDF এর স্থানাঙ্ক সিস্টেম এবং ভিজ্যুয়াল রেন্ডারিংয়ের মধ্যে একটি অসঙ্গতি। এই নিবন্ধটি এমন ডেভেলপারদের জন্য যাদের টেক্সট পজিশনিং, এলাকা ম্যাচিং বা টীকা অঙ্কন করতে হবে। এটি ব্যাখ্যা করে যে কীভাবে /Rotate অ্যাট্রিবিউটের কারণে স্থানাঙ্ক বিভ্রান্তি সৃষ্টি হয় এবং রূপান্তর সম্পূর্ণ করতে PyMuPDF-এর ঘূর্ণন ম্যাট্রিক্স ব্যবহার করে।
এই নিবন্ধের উদাহরণগুলি সমস্ত মেমরিতে সংশ্লেষিত এবং কোনও বাস্তব ফাইল পড়া হয় না। গুরুত্বপূর্ণ নথিগুলি প্রক্রিয়া করার আগে, অনুগ্রহ করে মূলগুলি রাখুন এবং তারপরে নথিতে থাকা সীমানা এবং গ্রহণযোগ্য আইটেমগুলি অনুসারে সেগুলি একে একে পর্যালোচনা করুন৷
ঘূর্ণনের পর পিডিএফ-এর স্থানাঙ্কগুলি না মিললে আমার কী করা উচিত? এক বাক্যে উপসংহার
অপরিবর্তিত স্থানাঙ্কগুলিকে স্থানাঙ্ক প্রদর্শনে রূপান্তর করতে Page.rotation_matrix ব্যবহার করুন এবং প্রক্রিয়াকরণের আগে পৃষ্ঠা অনুসারে page.rotation পৃষ্ঠাটি পরীক্ষা করুন। অনুমান করবেন না যে সমস্ত পৃষ্ঠাগুলির স্থানাঙ্কের দিকনির্দেশগুলি সামঞ্জস্যপূর্ণ।
| আপনার অবস্থা | প্রস্তাবিত অভ্যাস | কারণ |
|---|---|---|
| নিষ্কাশিত পাঠ্য স্থানাঙ্কগুলি ভিজ্যুয়াল অবস্থানের সাথে মেলে না | প্লট করার আগে স্থানাঙ্কগুলিকে Page.rotation_matrix দ্বারা গুণ করুন | ডিফল্টরূপে, টেক্সট স্থানাঙ্কগুলি অপরিবর্তিত পৃষ্ঠার সাপেক্ষে ফেরত দেওয়া হয়। |
| মূল স্থানাঙ্কে ক্লিকের অবস্থানকে ম্যাপ করতে হবে | বিপরীত রূপান্তরের জন্য Page.derotation_matrix ব্যবহার করুন | এই ম্যাট্রিক্সটি প্রদর্শন স্থানাঙ্ক থেকে আনরোটেড স্থানাঙ্কে বিপরীত রূপান্তর সম্পাদন করে |
| মাত্রা সামগ্রিক অফসেট নির্দিষ্ট দূরত্ব | CropBox এবং MediaBox চেক করুন, page.cropbox_position দিয়ে ক্ষতিপূরণ দিন | দুটি উত্সের মধ্যে অসঙ্গতি একটি নির্দিষ্ট অফসেটের কারণ হবে |
| পৃষ্ঠাগুলি একই নথিতে বিভিন্ন কোণে ঘোরে | পৃষ্ঠা অনুসারে page.rotation পৃষ্ঠা পড়ুন, বিশ্বব্যাপী ম্যাট্রিক্সকে মাল্টিপ্লেক্স করবেন না | বিভিন্ন পৃষ্ঠার ঘূর্ণন অবস্থা ভিন্ন হতে পারে |
| জটিল বিন্যাস (একাধিক কলাম মিশ্রিত এবং আংশিকভাবে ঘোরানো চার্ট) | স্বয়ংক্রিয় প্রক্রিয়া থামান এবং ম্যানুয়াল বিচারে স্যুইচ করুন | এই ধরনের পৃষ্ঠাগুলিতে স্বয়ংক্রিয় বৈধতা ব্যর্থ হতে পারে |
অপরিবর্তিত স্থান এবং প্রদর্শিত স্থানের মধ্যে পার্থক্য বুঝুন
PDF পৃষ্ঠাগুলি 0, 90, 180 বা 270 ডিগ্রি মান সহ /Rotate বৈশিষ্ট্য বহন করতে পারে। পাঠক রেন্ডার করার সময় এই ঘূর্ণন স্বয়ংক্রিয়ভাবে প্রয়োগ করা হয়, কিন্তু পৃষ্ঠা বিষয়বস্তুর প্রবাহের স্থানাঙ্কগুলি এখনও অপরিবর্তিত মূল মিডিয়াবক্সের উপর ভিত্তি করে। আপনি যদি সরাসরি অঙ্কন বা এলাকার মিলের জন্য নিষ্কাশিত মূল স্থানাঙ্ক ব্যবহার করেন, তাহলে ফলাফলগুলি ভুলভাবে সংযোজন করা হবে।
PyMuPDF স্পষ্টভাবে v1.17.0 থেকে শুরু করে এই দুটি স্থানাঙ্ক সিস্টেমের মধ্যে পার্থক্য করে:
- আবর্তিত স্থান:
Page.get_text(),Page.get_image_bbox()এবং সমস্ত টীকা বস্তুর স্থানাঙ্কগুলি ডিফল্টরূপে অপরিবর্তিত পৃষ্ঠার সাপেক্ষে ফেরত দেওয়া হয়। - ডিসপ্লে স্পেস: শুধুমাত্র
Page.rectএবংPage.bound()ঘূর্ণনের পর প্রকৃত ডিসপ্লের আকার প্রতিফলিত করবে।
এই নকশা সামগ্রী নিষ্কাশন স্থিতিশীল রাখে। পৃষ্ঠা ঘূর্ণন কোণ পরিবর্তন করা হলেও, একই পাঠ্যের নিষ্কাশন স্থানাঙ্ক পরিবর্তন হবে না। কিন্তু যখন আপনাকে পৃষ্ঠায় স্থানাঙ্কগুলিকে আবার আঁকতে হবে, বা মাউস ক্লিকের মতো ভিজ্যুয়াল মিথস্ক্রিয়াগুলির সাথে সারিবদ্ধ করতে হবে, তখন আপনাকে অবশ্যই স্থানাঙ্ক রূপান্তরটি ম্যানুয়ালি সম্পূর্ণ করতে হবে।
PyMuPDF দুটি মূল ম্যাট্রিক্স প্রদান করে:
Page.rotation_matrix: অপরিবর্তিত স্থানাঙ্কগুলিকে স্থানাঙ্ক প্রদর্শনে রূপান্তর করুন।Page.derotation_matrix: বিপরীত অপারেশন সম্পাদন করুন।
এই দুটি ম্যাট্রিক্স অনুবাদ এবং ঘূর্ণন রূপান্তরকে এনক্যাপসুলেট করে, তাই বিকাশকারীদের হাতে ত্রিকোণমিতিক ফাংশন গণনা লিখতে হবে না।
সংশ্লেষণ উদাহরণ: সমন্বয় রূপান্তরের সঠিক এবং ভুল প্রত্যাশা
এই প্রক্রিয়াটি প্রদর্শন করার জন্য, আমরা একটি সম্পূর্ণরূপে ইন-মেমরি সিন্থেটিক দৃশ্য তৈরি করি যা বহিরাগত ফাইলগুলির উপর নির্ভর করে না। আপনি যদি একটি বাস্তব নথি পরীক্ষা করতে চান, অনুগ্রহ করে আগে থেকেই /Rotate=90 বৈশিষ্ট্য সহ একটি PDF প্রস্তুত করুন এবং ক্রপিং অফসেটের হস্তক্ষেপ দূর করতে এটির ক্রপবক্স মিডিয়াবক্সের সাথে সামঞ্জস্যপূর্ণ কিনা তা নিশ্চিত করুন৷
ইনপুট সেটিংস: একটি A4 প্রতিকৃতি পৃষ্ঠা তৈরি করুন (595 x 842 pt), /Rotate = 90 সেট করুন। অপরিবর্তিত স্থানে, বিন্দু (100, 100) উপরের বাম কোণে অবস্থিত; যখন 90 ডিগ্রি ঘোরানো হয়, তখন বিন্দুর ভিজ্যুয়াল অবস্থান উল্লেখযোগ্যভাবে পরিবর্তিত হয় কারণ স্থানাঙ্ক সিস্টেম এটির সাথে ঘোরে।
সঠিক আউটপুট প্রত্যাশিত: rotation_matrix দ্বারা (100, 100) গুন করুন এবং ফলস্বরূপ প্রদর্শন স্থানাঙ্কগুলি ঘোরানো পৃষ্ঠার বৈধ সীমার মধ্যে হওয়া উচিত (যেমন page.rect)। ডিফল্ট A4 পৃষ্ঠাটি ঘড়ির কাঁটার বিপরীতে 90 ডিগ্রি ঘোরানোর জন্য, আসল উপরের বাম কোণার বিন্দুটি ডিসপ্লে স্পেসে নীচের বাম কোণে অবস্থিত হওয়া উচিত, অর্থাৎ, x স্থানাঙ্কটি বড় এবং y স্থানাঙ্কটি 0 এর কাছাকাছি। নির্দিষ্ট মান মিডিয়াবক্সের উৎপত্তি সংজ্ঞার উপর নির্ভর করে। শুধু অনুমান করবেন না যে y x এর চেয়ে বড়।
সীমানা কেস হ্যান্ডলিং: ঘূর্ণন কোণ 0 হলে, rotation_matrix পরিচয় ম্যাট্রিক্স হওয়া উচিত। যদি একটি ঘূর্ণন মান যা 90 ডিগ্রির গুণিতক নয়, তাহলে PyMuPDF সাধারণত এটিকে স্বাভাবিক করবে, কিন্তু তারপরও NaN স্থানাঙ্ক তৈরি করা এড়াতে ম্যাট্রিক্সের বৈধতা পরীক্ষা করার পরামর্শ দেওয়া হয়।
পাইথন সমন্বয় যাচাইকরণ যুক্তি প্রয়োগ করে
নিম্নলিখিত উদাহরণ দেখায় কিভাবে মেমরিতে স্থানাঙ্ক রূপান্তর যাচাই করতে হয়। এটি শুধুমাত্র ম্যাট্রিক্স অপারেশন লজিক প্রদর্শন করে এবং এটি একটি সম্পূর্ণ PDF প্রক্রিয়াকরণ পাইপলাইন নয়। অনুগ্রহ করে নিশ্চিত করুন যে PyMuPDF চালানোর আগে ইনস্টল করা আছে এবং এটি এমন একটি পরিবেশে কার্যকর করুন যেখানে আপনি নির্ভরতা লক করেছেন।
import fitz # PyMuPDF
def validate_rotation_transform():
"""合成示例:验证旋转矩阵在未旋转坐标与显示坐标间的转换"""
doc = fitz.open() # 空文档,无需文件路径
page = doc.new_page(width=595, height=842)
# 设置页面旋转90度,模拟横向显示的PDF
page.set_rotation(90)
# 定义一个在未旋转空间中的测试点 (左上角附近)
unrotated_point = fitz.Point(100, 100)
# 获取旋转矩阵并执行变换
mat = page.rotation_matrix
display_point = unrotated_point * mat
# 验证1: 变换后的点必须位于旋转后的页面可视区域内
assert page.rect.contains(display_point), (
f"变换后坐标 {display_point} 超出显示边界 {page.rect}"
)
# 验证2: 对于默认A4逆时针旋转90度,原(100,100)应变为左下角
# 即 x 接近页宽(842),y 接近 0。注意:此处纠正了常见的 y>x 误区
assert display_point.x > 500 and display_point.y < 200, (
f"90度旋转预期左下角,实际得到 ({display_point.x:.1f}, {display_point.y:.1f})"
)
# 验证3: 逆变换可精确恢复原始坐标
inv_mat = page.derotation_matrix
recovered = display_point * inv_mat
assert abs(recovered.x - unrotated_point.x) < 0.01
assert abs(recovered.y - unrotated_point.y) < 0.01
doc.close()
print("坐标变换逻辑校验通过(合成数据)")
# 请在本地环境运行,不要假设线上环境已安装fitz
validate_rotation_transform()
এই কোডটি কোনো বাস্তব ফাইল পড়ে না, কিন্তু মেমরিতে পৃষ্ঠার অবস্থা তৈরি করে। assert বিবৃতিটি গাণিতিক সম্পর্কের যৌক্তিকতা পরীক্ষা করে, ব্যবসায়িক সঠিকতা নয়। প্রকৃত PDF-এ অ-মানক মিডিয়াবক্স বা নেস্টেড ট্রান্সফর্ম থাকলে অতিরিক্ত ডিবাগিংয়ের প্রয়োজন হতে পারে।
📊 মূল তুলনা
| তুলনামূলক আইটেম | অপরিবর্তিত স্থান | প্রদর্শন স্থান |
|---|---|---|
| সাধারণ সূত্র | get_text(), get_image_bbox(), টীকা স্থানাঙ্ক | Page.rect, Page.bound() |
| সমন্বয় তথ্য | আসল মিডিয়াবক্সের প্রস্থ এবং উচ্চতা | ঘূর্ণন পরে প্রকৃত প্রদর্শন আকার |
| সাধারণ ব্যবহার | বিষয়বস্তু নিষ্কাশন, স্থিতিশীল জোন লগিং | টীকা আঁকুন এবং ক্লিক অবস্থানের সাথে সারিবদ্ধ করুন |
| রূপান্তর পদ্ধতি | rotation_matrix দ্বারা গুণ করুন | পুনরুদ্ধার করতে derotation_matrix দ্বারা গুণ করুন |
গ্রহণযোগ্যতার মানদণ্ড এবং ম্যানুয়াল পর্যালোচনা সীমানা
কোডটি দাবীটি পাস করতে পারে তার অর্থ এই নয় যে উত্পাদন পরিবেশটি নির্বোধ। নিম্নলিখিত সারণীতে সাধারণ ব্যতিক্রমগুলি এবং তাদের পরিচালনার সিদ্ধান্তগুলি তালিকাভুক্ত করা হয়েছে যা স্বয়ংক্রিয় হতে পারে এবং ম্যানুয়াল হস্তক্ষেপের প্রয়োজন হতে পারে এমন পরিস্থিতিতে পার্থক্য করতে সহায়তা করে।
| ঘটনা পর্যবেক্ষণ করুন | সম্ভাব্য কারণ | প্রক্রিয়াকরণ সিদ্ধান্ত |
|---|---|---|
| মাত্রা সামগ্রিক অফসেট নির্দিষ্ট দূরত্ব | ক্রপবক্স এবং মিডিয়াবক্সের উত্সগুলি অসঙ্গত৷ | অফসেটের জন্য ক্ষতিপূরণ দিতে page.cropbox_position ব্যবহার করুন |
| ঘূর্ণনের পরে, পাঠ্য স্থানাঙ্কগুলি স্বাভাবিক তবে চিত্রটি ভুলভাবে সংযোজন করা হয়েছে। | ছবিটি একটি স্বাধীন CTM রূপান্তর ম্যাট্রিক্স ব্যবহার করে | get_image_bbox() এর পরিবর্তে get_image_rects() ব্যবহার করুন |
| কিছু পৃষ্ঠা সঠিকভাবে ঘোরানো হয় এবং কিছু ভুলভাবে ঘোরানো হয়। | নথি বিভিন্ন ঘূর্ণন কোণ সঙ্গে পৃষ্ঠাগুলি মিশ্রিত | পৃষ্ঠা অনুসারে page.rotation পৃষ্ঠা পরীক্ষা করুন, গ্লোবাল ক্যাশে ম্যাট্রিক্স অক্ষম করুন |
| রূপান্তরের পরে, স্থানাঙ্কগুলি পৃষ্ঠার সীমানা অতিক্রম করে। | মূল বিষয়বস্তু নিজেই ক্রপ করা হয়েছে বা নেতিবাচক স্থানাঙ্ক রয়েছে৷ | অস্বাভাবিক পৃষ্ঠা হিসাবে চিহ্নিত করুন এবং ম্যানুয়াল পর্যালোচনাতে স্থানান্তর করুন |
| 0 ডিগ্রী পৃষ্ঠা রূপান্তরিত করার প্রয়োজন নেই কিন্তু এখনও বিচ্যুতি আছে | তৃতীয় পক্ষের সরঞ্জাম দ্বারা লিখিত লুকানো ঘূর্ণন মেটাডেটা | পুনরায় সেট করার জন্য remove_rotation() কল করুন এবং তারপরে প্রক্রিয়া করুন৷ |
এই টেবিলটি শুধুমাত্র সমন্বয় রূপান্তর যুক্তিকে সম্বোধন করে এবং OCR নির্ভুলতা বা ফন্ট এনকোডিং সমস্যাগুলি কভার করে না। জটিল টাইপসেটিং এর সম্মুখীন হলে, স্বয়ংক্রিয় যাচাই ব্যর্থ হতে পারে। এই সময়ে, পাইপলাইনটি থামানো উচিত এবং চালিয়ে যাওয়া উচিত কিনা তা ম্যানুয়াল বিচার করা উচিত।
নথি অনুবাদের জন্য চেকলিস্ট ব্যবহার করুন
অনুবাদের আগে, পৃষ্ঠার ক্রম, উৎসের অবস্থান এবং পাঠ্যের অখণ্ডতা নিশ্চিত করুন এবং তারপর অনুবাদ প্রক্রিয়ায় একই অসংবেদনশীল নমুনা জমা দিন। অনুবাদের পরে, আপনাকে এখনও শিরোনাম, পাঠ্য এবং চিত্রগুলি সঠিকভাবে সঙ্গতিপূর্ণ কিনা তা পরীক্ষা করতে হবে, কেবল অনুবাদটি মসৃণ কিনা তা নয়।
OmniDoc (পণ্য পোর্টাল) একটি মাল্টি-ফরম্যাট নথি অনুবাদ পোর্টাল প্রদান করে, এবং অফিসিয়াল ওয়েবসাইট OCR, শব্দকোষ এবং দ্বিভাষিক তুলনা ফাংশনগুলি প্রবর্তন করে৷ যে দলগুলি ফাইল থেকে সরাসরি কাজ করতে চায় তাদের জন্য, এটি বাস্তব জীবনের নমুনাগুলির সাথে মূল্যায়ন করার মতো একটি পথ। আপনার কাছে আপলোড করার অনুমতি আছে এমন সংবেদনশীল ফাইলগুলি ব্যবহার করুন এবং ফলাফলগুলি পর্যালোচনা করতে এই নিবন্ধে চেক আইটেমগুলি ব্যবহার করুন৷ OmniDoc এই নিবন্ধে উল্লিখিত ওপেন সোর্স লাইব্রেরি বা অভ্যন্তরীণ অ্যালগরিদমগুলি ব্যবহার করে এমন কোনও দাবি নেই, বা উদাহরণটি পণ্যের কার্যক্ষমতা পরীক্ষাকে প্রতিস্থাপন করে না।
আরও পড়া:
🎯 কোন পদ্ধতি আপনার জন্য উপযুক্ত?
আপনি যদি নিষ্কাশিত পাঠ্য স্থানাঙ্কগুলিকে পৃষ্ঠায় ফিরে আঁকতে চান
স্থানাঙ্ক প্রদর্শনে রূপান্তর করতে প্রথমে rotation_matrix ব্যবহার করুন এবং তারপর হাইলাইট বা টীকা আঁকুন।
আপনি যদি ম্যাপ করতে চান মাউস ক্লিক মূল বিষয়বস্তু ফিরে
বিপরীত রূপান্তরের জন্য derotation_matrix ব্যবহার করুন এবং page.rect এর বিপরীতে বিন্দুটি বৈধ সীমার মধ্যে পড়ে কিনা তা পরীক্ষা করুন।
আপনি যদি মিশ্র ঘূর্ণন কোণ সহ নথি নিয়ে কাজ করেন
পৃষ্ঠা অনুসারে page.rotation পৃষ্ঠা পড়ুন, গ্লোবাল ম্যাট্রিক্স পুনরায় ব্যবহার করবেন না এবং সীমার বাইরের পৃষ্ঠাগুলি চিহ্নিত করুন৷
যদি আপনার পৃষ্ঠায় জটিল লেআউট বা আংশিকভাবে ঘোরানো চার্ট থাকে
প্রথমে সিন্থেটিক নমুনা এবং ছোট আকারের বাস্তব নমুনার মাধ্যমে চালান এবং তারপরে সেগুলি স্বয়ংক্রিয় প্রক্রিয়ায় হস্তান্তর করবেন কিনা তা সিদ্ধান্ত নিন। অস্বাভাবিকতার সম্মুখীন হলে, ম্যানুয়াল পর্যালোচনাতে তাদের হস্তান্তর করুন।
❓ প্রায়শই জিজ্ঞাসিত প্রশ্ন (FAQ)
1. কেন get_text() দ্বারা প্রত্যাবর্তিত স্থানাঙ্কগুলি চাক্ষুষ অবস্থানের সাথে অসামঞ্জস্যপূর্ণ?
যেহেতু এই APIগুলি ডিফল্টরূপে অপরিবর্তিত পৃষ্ঠার সাপেক্ষে ফিরে আসে, তাই পাঠক রেন্ডার করার সময় /Rotate বৈশিষ্ট্যটি প্রয়োগ করা হয়।
2. Page.rect এবং get_text() এর স্থানাঙ্কের ডেটামগুলি কি একই?
না একই Page.rect এবং Page.bound() ঘূর্ণিত প্রদর্শনের আকার প্রতিফলিত করে, যখন get_text() এর মতো API-এর স্থানাঙ্কগুলি মূল অপরিবর্তিত প্রস্থ এবং উচ্চতায় নোঙর করা হয়।
3. যখন ঘূর্ণন কোণ 0 হয় তখনও কি রূপান্তরের প্রয়োজন হয়?
অপ্রয়োজনীয় এই মুহুর্তে rotation_matrix একটি আইডেন্টিটি ম্যাট্রিক্স হওয়া উচিত, তবে এটি এখনও পক্ষপাতের জন্য চেক করার পরামর্শ দেওয়া হচ্ছে কারণ তৃতীয় পক্ষের সরঞ্জামগুলি লুকানো ঘূর্ণন মেটাডেটা লিখতে পারে।
4. দাবী পাস করার পরে কোডটি কি সরাসরি উৎপাদনের জন্য ব্যবহার করা যেতে পারে?
সুপারিশ করা হয় না. দাবীটি শুধুমাত্র গাণিতিক সম্পর্কের যৌক্তিকতা পরীক্ষা করে। প্রকৃত পিডিএফ-এ অ-মানক মিডিয়াবক্স, স্বাধীন CTM রূপান্তর বা অস্বাভাবিক পৃষ্ঠা থাকতে পারে, যা এখনও গ্রহণযোগ্য ফর্ম অনুযায়ী আইটেম দ্বারা আইটেম পর্যালোচনা করা প্রয়োজন।
📝 সারাংশ
স্থানাঙ্কের বিভ্রান্তির উৎস হল অপরিবর্তিত স্থান এবং প্রদর্শন স্থানের মধ্যে পার্থক্য। রূপান্তরের জন্য rotation_matrix এবং derotation_matrix ব্যবহার করে, পৃষ্ঠা দ্বারা পৃষ্ঠা পরিদর্শন এবং ম্যানুয়াল পর্যালোচনার সাথে মিলিত, ঝুঁকি একটি যাচাইযোগ্য সীমার মধ্যে নিয়ন্ত্রণ করা যেতে পারে।
এটি এখনই চেষ্টা করুন: অনুবাদ শুরু করতে নথিটি আপলোড করুন, মূল বিন্যাস বজায় রেখে৷


