PDF मध्ये रक्कम कशी मिळवायची, पृष्ठावरील त्याची स्थिती

हा लेख PyMuPDF वापरून एका निर्दिष्ट आयतामध्ये वारंवार रकमेचा मजकूर शोधण्यासाठी दाखवतो. ऑक्टेट शब्दांची पहिली पाच फील्ड पार्स करून आणि उमेदवारांच्या संख्येची पडताळणी करून, तुकड्यांच्या विभाजनातील गैरसमज टाळता येऊ शकतात. मेमरी-स्तरीय पायथॉन उदाहरणे, सीमा प्रक्रिया धोरणे आणि स्वीकृती सारण्या प्रदान करते आणि OmniDoc दस्तऐवज भाषांतर वर्कफ्लोसह कनेक्ट करण्यासाठी व्यावहारिक सूचना देते.

डुप्लिकेट रक्कम कशी शोधायची? एका वाक्याचा निष्कर्ष

लेआउट निश्चित केल्यावर, प्रथम ज्ञात क्षेत्र मर्यादित करा आणि नंतर मजकूर तपासा, आणि उमेदवारांची संख्या निर्णयासाठी कॉलरकडे सोडा. रेग्युलर एक्स्प्रेशन्सचा ढीग सुरू ठेवण्यापेक्षा त्याचा अर्थ लावणे सोपे आहे आणि त्यामुळे मूक चुका होण्याची शक्यता कमी आहे.

तुमची परिस्थितीशिफारस केलेल्या पद्धतीकारण
पृष्ठावर अनेक ठिकाणी समान रक्कम दिसतेशोध मर्यादित करा आयताकृती क्षेत्र जेथे व्यवसाय क्षेत्र स्थित आहे आणि नंतर शोधापूर्ण मजकूर शोध व्यवसाय क्षेत्र कोणते हे निर्धारित करू शकत नाही
क्वेरी क्षेत्रात अनेक उमेदवार आहेतलेबले किंवा मॅन्युअल निःसंदिग्धीकरणासह एकत्रित सर्व उमेदवार परत कराकार्यक्रम व्यवसायासाठी निवड करू नये
क्वेरी क्षेत्रात कोणतेही हिट नाहीतकारण चिन्हांकित करा आणि मूळ पृष्ठ तपासा, शून्य पॅडिंग नाहीचुकीचा प्रदेश, विभाजित रक्कम किंवा गहाळ मजकूर स्तर शून्य हिट होऊ शकतात
फ्रेमची स्थिती ऑफसेट दिसतेरोटेशन, क्रॉपिंग आणि रेंडरिंग स्केलिंगसाठी स्पष्ट परिवर्तन साखळीडिस्प्ले कोऑर्डिनेट्स आणि काढलेले निर्देशांक मिक्स केल्याने विचलन होईल

एका विधानात दोन समान राशी

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 आहे, कृपया चाचणी वातावरणात आवृत्ती स्थापित आणि लॉक करा. खालील कोड नेटवर्कमध्ये प्रवेश करत नाही, फायली लिहित नाही आणि मूळ ग्राहक दस्तऐवज सुधारित करत नाही. हे फक्त एक प्रात्यक्षिक PDF तयार करते.

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 वर अवलंबून राहू नये, कारण ऑप्टिमायझेशन मोड दावे काढून टाकू शकतात. उदाहरणातील विधाने प्रतिगमन तपासणीसाठी वापरली जातात. प्रत्यक्षात कार्य रांगेत प्रवेश करताना, स्पष्ट सशर्त शाखा आणि व्यवसाय स्थिती वापरल्या पाहिजेत.

तीन परिणाम, तीन प्रक्रिया पद्धती

क्वेरी परिणाम सहसा तीन श्रेणींमध्ये विभागले जातात, प्रत्येकासाठी भिन्न प्रक्रिया क्रिया आवश्यक असतात:

  • फक्त एक हिट: परिसरात फक्त एक पूर्ण जुळणारा तुकडा आहे आणि पृष्ठ क्रमांक, मूळ मजकूर, आयत आणि नियम आवृत्ती जतन केली आहे.
  • शून्य हिट: असे असू शकते की क्षेत्र चुकीचे आहे, रक्कम विभाजित आहे किंवा मजकूर स्तर गहाळ आहे. कारण उमेदवार चिन्हांकित करा, मूळ पृष्ठ तपासा आणि शून्य जोडू नका.
  • एकाधिक हिट: त्याच भागात डुप्लिकेट रक्कम आहेत, किंवा टेम्प्लेट बदलले आहे, सर्व उमेदवार परत करा, लेबले एकत्र करा किंवा मॅन्युअल निःसंदिग्धीकरण.

इतर दोन परिस्थिती देखील स्वतंत्रपणे हाताळल्या पाहिजेत:

  • एक फ्रेम आहे परंतु मूल्य चुकीचे आहे: मजकूर स्तर स्वतःच चुकीचा असू शकतो, किंवा जुळणारे लक्ष्य चुकीचे आहे. निर्देशांक तपासण्यासाठी आणि मूल्याचे समर्थन करण्यापासून रोखण्यासाठी तुम्ही मूळ पृष्ठावर परत जावे.
  • फ्रेम लुकिंग ऑफसेट: डिस्प्ले कोऑर्डिनेट्स आणि एक्सट्रॅक्शन कोऑर्डिनेट्स मिश्रित असू शकतात आणि रोटेशन, क्रॉपिंग आणि रेंडरिंग स्केलिंगची ट्रान्सफॉर्मेशन चेन स्पष्ट असणे आवश्यक आहे.

📊 मुख्य तुलना

क्वेरी पद्धतनिर्णयाचे निकषलक्ष देणे आवश्यक आहे
पूर्ण समावेश (दत्तक उदाहरण)उमेदवार आयत पूर्णपणे क्वेरी क्षेत्रात येतोजेव्हा क्वेरी बॉक्स खूप घट्ट असतो, तेव्हा बाजूला असलेल्या रकमेवर शून्य हिट असू शकतात.
केंद्रबिंदू पडतो (दुसरा नियम लिहावा लागेल)उमेदवार केंद्र बिंदू प्रदेशात येतोसीमा ओव्हरलॅपसाठी स्वतंत्र चाचणी आवश्यक आहे
संपूर्ण पृष्ठ क्वेरीसर्व उमेदवार शोधापरिणाम बहुतेक संदिग्ध असतात आणि लेबलिंग किंवा मॅन्युअल पुढील निर्णय आवश्यक असतात.

हा सार्वत्रिक रक्कम काढणारा नाही

कोड चलन, हजारो विभाजक किंवा दशांश नियमांचे विश्लेषण करत नाही किंवा "या कालावधीत देय" विरुद्ध "मागील कालावधीतील शिल्लक" सारख्या शब्दार्थ ओळखत नाही. फक्त एकच उमेदवार आहे याचा अर्थ व्यावसायिक अर्थ योग्य आहे असे नाही.

स्कॅनमध्ये प्रथम मजकूर आणि स्थान उपलब्ध असणे आवश्यक आहे. मजकूर स्तर असलेली पृष्ठे परंतु चुकीची सामग्री रिलीझ केली जाऊ शकत नाही कारण ती कॉपी केली जाऊ शकतात.

हा लेख न फिरवलेली सिंथेटिक पृष्ठे वापरतो. जेव्हा वास्तविक पृष्ठ फिरवले जाते, तेव्हा तुम्ही प्रथम क्वेरी बॉक्स डिस्प्ले स्क्रीनवरून आला आहे की नाही हे सूचित केले पाहिजे आणि नंतर आवश्यक असल्यास ते रूपांतरित करा. स्त्रोताकडे दुर्लक्ष करून मॅट्रिक्सने गुणाकार करू नका.

स्रोत पृष्ठे जतन करताना, समीक्षक पृष्ठे उघडल्यानंतर पुरावे अस्तित्वात नसल्याचा चुकीचा विचार करून समीक्षकांना टाळण्यासाठी तुम्ही शून्य-आधारित अनुक्रमणिका आणि मानवाभिमुख पृष्ठ क्रमांक यांच्यात फरक केला पाहिजे.

🎯 तुमच्यासाठी कोणती पद्धत योग्य आहे?

जर तुम्हाला निश्चित लेआउट फॉर्ममधून नंबर मिळवायचे असतील

प्रथम व्यवसाय फील्ड जेथे आहे ते क्षेत्र मर्यादित करा, नंतर रक्कम शोधा आणि पृष्ठ क्रमांक, आयत आणि नियम आवृत्ती जतन करा.

तुम्हाला अनेक उमेदवार आढळल्यास

पहिला थेट घेऊ नका, सर्व उमेदवारांना परत करा आणि लेबल किंवा मॅन्युअल निर्णयावर आधारित व्यवसाय फील्ड निश्चित करा.

जर तुमच्या पेजला अनेकदा शून्य हिट्स मिळत असतील

क्षेत्र निर्देशांक तपासा, रक्कम विभाजित केली आहे की नाही आणि श्रेणी समायोजित करण्याचा निर्णय घेण्यापूर्वी किंवा दुसरा काढण्याचा मार्ग वापरण्यापूर्वी मजकूर स्तर अस्तित्वात आहे का.

तुम्हाला दस्तऐवज भाषांतर करायचे असल्यास

मॅन्युअल पुनरावलोकनामध्ये मुख्य सामग्री जसे की रक्कम, तारीख, प्रमाण इ. समाविष्ट करा आणि तांत्रिक तपासणी आणि मॅन्युअल पुनरावलोकन यांच्यामध्ये श्रमांची स्पष्ट विभागणी करा.

भाषांतरानंतरच्या पुनरावलोकनासाठी महत्त्वाचे आकडे सोडा

दस्तऐवज भाषांतर केवळ वाक्ये गुळगुळीत आहेत की नाही यावर अवलंबून नाही तर रक्कम, तारीख आणि प्रमाण यासारख्या महत्त्वाच्या सामग्रीची देखील एक-एक करून पुष्टी करणे आवश्यक आहे. OmniDoc (उत्पादन पोर्टल) विविध दस्तऐवजांसाठी भाषांतर पोर्टल प्रदान करते. अधिकृत वेबसाइटवर सादर केलेली द्विभाषिक तुलना पुनरावलोकन पोर्टल म्हणून वापरली जाऊ शकते; कोऑर्डिनेट पोझिशनिंग स्क्रिप्ट मूळ मजकूर पुरावा ठेवण्यासाठी आणि समस्या क्षेत्र शोधण्यात मदत करण्यासाठी योग्य आहे.

तुम्हाला मूल्यमापनासाठी अपलोड करण्याची परवानगी असलेले असंवेदनशील नमुने प्रथम वापरण्याची शिफारस केली जाते. जेव्हा भाषांतर मोठे होते, तेव्हा सामग्रीची स्थिती योग्यरित्या बदलू शकते. "जुने आणि नवे निर्देशांक तंतोतंत सारखेच आहेत" ही योग्य भाषांतरासाठी कठीण स्थिती मानली जाऊ शकत नाही.

अधिक मौल्यवान धनादेश आहेत: रक्कम ठेवली आहे की नाही, चलन स्पष्ट आहे की नाही आणि संबंधित लेबल अद्याप समान व्यवसाय अर्थ दर्शविते की नाही.

❓ वारंवार विचारले जाणारे प्रश्न (FAQ)

1. फक्त पहिली हिट का नाही?

कारण पूर्ण-मजकूर शोध तुम्हाला फक्त रक्कम कुठे दिसते हे सांगू शकतो, ते व्यवसाय क्षेत्र कोणते आहे हे ठरवू शकत नाही. फक्त पहिला हिट घ्या आणि परिणाम बरोबर दिसू शकतो, परंतु स्त्रोत चुकीचा असू शकतो.

2. फक्त काठाला स्पर्श करण्याऐवजी क्वेरी बॉक्स पूर्णपणे का समाविष्ट करणे आवश्यक आहे?

अपूर्ण तुकड्यांना वैध हिट म्हणून हाताळणे टाळण्यासाठी उदाहरण संपूर्ण समावेशन निर्धारण पद्धत वापरते. जर क्वेरी बॉक्स खूप घट्ट असेल आणि त्याचा परिणाम शून्य हिटमध्ये असेल, तर समन्वय प्रणाली आणि श्रेणी आपोआप पूर्ण पृष्ठापर्यंत रुंद होण्याऐवजी प्रथम तपासली पाहिजे.

3. जेव्हा क्वेरीचा निकाल शून्य असेल तेव्हा तुम्ही काय करावे?

कारण उमेदवार चिन्हांकित करा आणि शून्य पॅडिंगशिवाय मूळ पृष्ठ तपासा. चुकीचे क्षेत्र, विभाजित रक्कम किंवा गहाळ मजकूर स्तर या सर्वांचा परिणाम शून्य हिट होऊ शकतो.

४. हा कोड प्रत्यक्ष बिलांसाठी वापरता येईल का?

ते थेट वापरले जाऊ शकत नाही. उदाहरणे चलन, हजारो विभाजक आणि व्यावसायिक शब्दार्थांशी संबंधित नाहीत आणि या लेखातील सिंथेटिक उदाहरणे वास्तविक बिलांच्या अचूकतेची चाचणी दर्शवत नाहीत.

📝 सारांश

रक्कम शोधताना, प्रथम क्षेत्र मर्यादित करा, आणि नंतर उमेदवारांची संपूर्ण संख्या निर्णयासाठी कॉलरकडे सोपवा. शून्य हिट आणि एकाधिक हिटसाठी स्पष्ट प्रक्रिया क्रिया असाव्यात. नियमांची पडताळणी करण्यासाठी प्रथम डिसेन्सिटाइज्ड नमुने वापरा आणि नंतर हळूहळू वास्तविक कागदपत्रांमध्ये प्रवेश करा.

हे आता वापरून पहा: मूळ लेआउट कायम ठेवून भाषांतर सुरू करण्यासाठी दस्तऐवज अपलोड करा

अद्यतनित 2026-11-14