রেন্ডার টাইমে PDF পার্স করা বন্ধ করুন

বেশিরভাগ ফ্রন্টএন্ড PDF এক্সট্রাকশন টুল ব্যর্থ হয়।

ডেভেলপাররা ভিজ্যুয়াল আউটপুট থেকে ডকুমেন্টের গঠন অনুমান করার চেষ্টা করেন। তারা কলাম, টেবিল বা লিস্ট খুঁজে পেতে রেন্ডার করা পিক্সেলগুলোর দিকে তাকান। একটি বক্স কোথায় শুরু হচ্ছে তা নির্ধারণ করতে তারা কম্পিউটার ভিশন বা পিক্সেলের নৈকট্য (pixel proximity) ব্যবহার করেন।

এটি তৈরির ভুল পদ্ধতি।

একটি PDF-এর অপারেটর স্ট্রিম (operator stream)-এ ইতিমধ্যেই সুনির্দিষ্ট কাঠামোগত ডেটা থাকে। একটি টেবিল কেবল কাছাকাছি থাকা পিক্সেলের একটি গ্রুপ নয়। এটি moveTo, lineTo, বা rectangle-এর মতো নির্দিষ্ট কমান্ডের মাধ্যমে আঁকা হয়। আপনি যে সীমানাগুলো খুঁজে পেতে চান, সেগুলো ইতিমধ্যেই সোর্সে এনকোড করা আছে।

যদি আপনার এক্সট্রাক্টর ১০০% জুম বনাম ১৫০% জুম-এ ভিন্ন ভিন্ন কলাম দেখায়, তবে আপনি গঠন (structure) এক্সট্র্যাক্ট করছেন না। আপনি কেবল ভিজ্যুয়াল আর্টিফ্যাক্টগুলোর প্যাটার্ন-ম্যাচিং করছেন।

ভিজ্যুয়াল হিউরিস্টিকস (visual heuristics) ব্যবহার করা বন্ধ করুন। অপারেটর স্ট্রিম পার্স করা শুরু করুন।

কেন অপারেটর স্ট্রিম বেশি কার্যকর:

কঠিন পথটিই সঠিক পথ।

আপনাকে CTM স্ট্যাক বুঝতে হবে। আপনাকে ম্যাট্রিক্স স্টেট ট্র্যাক করতে হবে এবং সাবপাথগুলো (subpaths) ক্লাসিফাই করতে হবে। এটি আয়ত্ত করতে আপনাকে PDF স্পেসিফিকেশন এবং সোর্স কোড পড়তে হবে।

এতে শুরুতে বেশি পরিশ্রম করতে হয়। কিন্তু ব্যবহারকারী যে PDF-ই আপলোড করুন না কেন, এটি সবক্ষেত্রেই কাজ করে। পিক্সেল-ভিত্তিক টুলগুলো শুধুমাত্র আপনার টেস্ট সুইটের অল্প কিছু ফাইলের ক্ষেত্রেই কাজ করে।

একটি আসল এক্সট্রাক্টর তৈরি করুন, কোনো ডেমো নয়।

উৎস: https://dev.to/bonzai2carn/stop-parsing-pdfs-at-render-time-a-better-architecture-for-structured-extraction-5fb8