JSONకి సంగ్రహించడం అంటే వెలికితీత సరైనదని అర్థం కాదు: మొత్తం, యూనిట్ మరియు మూలం కోసం ఫీల్డ్ ఒప్పందాలను ఏర్పాటు చేయండి
సంగ్రహణ ఫలితం JSONకి మార్చబడినందున, సంగ్రహణ సరైనదని అర్థం కాదు. ఈ కథనం మొత్తం, యూనిట్, పేజీ సంఖ్య, ఒరిజినల్ టెక్స్ట్ మరియు కోఆర్డినేట్లను తనిఖీ చేయడానికి దశాంశ మరియు ఫీల్డ్ ఒప్పందాలను ఉపయోగిస్తుంది మరియు సాధారణ ఇన్పుట్ మరియు అసాధారణ ఇన్పుట్ కోసం నిర్ణయాత్మక పరీక్షలను జతచేస్తుంది, తద్వారా ఎర్రర్లు దిగువకు ప్రవేశించే ముందు వాటిని ఆపివేయవచ్చు.
సంగ్రహణ ఫలితం JSON ద్వారా అన్వయించబడినందున అది నేరుగా డేటాబేస్లో నిల్వ చేయబడుతుందని కాదు. దిగువ సిస్టమ్లలోకి బిల్లు మరియు కొటేషన్ డేటాను పంపాల్సిన డెవలపర్ల కోసం ఈ కథనం వ్రాయబడింది. మేము కఠినమైన సరిహద్దులను ప్రదర్శించడానికి సింథటిక్ కొటేషన్ భాగాన్ని ఉపయోగిస్తాము: విలువతో పాటు, ప్రతి ఫీల్డ్లో యూనిట్, సోర్స్ పేజీ, సోర్స్ టెక్స్ట్ మరియు కోఆర్డినేట్లు కూడా ఉంటాయి. అభ్యర్థులను ప్రతిపాదించడానికి పార్సర్ లేదా మోడల్ మాత్రమే బాధ్యత వహిస్తుంది మరియు వాటిని డేటాబేస్లో చేర్చవచ్చో లేదో నిర్ణయించే వెరిఫైయర్ నిర్ణయిస్తుంది.
దీన్ని చదివిన తర్వాత, మీరు ఫీల్డ్ కాంట్రాక్ట్ల సమితి యొక్క ఆలోచనను గ్రహించగలరు మరియు డిఫాల్ట్గా సున్నాతో పూరించడానికి బదులుగా తప్పిపోయిన మరియు అనిశ్చిత ఫీల్డ్లను స్పష్టంగా ఎలా ఉంచుకోవాలో తెలుసుకోగలరు.
వెలికితీత ఫలితాలను నేరుగా డేటాబేస్లో నిల్వ చేయవచ్చా? ఒక వాక్యం ముగింపు
ఇది డేటాబేస్లో నమోదు చేయబడుతుందా అనేది JSONని అన్వయించవచ్చా అనేదానిపై కాకుండా ఫీల్డ్ కాంట్రాక్ట్ మరియు సాక్ష్యం ధృవీకరణ ఉత్తీర్ణతపై ఆధారపడి ఉంటుంది; వెరిఫై చేయడంలో విఫలమైన ఫీల్డ్లు పెండింగ్లో ఉండాలి మరియు డిఫాల్ట్గా సున్నాతో పూరించలేము.
| మీ పరిస్థితి | సిఫార్సు చేసిన పద్ధతులు | కారణం |
|---|---|---|
| పార్సర్ చెల్లుబాటు అయ్యే JSONని అందించింది | ఫీల్డ్ కాంట్రాక్ట్ ధృవీకరణను కొనసాగించండి మరియు నేరుగా డేటాబేస్లో నిల్వ చేయవద్దు. | JSON అంటే అది ప్రోగ్రామ్ ద్వారా చదవబడుతుంది |
| మొత్తానికి కరెన్సీ లేదా యూనిట్ లేదు | కరెన్సీని ఊహించవద్దు, తప్పిపోయిన స్థితిని కొనసాగించండి | రహస్యంగా RMBని ఊహించడం మానుకోండి |
1.200,50 వంటి ప్రాంతీయ ఫార్మాట్లలో మొత్తం కనిపిస్తుంది | ప్రతి అనుమతించబడిన ఫార్మాట్ కోసం విడిగా ఒప్పందాలను నిర్వచించండి | ప్రాంతీయ నియమాలు సాధారణంగా మరియు ఏకరీతిగా నిర్వహించబడవు |
| తనిఖీ చేయడానికి పత్రానికి తిరిగి వెళ్లాలి | పేజీ సంఖ్యలు, మూల వచనం మరియు కోఆర్డినేట్లను సేవ్ చేయండి మరియు పేజీ సంఖ్య పరిధులను తనిఖీ చేయండి | సమీక్షకుల స్థాన ప్రాతిపదికను సులభతరం చేయండి |
| బహుళ కరెన్సీలు లేదా మారకపు ధరలను కలిగి ఉంటుంది | అసలు కరెన్సీ మొత్తం, కరెన్సీ రకం మరియు మారకం రేటు మూలం అలాగే ఉంచబడతాయి మరియు అవ్యక్త మార్పిడి నిర్వహించబడదు. | మార్పిడి రేట్లు లేకుండా మొత్తాలను మార్చడం సాధ్యం కాదు |
సాక్ష్యంతో పాటు విలువను పాస్ చేయండి
ఇన్వాయిస్ లేదా కోట్ను పార్సర్కి అందజేయండి మరియు మీరు తిరిగి పొందే JSON ప్రోగ్రామ్ దాన్ని చదవగలదని మాత్రమే మీకు తెలియజేస్తుంది. 1200 ఇది యూనిట్ ధర లేదా మొత్తం మొత్తం? కరెన్సీ ఎక్కడ ఉంది? 1.200,50 ఏ ప్రాంతీయ నియమాల ప్రకారం అర్థం చేసుకోవాలి? తిరిగి వచ్చిన పేజీ సంఖ్య నిజంగా ఉందా? ఇవి JSON సింటాక్స్ సమాధానం ఇవ్వగల ప్రశ్నలు కాదు.
| ఫీల్డ్ | నిర్బంధం | ఎందుకు అవసరం |
|---|---|---|
| మొత్తం | దశాంశ స్ట్రింగ్, ఉదాహరణ నాన్-నెగటివ్ మరియు రెండు దశాంశ స్థానాలకు పరిమితం చేయబడింది | బైనరీ ఫ్లోటింగ్ పాయింట్ ఉజ్జాయింపులను అనుకోకుండా పరిచయం చేయవద్దు |
| currency | ఈ దృశ్యం USDకి పరిమితం చేయబడింది | కరెన్సీ లేనప్పుడు రహస్యంగా RMBని ఊహించవద్దు |
| source.page | 1 వద్ద ప్రారంభమవుతుంది మరియు పేజీల సంఖ్యను మించకూడదు | వినియోగదారులు పత్రం యొక్క అసలు స్థానానికి తిరిగి రావడాన్ని సులభతరం చేయండి |
| source.quote | తప్పనిసరిగా కాలర్ అందించిన పేజీలోని భాగం అయి ఉండాలి | సమీక్షకులకు కనిపించే సాక్ష్యాలను అందించండి |
| source.bbox | పరిమిత విలువ, పేజీ పరిధిలో | సాక్ష్యం వలె నటించకుండా ఖాళీ పెట్టెలు మరియు చెల్లని కోఆర్డినేట్లను నిరోధించండి |
ఇక్కడ కోఆర్డినేట్ యూనిట్ PDF పాయింట్ మరియు మూలం ప్రస్తుత అంగీకరించిన పేజీ యొక్క ఎగువ ఎడమ మూలలో ఉంది. అప్స్ట్రీమ్ మొదట రొటేషన్, క్రాపింగ్ మరియు కోఆర్డినేట్ సిస్టమ్లను ఏకీకృతం చేయాలి మరియు వివిధ పార్సర్ల కోఆర్డినేట్లను నేరుగా కలపకూడదు. ఈ ఉదాహరణ సమావేశాన్ని మాత్రమే ప్రదర్శిస్తుంది మరియు టెక్స్ట్ నిజానికి బాక్స్లో చేర్చబడిందని నిరూపించదు.
పూర్తి ధృవీకరణ మరియు తిరస్కరణ పరీక్ష
పైథాన్ ప్రామాణిక లైబ్రరీని మాత్రమే ఉపయోగించి దీన్ని అమలు చేయవచ్చు. Decimal తప్పనిసరిగా స్ట్రింగ్ నుండి నిర్మించబడాలి, దానిని ముందుగా floatకి మార్చవద్దు, ఆపై దానిని పాస్ చేయవద్దు. మొత్తాల యొక్క ఖచ్చితమైన దశాంశ ప్రాసెసింగ్ కోసం, దయచేసి పైథాన్ దశాంశ డాక్యుమెంటేషన్ని చూడండి.
దిగువ కోడ్ అసలు పరీక్ష అవుట్పుట్, గుర్తింపు ఖచ్చితత్వ నివేదిక కాదు. నమూనా ఇన్పుట్లు మాచే చేతితో వ్రాయబడ్డాయి మరియు నిజమైన బిల్లులపై OCR లేదా మోడల్ మూల్యాంకనం చేయలేదు.
from copy import deepcopy
from decimal import Decimal
import math
import re
pages = [{"width": 595, "height": 842,
"text": "Total: USD 1,200.50\nDelivery within 10 days"}]
def validate(candidate, pages):
if set(candidate) != {"amount", "currency", "source"}:
raise ValueError("unexpected or missing field")
raw = candidate["amount"]
if not isinstance(raw, str) or not re.fullmatch(r"(?:0|[1-9][0-9]*)\.[0-9]{2}", raw):
raise ValueError("amount must be a two-decimal string")
if candidate["currency"] != "USD":
raise ValueError("unsupported currency for this contract")
src = candidate["source"]
if not isinstance(src, dict) or set(src) != {"page", "quote", "bbox"}:
raise ValueError("source contract mismatch")
number = src["page"]
if type(number) is not int or not 1 <= number <= len(pages):
raise ValueError("page outside document")
page = pages[number - 1]
quote = src["quote"]
if not isinstance(quote, str) or not quote or quote not in page["text"]:
raise ValueError("source quote not found")
match = re.fullmatch(r"Total: USD ([0-9]{1,3}(?:,[0-9]{3})*\.[0-9]{2})", quote)
if not match or Decimal(match[1].replace(",", "")) != Decimal(raw):
raise ValueError("amount does not agree with source")
box = src["bbox"]
if (not isinstance(box, list) or len(box) != 4
or any(type(v) not in (int, float) or not math.isfinite(v) for v in box)):
raise ValueError("invalid box values")
x0, y0, x1, y1 = box
if not (0 <= x0 < x1 <= page["width"] and 0 <= y0 < y1 <= page["height"]):
raise ValueError("box outside page or empty")
return {"amount": str(Decimal(raw)), "currency": "USD", "source": deepcopy(src)}
good = {"amount": "1200.50", "currency": "USD", "source": {
"page": 1, "quote": "Total: USD 1,200.50", "bbox": [40, 70, 260, 90]}}
assert validate(good, pages)["amount"] == "1200.50"
print("PASS valid source-linked amount: USD 1200.50")
bad_cases = []
wrong = deepcopy(good); wrong["amount"] = "12000.50"; bad_cases.append(wrong)
wrong = deepcopy(good); wrong["source"]["page"] = 2; bad_cases.append(wrong)
wrong = deepcopy(good); wrong["source"]["bbox"][2] = float("nan"); bad_cases.append(wrong)
wrong = deepcopy(good); wrong["source"]["bbox"][0] = 300; bad_cases.append(wrong)
for index, wrong in enumerate(bad_cases, 1):
try:
validate(wrong, pages)
raise AssertionError("bad candidate accepted")
except ValueError as error:
print(f"PASS rejection {index}: {error}")
సన్నివేశం కఠినంగా ఉన్నందున క్రమబద్ధత కఠినంగా ఉంటుంది
ఈ రీజెక్స్ ఉదాహరణలోని ఆంగ్ల మొత్త ఆకృతిని మాత్రమే అంగీకరిస్తుంది. ఇది క్రింది పరిస్థితులను తిరస్కరిస్తుంది:
- యూరోపియన్ దశాంశం
- ప్రతికూల సంఖ్య
- రీఫండ్లు బ్రాకెట్లలో సూచించబడ్డాయి
- ఇతర కరెన్సీలు
- వెయ్యి లేకుండా నాలుగు అంకెల సంఖ్యలు
రియల్ సిస్టమ్లు డాక్యుమెంట్ రకం మరియు ప్రాంతం ఆధారంగా స్వతంత్ర ఒప్పందాలను ఎంచుకోవాలి మరియు అన్ని కామాలు, చుక్కలు మరియు ఖాళీలను మాత్రమే తొలగించకూడదు.
ఇన్పుట్ పరిధిని మరింత విస్తరించే ముందు, అనుమతించబడిన ప్రతి ఫార్మాట్కు అనుకూల మరియు తిరస్కరణ ఉదాహరణలను సిద్ధం చేయండి. ఇది బహుళ-కరెన్సీ బిల్లు అయితే, అసలు కరెన్సీ మొత్తం, కరెన్సీ మరియు మార్పిడి రేటు మూలాన్ని ఫీల్డ్లలో ఉంచాలి; మార్పిడి రేటు లేకుండా, మొత్తాన్ని రహస్యంగా మార్చలేరు.
📊 కోర్ పోలిక
| స్థాయిని తనిఖీ చేయండి | సమాధానం ఇవ్వగల ప్రశ్నలు | ఇంకా సమాధానం లేని ప్రశ్నలు |
|---|---|---|
| JSON పార్సింగ్ | ప్రోగ్రామ్ ద్వారా కంటెంట్ చదవవచ్చో లేదో | మొత్తం యూనిట్ ధర లేదా మొత్తం మొత్తం, మరియు కరెన్సీ ఎంత? |
| ఫీల్డ్ ఒప్పందం | మొత్తం ఫార్మాట్, కరెన్సీ, పేజీ సంఖ్య పరిధి మరియు కోఆర్డినేట్లు చట్టబద్ధంగా ఉన్నాయా? | కోఆర్డినేట్ ఫ్రేమ్ ఖచ్చితంగా వచనాన్ని చుట్టి ఉందా |
| మూల తనిఖీ | ప్రస్తుత పేజీ వచనంలో కోట్ ఉందా మరియు మొత్తం పరిమితం చేయబడిన ఆకృతికి సమానంగా ఉందా | వ్యాపారం కోసం లైన్ నిజమైన చివరి మొత్తమా? |
"రుజువు" అంటే "రుజువు" అని కాదు
ప్రోగ్రామ్ ప్రస్తుత పేజీ యొక్క టెక్స్ట్లో కోట్ ఉందని మరియు మొత్తం ఈ పరిమితం చేయబడిన ఆకృతికి సమానమని ధృవీకరిస్తుంది. కోఆర్డినేట్ ఫ్రేమ్ అసలు వచనాన్ని ఖచ్చితంగా చుట్టిందో లేదో ధృవీకరించదు లేదా వ్యాపారం యొక్క నిజమైన మొత్తం వరుస కాదా అని నిర్ధారించదు. అప్స్ట్రీమ్ టెక్స్ట్ లేయర్లు తప్పు OCR నుండి రావచ్చు మరియు ఒకే పేజీలో బహుళ మొత్తాలు కనిపించవచ్చు.
అందువల్ల, ఫీల్డ్ ఒప్పందాలు మొదటి తలుపు మాత్రమే. తదుపరి స్థాన స్థిరత్వ తనిఖీలు, అదే పేజీలో అభ్యర్థి అయోమయ నివృత్తి, మొత్తం పన్ను మొత్తం సంబంధ ధృవీకరణ మరియు మాన్యువల్ నమూనా కూడా అవసరం. ముఖ్యమైన వ్యాపార డేటా ఈ తలుపుల గుండా వెళ్ళే ముందు, అది "ధృవీకరించబడింది" బదులుగా "ధృవీకరించబడాలి" స్థితిలో సేవ్ చేయబడాలి.
డాక్యుమెంట్ వర్క్ఫ్లో దీన్ని ఎలా అమలు చేయాలి
అసలు ఫైల్ యొక్క సారాంశాన్ని ఉంచండి, ప్రతి వెలికితీత కోసం ప్రాసెస్ చేయబడిన సంస్కరణను రికార్డ్ చేయండి మరియు తిరస్కరణ కారణాన్ని సేవ్ చేయండి. అనువాద ప్రక్రియ కూడా అదే ఫీల్డ్లను ఉపయోగించి ఆడిట్ చేయబడాలి: వచనాన్ని ఇతర భాషలకు మార్చవచ్చు, కానీ ముఖ్యమైన మొత్తాలు మరియు యూనిట్ల మధ్య అనురూప్యం కోల్పోకూడదు. మీరు OmniDoc ఉత్పత్తి పోర్టల్ ద్వారా సంబంధిత డాక్యుమెంట్ సేవల గురించి తెలుసుకోవచ్చు; ఈ కథనంలోని ఒప్పందం మరియు కోడ్ ఉత్పత్తి API నుండి స్వతంత్రంగా ఉంటాయి మరియు బహిర్గతం చేయని ఇంటర్ఫేస్లపై ఆధారపడవు.
🎯 మీకు ఏ పద్ధతి అనుకూలంగా ఉంటుంది?
మీరు బహుళ-కరెన్సీ బిల్లులను ప్రాసెస్ చేయాలనుకుంటే
అసలు కరెన్సీ మొత్తం మరియు కరెన్సీ రకాన్ని వరుసగా ఉంచండి మరియు మార్పిడి రేటు యొక్క మూలాన్ని రికార్డ్ చేయండి. మార్పిడి రేటు లేనట్లయితే మార్పిడి జరగదు.
మీరు ఇన్పుట్ ఫార్మాట్ పరిధిని విస్తరించాలనుకుంటే
ముందుగా ప్రతి ఫార్మాట్కు సానుకూల ఉదాహరణలు మరియు తిరస్కరణ ఉదాహరణలను వ్రాసి, ఆపై నియమాలను సడలించండి. రెగ్యులర్ నిబంధనలను నేరుగా సడలించవద్దు.
డేటాను ఆర్థిక లేదా వ్యాపార నిర్ణయాల కోసం ఉపయోగిస్తే
ఫీల్డ్ని పెండింగ్లో ఉన్న వెరిఫికేషన్గా గుర్తించి, ఆపై పొజిషనింగ్ కాన్సిస్టెన్సీ, ఒకే పేజీ అయోమయ నివృత్తి మరియు మాన్యువల్ నమూనా తర్వాత దాన్ని నిర్ధారించండి.
మీరు డాక్యుమెంట్ అనువాదం చేయాలనుకుంటే
టెక్స్ట్ యొక్క భాషను మార్చవచ్చు, అయితే మొత్తం మరియు యూనిట్ మధ్య సంబంధిత సంబంధాన్ని అదే ఫీల్డ్ ఆడిట్ని ఉపయోగించి తప్పనిసరిగా ఉంచాలి.
❓ తరచుగా అడిగే ప్రశ్నలు (FAQ)
1. JSONని అన్వయించగలిగితే, దానిని నేరుగా డేటాబేస్లో నిల్వ చేయవచ్చా?
లేదు. అన్వయించడం అనేది ప్రోగ్రామ్ ద్వారా కంటెంట్ను చదవగలదని మాత్రమే చూపుతుంది మరియు ఫీల్డ్ ఒప్పందం మరియు సాక్ష్యం ధృవీకరణ కూడా అవసరం.
2. ప్రోగ్రామ్ కోట్ని ధృవీకరించింది, అంటే ఆ మొత్తం తప్పక సరైనదేనా?
లేదు. ఇది ప్రస్తుత పేజీ యొక్క టెక్స్ట్లో కోట్ ఉందని మరియు మొత్తం పరిమితం చేయబడిన ఆకృతికి సమానమని మాత్రమే ధృవీకరిస్తుంది మరియు కోఆర్డినేట్ ఫ్రేమ్ను లేదా వ్యాపారం యొక్క మొత్తం అర్థాన్ని ధృవీకరించదు.
3. తప్పిపోయిన మొత్తాన్ని 0గా ఎందుకు పరిగణించకూడదు?
తప్పిపోయిన మొత్తం, విఫలమైన ధృవీకరణ మరియు నిజానికి సున్నా అనేవి మూడు వేర్వేరు స్థితులు, మరియు వాటిని కలపడం వలన దిగువ వినియోగదారులకు తేడాను గుర్తించడం కష్టమవుతుంది.
4. బహుళ-కరెన్సీ బిల్లులను ఎలా నిర్వహించాలి?
అసలు కరెన్సీ మొత్తం మరియు కరెన్సీ రకం వరుసగా ఉంచబడతాయి. మారకపు రేటు లేనప్పుడు మొత్తాలను మార్చవద్దు మరియు మార్పిడి రేటు మూలాన్ని ఉంచండి.
📝 సారాంశం
సంగ్రహణ ఫలితాలు JSON ఫార్మాట్ ద్వారా కాకుండా ఒప్పందం, సాక్ష్యం మరియు అంగీకారం ద్వారా ఉపయోగించబడతాయి. ప్రతి ఫీల్డ్ డాక్యుమెంట్లోని నిర్దిష్ట పేజీకి తిరిగి గుర్తించబడాలి మరియు ధృవీకరించబడడంలో విఫలమైన డేటా ధృవీకరణ పెండింగ్లో ఉంటుంది.


