पीडीएफ में राशि कैसे प्राप्त करें, पृष्ठ पर इसकी स्थिति
यह आलेख एक निर्दिष्ट आयत के भीतर दोहराया मात्रा पाठ का पता लगाने के लिए PyMuPDF का उपयोग दर्शाता है। ऑक्टेट शब्द के पहले पांच क्षेत्रों को पार्स करके और उम्मीदवारों की संख्या को सत्यापित करके, खंड विभाजन में गलत निर्णय से बचा जा सकता है। मेमोरी-स्तरीय पायथन उदाहरण, सीमा प्रसंस्करण रणनीतियाँ और स्वीकृति तालिकाएँ प्रदान करता है, और ओमनीडॉक दस्तावेज़ अनुवाद वर्कफ़्लो से जुड़ने के लिए व्यावहारिक सुझाव देता है।
डुप्लिकेट रकम का पता कैसे लगाएं? एक वाक्य का निष्कर्ष
जब लेआउट तय हो जाए, तो पहले ज्ञात क्षेत्र को सीमित करें और फिर टेक्स्ट की जांच करें, और उम्मीदवारों की संख्या निर्णय के लिए कॉल करने वाले पर छोड़ दें। नियमित अभिव्यक्तियों को ढेर करना जारी रखने की तुलना में इसकी व्याख्या करना आसान है, और इसमें मौन गलतियाँ होने की संभावना कम है।
| आपकी स्थिति | अनुशंसित प्रथाएँ | कारण |
|---|---|---|
| पृष्ठ पर एक ही राशि कई स्थानों पर दिखाई देती है | खोज को उस आयताकार क्षेत्र तक सीमित रखें जहां व्यवसाय क्षेत्र स्थित है और फिर खोजें | पूर्ण पाठ खोज यह निर्धारित नहीं कर सकती कि कौन सा क्षेत्र व्यवसाय क्षेत्र है |
| प्रश्न क्षेत्र में कई उम्मीदवार हैं | लेबल या मैन्युअल असंबद्धता के साथ संयुक्त रूप से सभी उम्मीदवारों को लौटाएँ | कार्यक्रमों को व्यवसाय के लिए विकल्प नहीं चुनना चाहिए |
| क्वेरी क्षेत्र में कोई हिट नहीं हैं | कारण चिह्नित करें और मूल पृष्ठ की जांच करें, कोई शून्य पैडिंग नहीं | गलत क्षेत्र, विभाजित मात्राएँ, या अनुपलब्ध पाठ परतों के परिणामस्वरूप शून्य हिट हो सकते हैं |
| फ़्रेम की स्थिति ऑफसेट दिखती है | रोटेशन, क्रॉपिंग और रेंडरिंग स्केलिंग के लिए स्पष्ट परिवर्तन श्रृंखलाएँ | प्रदर्शन निर्देशांक और निकाले गए निर्देशांक को मिलाने से विचलन हो जाएगा |
एक विवरण में दो समान राशियाँ
1,200.00 एक विवरण में दो बार दिखाई देता है: एक बार देय राशि कॉलम में और एक बार विवरण पाठ में। पूर्ण-पाठ खोज उन्हें ढूंढ सकती है, लेकिन यह आपके लिए यह तय नहीं कर सकती कि व्यवसाय क्षेत्र कौन सा है।
यदि फॉर्म लेआउट तय हो गया है, तो नियमित अभिव्यक्ति को समायोजित करने की तुलना में पहले किसी ज्ञात क्षेत्र को सीमित करके और फिर पाठ को खोजकर व्याख्या करना आम तौर पर आसान होता है। कुंजी "केवल एक बॉक्स ढूंढना" नहीं है, बल्कि शून्य हिट और एकाधिक हिट दोनों को स्पष्ट परिणाम के रूप में मानना है, और प्रोग्राम को अनधिकृत विकल्प नहीं बनाने देना है।
शब्द का स्थान छोड़ें, केवल पाठ का नहीं
PyMuPDF का `page.get_text("words")` स्थिति के साथ एक शब्द रिकॉर्ड लौटाता है, सामान्य फ़ील्ड (x0, y0, x1, y1, text, block_no, line_no, word_no) है। निम्नलिखित उदाहरण केवल पहले पांच फ़ील्ड लेता है, और अंतिम तीन नंबर फिलहाल क्षेत्रीय फ़िल्टरिंग में शामिल नहीं हैं।
यहां "शब्द" एक्सट्रैक्टर द्वारा दिया गया टुकड़ा है, जो जरूरी नहीं कि भाषाई अर्थ में एक शब्द के बराबर हो, न ही इसकी गारंटी है कि एक राशि हमेशा एक पूर्ण टुकड़ा होगी। 1,200.00 को अलग किया जा सकता है या इसमें आसन्न टैग हो सकते हैं। यह आलेख केवल पूर्ण अंशों के सटीक मिलान से संबंधित है: मैं उन रिकॉर्ड्स को सौंपना पसंद करूंगा जो समीक्षा की शर्तों को पूरा नहीं करते हैं बजाय चुपचाप उन्हें कानूनी रूप से उचित राशि में विभाजित करने के।
समान मात्रा के दो सिंथेटिक पृष्ठों से सत्यापित करें
हम मेमोरी में एक नया पीडीएफ पेज बनाते हैं और समान मात्रा को क्रमशः ऊर्ध्वाधर निर्देशांक 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 पर निर्भर नहीं रहना चाहिए, क्योंकि अनुकूलन मोड दावे को हटा सकते हैं। उदाहरण में दिए गए दावों का उपयोग प्रतिगमन जाँच के लिए किया जाता है। वास्तव में कार्य कतार तक पहुँचते समय, स्पष्ट सशर्त शाखाओं और व्यावसायिक स्थितियों का उपयोग किया जाना चाहिए।
तीन परिणाम, तीन प्रसंस्करण विधियाँ
क्वेरी परिणामों को आम तौर पर तीन श्रेणियों में विभाजित किया जाता है, जिनमें से प्रत्येक को अलग-अलग प्रसंस्करण क्रियाओं की आवश्यकता होती है:
- केवल एक हिट: इस क्षेत्र में केवल एक पूर्ण मिलान टुकड़ा है, जो पृष्ठ संख्या, मूल पाठ, आयत और नियम संस्करण को सहेजता है।
- शून्य हिट: संभवतः गलत क्षेत्रों, विभाजित मात्राओं या पाठ परतों के गायब होने के कारण। कारण को उम्मीदवारों के रूप में चिह्नित करें, मूल पृष्ठ की जांच करें, और शून्य न भरें।
- एकाधिक हिट: यदि एक ही क्षेत्र में डुप्लिकेट राशियाँ हैं या टेम्पलेट बदल गया है, तो सभी उम्मीदवारों को वापस करें, टैग संयोजित करें, या मैन्युअल रूप से अस्पष्ट करें।
अन्य दो स्थितियों को भी अलग से संभालने की आवश्यकता है:
- बॉक्स लेकिन गलत मान: पाठ परत स्वयं गलत हो सकती है या मिलान लक्ष्य गलत हो सकता है; सत्यापन के लिए मूल पृष्ठ पर लौटें और निर्देशांक को संख्यात्मक मानों द्वारा समर्थित करने की अनुमति न दें।
- बॉक्स ऑफसेट: प्रदर्शन और निष्कर्षण निर्देशांक मिश्रित हो सकते हैं, जिसके लिए रोटेशन, क्रॉपिंग और रेंडरिंग स्केलिंग के लिए स्पष्ट संक्रमण श्रृंखलाओं की आवश्यकता होती है।
📊 कोर तुलना
| पूछताछ के तरीके | निर्धारण मानदंड | सावधानी की जरूरत है |
|---|---|---|
| पूर्ण समावेशन (प्रयुक्त उदाहरण) | उम्मीदवार आयत पूरी तरह से क्वेरी क्षेत्र के भीतर रखा गया है | यदि क्वेरी बॉक्स बहुत तंग है, तो किनारे पर राशि शून्य हिट हो सकती है |
| केंद्र बिंदु गिरता है (नियमों को अलग से लिखने की आवश्यकता है) | उम्मीदवार केंद्र बिंदु क्षेत्र के भीतर स्थित हैं | सीमा ओवरलैप के लिए अलग पूरक परीक्षण की आवश्यकता होती है |
| पूर्ण पृष्ठों की खोज | सभी उम्मीदवारों को खोजें | अधिकांश परिणाम अस्पष्ट होते हैं और इसके लिए लेबलिंग या मैन्युअल आगे के निर्णय की आवश्यकता होती है |
यह एक सार्वभौमिक राशि चिमटा नहीं है
कोड मुद्रा, हजारों विभाजकों या दशमलव नियमों को पार्स नहीं करता है, न ही यह "वर्तमान अवधि देय" और "पिछली अवधि संतुलन" जैसे शब्दार्थों को पहचानता है। सिर्फ इसलिए कि केवल एक उम्मीदवार है इसका मतलब यह नहीं है कि व्यवसाय सही अर्थ है।
स्कैन की गई कॉपी को पहले टेक्स्ट और लोकेशन भी उपलब्ध होना चाहिए। पाठ परतों वाले पृष्ठों की अनुमति नहीं दी जा सकती है, लेकिन गलत सामग्री केवल इसलिए अनुमति नहीं दी जा सकती क्योंकि उनकी प्रतिलिपि बनाई जा सकती है.
यह आलेख एक अपरिवर्तित रचना पृष्ठ का उपयोग करता है। जब वास्तविक पृष्ठ घूमता है, तो पहले निर्दिष्ट करें कि क्वेरी बॉक्स डिस्प्ले स्क्रीन से आता है या निर्देशांक निकालता है, और यदि आवश्यक हो तो केवल कनवर्ट करें। स्रोत की परवाह किए बिना मैट्रिक्स से गुणा न करें।
स्रोत पृष्ठों को सहेजते समय, शून्य-से-शून्य अनुक्रमणिका और व्यक्ति-सामना करने वाले पृष्ठ संख्याओं के बीच अंतर करें ताकि गलती से यह सोचने से बचा जा सके कि आसन्न पृष्ठों की जाँच करते समय साक्ष्य मौजूद नहीं हैं।
🎯 कौन सा तरीका आपको सूट करता है?
यदि आपको एक निश्चित लेआउट फॉर्म से डेटा निकालने की आवश्यकता है
सबसे पहले, उस क्षेत्र को प्रतिबंधित करें जहां व्यवसाय क्षेत्र स्थित है, फिर राशि देखें, और पृष्ठ संख्या, आयत और नियम संस्करण को सहेजें।
यदि आपका सामना कई उम्मीदवारों से होता है
पहला विकल्प सीधे न लें; सभी उम्मीदवारों को वापस करें और टैग या मैन्युअल निर्णय के आधार पर व्यावसायिक क्षेत्रों का निर्धारण करें।
यदि आपका पेज अक्सर जीरो-हिट हो जाता है
सबसे पहले, जांचें कि क्या क्षेत्र निर्देशांक, राशि और पाठ परत मौजूद है, फिर तय करें कि दायरे को समायोजित करना है या अन्य निष्कर्षण मार्गों पर स्विच करना है।
यदि आप दस्तावेज़ अनुवाद करना चाहते हैं
राशि, तारीख और मात्रा जैसे प्रमुख विवरण मैनुअल समीक्षा में शामिल हैं, तकनीकी निरीक्षण और मैन्युअल समीक्षा के बीच श्रम के स्पष्ट विभाजन के साथ।
अनुवाद समीक्षा के लिए प्रमुख संख्याएँ छोड़ें
दस्तावेज़ अनुवाद न केवल वाक्य प्रवाह पर आधारित होना चाहिए, बल्कि राशि, तिथि और मात्रा जैसी प्रमुख वस्तुओं पर भी आधारित होना चाहिए। ओमनीडॉक (उत्पाद प्रविष्टि) कई दस्तावेज़ अनुवाद पोर्टल प्रदान करता है, और आधिकारिक वेबसाइट पर पेश की गई द्विभाषी तुलना समीक्षा प्रवेश बिंदु के रूप में काम कर सकती है; समन्वय पोजिशनिंग स्क्रिप्ट मूल साक्ष्य को संरक्षित करने और समस्या क्षेत्रों का पता लगाने में मदद करने के लिए उपयुक्त हैं।
यह अनुशंसा की जाती है कि पहले आपके द्वारा अपलोड करने के लिए अधिकृत डिसेन्सिटाइजेशन नमूने का उपयोग करके मूल्यांकन करें। जैसे-जैसे अनुवाद लंबा होता जाता है, सामग्री की स्थिति यथोचित रूप से बदल सकती है, और "नए और पुराने निर्देशांक बिल्कुल समान हैं" को सही अनुवाद के लिए एक कठिन शर्त के रूप में नहीं लिया जाना चाहिए।
अधिक मूल्यवान जांच हैं: क्या राशि बरकरार रखी गई है, क्या मुद्रा स्पष्ट रूप से परिभाषित है, और क्या संबंधित लेबल अभी भी उसी व्यावसायिक अर्थ की ओर इशारा करता है।
❓ अक्सर पूछे जाने वाले प्रश्न (FAQ)
1. क्यों न सिर्फ पहली हिट ली जाए?
क्योंकि पूर्ण-पाठ खोज केवल आपको बता सकती है कि राशि कहाँ दिखाई देती है, और यह निर्धारित नहीं कर सकती कि कौन सा भाग व्यवसाय फ़ील्ड है। सीधे पहली हिट लेना सही लग सकता है, लेकिन स्रोत पहले से ही गलत हो सकता है।
2. क्वेरी बॉक्स को केवल किनारे को छूने के बजाय पूर्ण समावेशन की आवश्यकता क्यों है?
उदाहरण अपूर्ण खंडों को मान्य हिट के रूप में मानने से बचने के लिए पूरी तरह से शामिल निर्धारण विधि का उपयोग करता है। यदि क्वेरी बॉक्स बहुत तंग है और शून्य हिट का कारण बनता है, तो पहले पूरे पृष्ठ को स्वचालित रूप से चौड़ा करने के बजाय समन्वय सिस्टम और श्रेणी की जाँच करें।
3. क्वेरी परिणाम शून्य होने पर आपको क्या करना चाहिए?
उम्मीदवार के कारण को चिह्नित करें और मूल पृष्ठ की जांच करें; शून्य न जोड़ें। गलत क्षेत्र, विभाजित मात्रा, या अनुपलब्ध पाठ परतें सभी के परिणामस्वरूप शून्य हिट हो सकती हैं।
4. क्या इस कोड का उपयोग सीधे वास्तविक बिलों पर किया जा सकता है?
इसका सीधे उपयोग नहीं किया जा सकता है। उदाहरण मुद्रा, हज़ारों विभाजक, या व्यावसायिक शब्दार्थ को हैंडल नहीं करता है, और इस आलेख में संश्लेषण नमूना वास्तविक बिलों के लिए एक सटीकता परीक्षण का प्रतिनिधित्व नहीं करता है।
📝 सारांश
राशि का निर्धारण करते समय, पहले क्षेत्र को परिभाषित करें, फिर निर्णय के लिए कॉल करने वाले को उम्मीदवारों की पूरी संख्या दें। शून्य और एकाधिक हिट दोनों में स्पष्ट हैंडलिंग क्रियाएं होनी चाहिए। सबसे पहले, नियमों को मान्य करने के लिए चिंताजनक नमूनों का उपयोग करें, फिर धीरे-धीरे वास्तविक दस्तावेजों को एकीकृत करें।
अभी अनुभव करें: मूल स्वरूपण को संरक्षित करते हुए अनुवाद शुरू करने के लिए अपना दस्तावेज़ अपलोड करें


