রেন্ডার টাইমে PDF পার্স করা বন্ধ করুন
বেশিরভাগ ফ্রন্টএন্ড PDF এক্সট্রাকশন টুল ব্যর্থ হয়।
ডেভেলপাররা ভিজ্যুয়াল আউটপুট থেকে ডকুমেন্টের গঠন অনুমান করার চেষ্টা করেন। তারা কলাম, টেবিল বা লিস্ট খুঁজে পেতে রেন্ডার করা পিক্সেলগুলোর দিকে তাকান। একটি বক্স কোথায় শুরু হচ্ছে তা নির্ধারণ করতে তারা কম্পিউটার ভিশন বা পিক্সেলের নৈকট্য (pixel proximity) ব্যবহার করেন।
এটি তৈরির ভুল পদ্ধতি।
একটি PDF-এর অপারেটর স্ট্রিম (operator stream)-এ ইতিমধ্যেই সুনির্দিষ্ট কাঠামোগত ডেটা থাকে। একটি টেবিল কেবল কাছাকাছি থাকা পিক্সেলের একটি গ্রুপ নয়। এটি moveTo, lineTo, বা rectangle-এর মতো নির্দিষ্ট কমান্ডের মাধ্যমে আঁকা হয়। আপনি যে সীমানাগুলো খুঁজে পেতে চান, সেগুলো ইতিমধ্যেই সোর্সে এনকোড করা আছে।
যদি আপনার এক্সট্রাক্টর ১০০% জুম বনাম ১৫০% জুম-এ ভিন্ন ভিন্ন কলাম দেখায়, তবে আপনি গঠন (structure) এক্সট্র্যাক্ট করছেন না। আপনি কেবল ভিজ্যুয়াল আর্টিফ্যাক্টগুলোর প্যাটার্ন-ম্যাচিং করছেন।
ভিজ্যুয়াল হিউরিস্টিকস (visual heuristics) ব্যবহার করা বন্ধ করুন। অপারেটর স্ট্রিম পার্স করা শুরু করুন।
কেন অপারেটর স্ট্রিম বেশি কার্যকর:
- এটি ডিটারমিনিস্টিক (deterministic)। স্কেল বা ফন্ট হিন্টিং নির্বিশেষে এটি একইভাবে কাজ করে।
- এটি প্রকৃত ডেটা ব্যবহার করে। আপনি ক্রিয়েটর দ্বারা সংজ্ঞায়িত প্রকৃত পাথ (paths) এবং কোঅর্ডিনেটস (coordinates) ব্যবহার করেন।
- এটি গাণিতিক ত্রুটি এড়ায়। উদাহরণস্বরূপ, জোন খুঁজে পেতে টেক্সট সেন্টারের মধ্যবিন্দু ব্যবহার করলে রাউন্ডিং বাগ (rounding bugs) হতে পারে। একটি বাউন্ডিং বক্সের প্রকৃত উপরের প্রান্ত ব্যবহার করাই একমাত্র সঠিক পদ্ধতি।
কঠিন পথটিই সঠিক পথ।
আপনাকে CTM স্ট্যাক বুঝতে হবে। আপনাকে ম্যাট্রিক্স স্টেট ট্র্যাক করতে হবে এবং সাবপাথগুলো (subpaths) ক্লাসিফাই করতে হবে। এটি আয়ত্ত করতে আপনাকে PDF স্পেসিফিকেশন এবং সোর্স কোড পড়তে হবে।
এতে শুরুতে বেশি পরিশ্রম করতে হয়। কিন্তু ব্যবহারকারী যে PDF-ই আপলোড করুন না কেন, এটি সবক্ষেত্রেই কাজ করে। পিক্সেল-ভিত্তিক টুলগুলো শুধুমাত্র আপনার টেস্ট সুইটের অল্প কিছু ফাইলের ক্ষেত্রেই কাজ করে।
একটি আসল এক্সট্রাক্টর তৈরি করুন, কোনো ডেমো নয়।