मॉडल एक अतिरिक्त फ़ील्ड उगलता है. क्या इसे सीधे प्रदर्शित किया जाना चाहिए या अस्वीकार कर दिया जाना चाहिए? आइए पहले देखें कि क्या कोई समझौता होता है
निष्कर्षण परिणाम में एक अतिरिक्त `confidence` है। सामने का सिरा बहुत उपयोगी दिखता है, इसलिए इसे सीधे "विश्वसनीयता" के रूप में प्रदर्शित किया जाता है। समस्या यह है कि इस क्षेत्र को न तो परिभाषित किया जा सकता है और न ही अंशांकित किया जा सकता है। अतिरिक्त फ़ील्ड आवश्यक रूप से हानिरहित नहीं है: यह डाउनस्ट्रीम उपयोगकर्ताओं को असहमत मूल्यों पर भरोसा करने की अनुमति दे सकता है।
मॉडल संरचित निष्कर्षण परिणामों में एक और फ़ील्ड लौटाता है, और फ्रंट एंड इसे आसानी से उपयोगी जानकारी के रूप में सीधे प्रदर्शित कर सकता है। उदाहरण के लिए, यदि निष्कर्षण परिणाम में कोई अतिरिक्त confidence है, तो इसे पृष्ठ पर "विश्वसनीयता" के रूप में प्रदर्शित किया जाएगा। समस्या यह है कि इस क्षेत्र को न तो परिभाषित किया जा सकता है और न ही अंशांकित किया जा सकता है। अतिरिक्त फ़ील्ड आवश्यक रूप से हानिरहित नहीं हैं, और डाउनस्ट्रीम उपयोगकर्ताओं को निर्णय के आधार के रूप में असहमत मूल्यों का उपयोग करने की अनुमति दे सकते हैं।
यह लेख उन छात्रों के लिए उपयुक्त है जो इंटरफ़ेस डिज़ाइन, फ्रंट-एंड और बैक-एंड डॉकिंग, या दस्तावेज़ प्रसंस्करण प्रक्रियाओं के लिए जिम्मेदार हैं। निम्नलिखित बताता है कि पहले यह कैसे तय किया जाए कि इंटरफ़ेस खुला है या बंद है, अज्ञात फ़ील्ड को अवलोकन योग्य त्रुटियों में कैसे बदला जाए, और अस्वीकृति के बाद कौन सी जानकारी वापस की जानी चाहिए। इसे पढ़ने के बाद, आप यह तय कर सकते हैं कि अतिरिक्त फ़ील्ड को अस्वीकार किया जाना चाहिए, अनदेखा किया जाना चाहिए या नए संस्करण में शामिल किया जाना चाहिए।
यह आलेख प्रसंस्करण विधि को प्रदर्शित करने के लिए सिंथेटिक नमूनों का उपयोग करता है। कोड को एक पृथक वातावरण में उदाहरणों के साथ जांचा गया है और यह सभी वास्तविक फ़ाइलों या उत्पाद प्रदर्शन की गारंटी नहीं है। महत्वपूर्ण दस्तावेज़ों को संसाधित करने से पहले, कृपया मूल दस्तावेज़ अपने पास रखें और पाठ में सीमाओं और स्वीकृति आइटम के अनुसार उनकी समीक्षा करें।
क्या मॉडल के एकाधिक फ़ील्ड सीधे प्रदर्शित किए जा सकते हैं? एक वाक्य का निष्कर्ष
पहले अनुबंध पर सहमत हों, और फिर निर्णय लें कि इसे स्वीकार करना है या अस्वीकार करना है: अपरिभाषित और कैलिब्रेटेड फ़ील्ड को सीधे विश्वसनीय साक्ष्य के रूप में प्रदर्शित नहीं किया जाना चाहिए।
| आपकी स्थिति | अनुशंसित प्रथाएँ | कारण |
|---|---|---|
| आंतरिक अन्वेषण उपकरण | एक्सटेंशन फ़ील्ड की अनुमति दी जा सकती है | अन्वेषण चरण के दौरान लचीलेपन को प्राथमिकता दें |
| स्थिर वितरण इंटरफ़ेस | प्रत्येक परत को additionalProperties: false से बंद करें | डाउनस्ट्रीम गलत पढ़ने से बचने के लिए अपरिभाषित विशेषताओं को अस्वीकार करें |
| नए कानूनी क्षेत्र प्रकट होते हैं | स्कीमा का नया संस्करण प्रकाशित करें | पुराने संस्करणों को गुप्त रूप से शिथिल न करें |
| अनावश्यक फ़ील्ड को अनदेखा करना चुनें | मूल परिणाम और फ़िल्टरिंग व्यवहार लॉग करें | यह अंतर करना सुविधाजनक है कि क्या स्रोत डेटा में यह फ़ील्ड नहीं है या क्या इंटरफ़ेस परत ने इसे हटा दिया है। |
पहले तय करें कि इंटरफ़ेस खुला है या बंद है
आंतरिक अन्वेषण उपकरण विस्तारित फ़ील्ड की अनुमति दे सकते हैं, और स्थिर वितरण इंटरफ़ेस के लिए अक्सर सख्त सीमाओं की आवश्यकता होती है। जब JSON स्कीमा का अतिरिक्तगुण false पर सेट होता है, तो वर्तमान ऑब्जेक्ट की अपरिभाषित विशेषताओं को अस्वीकार कर दिया जा सकता है, लेकिन प्रत्येक नेस्टेड ऑब्जेक्ट स्वचालित रूप से पुनरावर्ती रूप से ओवरराइट नहीं किया जाएगा। प्रत्येक स्तर पर क्या अनुमति है यह स्पष्ट रूप से लिखा जाना चाहिए।
इसका मतलब यह नहीं है कि सभी इंटरफ़ेस को सभी एक्सटेंशन को अस्वीकार कर देना चाहिए। मुख्य बात यह है कि विकल्प को स्पष्ट किया जाए और अपग्रेड के लिए वर्जनिंग तंत्र को खुला छोड़ दिया जाए। आज एक ही नाम वाले फ़ील्ड को चुपचाप अनदेखा करना और कल अचानक उनका उपयोग करना आसानी से ऐतिहासिक डेटा की विभिन्न व्याख्याओं को जन्म दे सकता है।
अज्ञात फ़ील्ड को अवलोकन योग्य त्रुटियों में बदलें
from jsonschema import Draft202012Validator
schema = {"type": "object", "required": ["name", "evidence"],
"properties": {"name": {"type": "string"},
"evidence": {"type": "object", "required": ["page"],
"properties": {"page": {"type": "integer", "minimum": 1}},
"additionalProperties": False}},
"additionalProperties": False}
validator = Draft202012Validator(schema)
valid = lambda x: not list(validator.iter_errors(x))
assert valid({"name": "Demo", "evidence": {"page": 1}})
assert not valid({"name": "Demo", "confidence": 0.99, "evidence": {"page": 1}})
assert not valid({"name": "Demo", "evidence": {"page": 1, "guess": True}})
उदाहरण में संख्यात्मक मान 0.99 केवल एक सिंथेटिक इनपुट है जिसे अस्वीकार कर दिया जाना चाहिए, किसी भी मॉडल के लिए वास्तविक गुणवत्ता परिणाम नहीं। उदाहरण उन चूकों को रोकने के लिए एक ही समय में शीर्ष-स्तर और नेस्टेड परतों की जाँच करता है जो केवल बाहरी परत को बंद करती हैं और आंतरिक परत को मनमाने ढंग से विस्तार करने की अनुमति देती हैं।
अस्वीकृति के बाद मरम्मत योग्य जानकारी प्रदान करें
| स्थिति | वापसी की जानकारी शामिल होनी चाहिए | जो नहीं करना है |
|---|---|---|
| शीर्ष स्तरीय अनेक फ़ील्ड | अज्ञात कुंजी नाम, प्रोटोकॉल संस्करण | इसे स्वचालित रूप से एक विश्वसनीय संकेतक के रूप में दिखाएं |
| आंतरिक बहु-क्षेत्र | ऑब्जेक्ट पथ, अज्ञात कुंजी नाम | केवल एक JSON त्रुटि लौटाएँ |
| नया संस्करण कानूनी विस्तार | स्पष्ट नई स्कीमा | पुराने संस्करणों को गुप्त रूप से शिथिल करें |
| मॉडल बार-बार अनावश्यक कुंजियाँ आउटपुट करता है | निष्कर्षण कार्य विफलता का कारण | प्रत्येक विलोपन के बाद, यह दिखावा किया जाता है कि मूल आउटपुट योग्य है। |
📊 कोर तुलना: खुला इंटरफ़ेस और बंद इंटरफ़ेस
| DIMENSIONS | इंटरफ़ेस खोलें | बंद इंटरफ़ेस |
|---|---|---|
| लागू परिदृश्य | आंतरिक अन्वेषण उपकरण | स्थिर वितरण इंटरफ़ेस |
| अनावश्यक फ़ील्ड को संभालना | विस्तार की अनुमति दें | अपरिभाषित गुणों को अस्वीकार करें |
| मुख्य जोखिम | असहमत मूल्यों को आधार के रूप में उपयोग किया जाता है | कार्य तब विफल हो जाता है जब मॉडल कभी-कभी एकाधिक आउटपुट देता है और इसकी जांच करने की आवश्यकता होती है। |
| अपग्रेड विधि | सीधे प्रयोग करें | स्कीमा के नए संस्करणों द्वारा स्पष्ट रूप से विस्तारित |
फ़ील्ड छोड़ना भी एक डेटा प्रोसेसिंग निर्णय है
यदि "ज्ञात फ़ील्ड पढ़ें, अन्य फ़ील्ड को अनदेखा करें" का वास्तव में उपयोग किया जाता है, तो मूल परिणाम और फ़िल्टरिंग व्यवहार को प्रलेखित किया जाना चाहिए। अन्यथा, यह अंतर करना मुश्किल होगा कि क्या स्रोत डेटा में मूल रूप से एक निश्चित आइटम नहीं है, या क्या इंटरफ़ेस परत ने इसे हटा दिया है। फील्ड ड्रॉपिंग भी किसी मॉडल के प्रोटोकॉल के गैर-अनुपालन को छुपाने का एक तरीका नहीं होना चाहिए।
अनुवाद और निष्कर्षण के लिए एक सीमा छोड़ें
दस्तावेज़ अनुवाद आउटपुट और संरचित फ़ील्ड आउटपुट दो अलग-अलग अनुबंध हैं। दस्तावेज़ों को संसाधित करने के लिए OmniDoc का उपयोग करते समय, आप अनुवाद के बाद सत्यापन के लिए फ़ील्ड सूची का उपयोग कर सकते हैं, लेकिन आप स्वचालित रूप से अतिरिक्त व्यावसायिक निर्णय या आत्मविश्वास फ़ील्ड को केवल इसलिए स्वीकार नहीं कर सकते क्योंकि अनुवाद सुचारू है।
🎯कौन सा तरीका आपके लिए उपयुक्त है?
यदि आप आंतरिक अन्वेषण उपकरण कर रहे हैं
एक्सटेंशन फ़ील्ड की अनुमति दी जा सकती है, लेकिन उन्हें अभी भी अपरिभाषित के रूप में प्रदर्शित किया जाना चाहिए।
यदि आप एक स्थिर डिलीवरी इंटरफ़ेस बनाए रख रहे हैं
प्रत्येक परत को additionalProperties: false से संलग्न करें और नेस्टेड ऑब्जेक्ट के लिए अलग-अलग सीमाएँ परिभाषित करें।
यदि आप नए क्षेत्रों का परिचय देना चाहते हैं
स्कीम के नए संस्करण जारी करें, पुराने संस्करणों को गुप्त रूप से शिथिल न करें।
यदि आपकी प्रक्रिया को अनावश्यक फ़ील्ड को हटाने की आवश्यकता है
बाद में आसानी से पता लगाने के लिए मूल परिणाम और फ़िल्टरिंग व्यवहार को रिकॉर्ड करें।
❓ अक्सर पूछे जाने वाले प्रश्न (FAQ)
1. क्या additionalProperties: false सभी स्तरों को कवर कर सकता है?
स्वचालित रूप से अधिलेखित नहीं किया जा सकता. यह केवल वर्तमान ऑब्जेक्ट की अपरिभाषित विशेषताओं को अस्वीकार करता है, और प्रत्येक नेस्टेड ऑब्जेक्ट को स्पष्ट रूप से लिखने की आवश्यकता होती है जिसे अलग से अनुमति दी गई है।
2. क्या एक मॉडल में एकाधिक आउटपुट फ़ील्ड आवश्यक रूप से हानिकारक हैं?
जरूरी नहीं है, लेकिन यह डाउनस्ट्रीम उपयोगकर्ताओं को आधार के रूप में असहमत मानों का उपयोग करने की अनुमति दे सकता है, इसलिए उनकी परिभाषा और अंशांकन स्थिति की पहले पुष्टि की जानी चाहिए।
3. अतिरिक्त फ़ील्ड अस्वीकार करते समय क्या लौटाया जाना चाहिए?
इसमें अज्ञात कुंजी नाम, ऑब्जेक्ट पथ (जब आंतरिक हो) और प्रोटोकॉल संस्करण शामिल होना चाहिए, न कि केवल JSON त्रुटि।
4. क्या अनावश्यक फ़ील्ड को सीधे अनदेखा किया जा सकता है?
हां, लेकिन कच्चे परिणाम और फ़िल्टरिंग व्यवहार को दस्तावेजित किया जाना चाहिए और उन समस्याओं को छिपाने के लिए इसका उपयोग करने से बचना चाहिए जहां मॉडल प्रोटोकॉल का पालन नहीं करता है।
📝सारांश
अतिरिक्त फ़ील्ड केवल इसलिए सीधे प्रदर्शित नहीं किए जा सकते क्योंकि वे उपयोगी लगते हैं। आपको पहले इंटरफ़ेस सीमाओं पर सहमत होना होगा, और फिर निर्णय लेना होगा कि संस्करण को स्वीकार करना है, अस्वीकार करना है या अपग्रेड करना है। केवल प्रत्येक परत पर नियमों को स्पष्ट करके ही ऐतिहासिक डेटा और डाउनस्ट्रीम व्याख्या सुसंगत हो सकती है।
इसे अभी आज़माएं: मूल लेआउट को बरकरार रखते हुए अनुवाद शुरू करने के लिए दस्तावेज़ अपलोड करें


