अधिकांश PDF एक्सट्रैक्टर्स गलत API का उपयोग करते हैं
अधिकांश PDF टूल्स गलत डेटा सोर्स का उपयोग करते हैं।
जब डेवलपर्स PDF एक्सट्रैक्शन की बात करते हैं, तो उनका मतलब आमतौर पर getTextContent() से होता है। यह मेथड टेक्स्ट आइटम्स और उनकी पोजीशन प्रदान करता है। यह लगभग हर ब्राउज़र-साइड टूल के लिए डिफॉल्ट है।
लेकिन getTextContent() एक प्रोसेस्ड व्यू है। यह वास्तव में उपलब्ध जानकारी का एक सरलीकृत (simplified) संस्करण है।
PDF.js में डेटा के तीन स्तर होते हैं:
• getStructTree(): यह आपको बताता है कि दस्तावेज़ का अर्थ क्या है। इसमें टेबल्स, हेडिंग्स और फॉर्मूले शामिल होते हैं।
• getOperatorList(): यह आपको बताता है कि दस्तावेज़ क्या ड्रा करता है। इसमें लाइन्स, पाथ्स और शेप्स शामिल होते हैं।
• getTextContent(): यह दस्तावेज़ द्वारा ड्रा की गई चीज़ों का एक फ़िल्टर्ड व्यू है।
अधिकांश टूल्स तीसरे विकल्प का उपयोग करते हैं। यह सरल रिपोर्ट जैसे 80% दस्तावेज़ों के लिए काम करता है। हालाँकि, यह अकादमिक पेपर्स और जटिल प्रकाशनों (complex publications) पर विफल हो जाता है।
केवल getTextContent() का उपयोग करने से चार बड़ी समस्याएँ पैदा होती हैं:
- आप टेबल स्ट्रक्चर खो देते हैं। आपको टेक्स्ट पोजीशन के आधार पर अनुमान लगाना पड़ता है कि सेल्स कहाँ हैं।
- गणितीय समीकरण (math equations) टूट जाते हैं। LaTeX समीकरण अक्सर एक ही बड़े टेक्स्ट ब्लॉक के रूप में दिखाई देते हैं।
- आप कॉलम लाइन्स को मिस कर देते हैं। कई लेआउट कॉलम को अलग करने के लिए वास्तविक लाइन्स का उपयोग करते हैं। ये लाइन्स टेक्स्ट कंटेंट में मौजूद नहीं होती हैं।
- आपको गलत रीडिंग ऑर्डर मिलता है। टेक्स्ट अक्सर उसी क्रम में दिखाई देता है जिस क्रम में उसे ड्रा किया गया था, न कि उस क्रम में जैसा कि एक इंसान उसे पढ़ता है।
एक PDF प्रोसेसर बनाने का सही तरीका एक थ्री-टियर (three-tier) सिस्टम है:
- सबसे पहले
getStructTree()चेक करें। यदि दस्तावेज़ की एक तार्किक संरचना (logical structure) है, तो टेबल्स और हेडिंग्स को तुरंत खोजने के लिए इसका उपयोग करें। - इसके बाद
getOperatorList()चेक करें। कॉलम की सीमाओं (boundaries) को खोजने के लिए स्पष्ट लाइन्स और पाथ्स का उपयोग करें। getTextContent()का उपयोग फॉलबैक (fallback) के रूप में करें। ज्यामितीय गणित (geometric math) का उपयोग केवल तभी करें जब पहले दो टियर्स कोई डेटा प्रदान न करें।
यह दृष्टिकोण अधिक काम नहीं है। टियर 1 और 2 'फास्ट एग्जिट' के रूप में कार्य करते हैं। यदि दस्तावेज़ अच्छी तरह से स्ट्रक्चर्ड है, तो आप कठिन गणित को छोड़ सकते हैं। आप जटिल इन्फरेंस (inference) का उपयोग केवल तभी करते हैं जब दस्तावेज़ अनटैग्ड (untagged) हो।
यह आर्किटेक्चर सरल कॉर्पोरेट फाइलों और जटिल वैज्ञानिक पेपर्स दोनों को संभालता है।
स्रोत: https://dev.to/bonzai2carn/most-pdf-extractors-use-the-wrong-api-heres-what-we-built-instead-5dgh
