Ontbrekende velden en nulvelden zijn twee verschillende fouten.
"Veld niet gevonden" en "Veld is een nulwaarde" kunnen beide leeg verschijnen op de interface, maar ze mogen niet met elkaar worden verward nadat ze het programma hebben geopend. Vul vervolgens de lege plekken in met het cijfer nul, en het probleem zal subtieler zijn: de stroomafwaartse krijgt een juridische waarde, maar denkt dat deze uit de originele tekst komt.
Als het veld niet wordt gevonden of als het veld een nulwaarde heeft, wordt er mogelijk alleen een spatie weergegeven op de interface, maar de betekenis is compleet anders na het openen van het programma. Als het lege vakje vervolgens wordt opgevuld met het cijfer nul, krijgt de stroomafwaarts een juridische waarde, maar denkt ten onrechte dat het uit de originele tekst komt, waardoor het probleem moeilijker te vinden is.
Dit artikel is bedoeld voor ontwikkelaars en documentwerkers die de extractieresultaten ter verwerking aan programma's moeten overdragen. Er wordt uitgelegd hoe u JSON Schema kunt gebruiken om drie statussen te onderscheiden en hoe u verschillende invoervoorbeelden kunt gebruiken om regressiecontroles uit te voeren. Nadat u dit heeft gelezen, kunt u de grenzen voor ontbrekende, null- en nulwaarden voor uw eigen dataprotocol instellen.
De voorbeelden in dit artikel zijn synthetische gegevens en de code is gecontroleerd aan de hand van voorbeelden in een geïsoleerde omgeving, maar dit vormt geen garantie voor alle echte bestanden of producteffecten. Voordat u belangrijke documenten verwerkt, dient u de originelen te bewaren en deze te controleren op basis van de grenzen en acceptatie-items in de tekst.
Eén zin conclusie
Het veld ontbreekt, de waarde is null en de waarde is 0. Er moeten drie verschillende statussen zijn. Het contract moet gebruik maken van het bestaan van de sleutel en het waardetype om ze te scheiden. Het kan niet vertrouwen op interface- of stroomafwaartse gissingen.
| jouw situatie | Aanbevolen praktijken | reden |
|---|---|---|
| Moet bevestigen of de uitvoerstructuur voltooid is | Controleer of de sleutel bestaat met required | Ontbrekende sleutels geven aan dat de uitvoerstructuur onvolledig is en niet gelijk is aan nul. |
| Geen bedrag beschikbaar in het originele artikel | Stel de waarde in op null | null betekent dat er geen beschikbare waarde is verkregen en mag niet met 0 worden gevuld |
| De originele tekst vermeldt expliciet nul | Gebruik waarde 0 | Nul is een ondubbelzinnige waarde, in tegenstelling tot ontbrekende en nulwaarden |
| Er moet worden uitgelegd waarom er niet wordt geëxtraheerd | Voeg een extra veld status of reason toe en definieer toegestane waarden | Vermijd het spellen van de reden in de hoeveelheidreeks om de downstream-demontage te verminderen |
Scheid eerst de drie staten
In het samenstellingscontract van dit artikel moet amount aanwezig zijn, numerieke waarden of null zijn toegestaan. De betekenis van de drie toestanden is als volgt:
- Geen
amount-sleutel: de uitvoerstructuur is onvolledig en vormt een contractuitzondering. amountvoornull: de sleutel bestaat, maar er is momenteel geen bedrag beschikbaar.amountis 0: er is een ondubbelzinnige nulwaarde.
Andere protocollen kunnen voor echte zaken worden gebruikt, maar ze moeten duidelijk geschreven zijn en mogen niet aan elke beller worden overgelaten om te raden.
required van JSON Schema is verantwoordelijk voor het controleren of de sleutel bestaat, en type is verantwoordelijk voor het controleren van het type waarde. Twee veel voorkomende misvattingen vereisen speciale aandacht:
- Alleen het schrijven van
requiredschakeltnullniet automatisch uit. - Alleen het veld is gedefinieerd in
propertiesen hoeft niet te verschijnen.
Beide punten zijn geschikt om rechtstreeks in regressietests te schrijven. Voor de volledige definitie van objecten en required verwijzen wij u naar JSON Schema-objecten en vereist.
Controleer het contract met vier invoergegevens
from jsonschema import Draft202012Validator
schema = {"type": "object", "required": ["amount"],
"properties": {"amount": {"type": ["number", "null"]}},
"additionalProperties": False}
validator = Draft202012Validator(schema)
valid = lambda value: not list(validator.iter_errors(value))
assert valid({"amount": None})
assert valid({"amount": 0})
assert not valid({})
assert not valid({"amount": "unknown"})
assert not valid({"amount": None, "guessed": True})
jsonschema moet worden geïnstalleerd voordat het wordt uitgevoerd. Deze code voert alleen een structuurcontrole uit in het geheugen, roept niet het extractiemodel aan en kan niet bewijzen dat een bepaald bedrag consistent is met de originele tekst.
Als het bedrag een nauwkeurige decimale weergave vereist, kan in plaats daarvan het decimale tekenreeksprotocol worden gebruikt. Beschouw binaire drijvende-kommaberekeningen niet alleen als een financiële oplossing, alleen maar omdat het voorbeeld number gebruikt.
De interface moet ook de status duidelijk vermelden.
Het display op de interface moet ook onderscheid maken tussen toestanden, anders zullen gebruikers verschillende betekenissen verkeerd interpreteren als hetzelfde resultaat.
| gegevens | De staat die tot uitdrukking moet worden gebracht | mag niet worden weergegeven als |
|---|---|---|
| Geen bedragsleutel | Uitzondering voor outputcontracten | Bedrag is nul |
| bedrag is nul | Er is geen beschikbare waarde verkregen | Extractie succesvol |
| bedrag bedraagt 0 | heeft een duidelijke nulwaarde | Ontbreekt |
| bedrag is een onbekende string | Niet in overeenstemming met dit contract | Automatisch geconverteerd naar nul en geruisloos doorgegeven |
Voer geen ontbrekende redenen in numerieke velden in
Als u onderscheid moet maken tussen "oorspronkelijke tekst niet opgegeven", "afbeelding onleesbaar", "kandidaatconflict", enz., kunt u een extra veld status of reason toevoegen en daarvoor toegestane waarden definiëren.
Schrijf de reden niet in een bedragreeks en laat de stroomafwaartse stroomafwaarts de cijfers eruit halen. Onbekend is niet hetzelfde als mislukt: sommige documenten hebben dit veld niet en het juiste resultaat is om het onbekend te laten.
📊 Kernvergelijking
| staat | Bestaat de sleutel? | waarde | betekenis |
|---|---|---|---|
| Ontbreekt | Nee | geen | De uitvoerstructuur is onvolledig |
| nulwaarde | Ja | null | Er zijn momenteel geen beschikbare waarden |
| nul waarde | Ja | 0 | expliciete waarde nul |
🎯 Welke methode is geschikt voor jou?
Als u wilt controleren of de interface-uitvoer voltooid is
Gebruik required om te controleren of de sleutel bestaat. Een ontbrekende sleutel wordt direct beschouwd als een contractuitzondering.
Als uw document vaak geen bepaald veld heeft
Laat deze veldwaarde null zijn en specificeer de reden met status of reason.
Als het bedrag nauwkeurig moet worden berekend
Overweeg het decimale tekenreeksprotocol en vertrouw niet rechtstreeks op binaire floats.
Als u na extractie een vertaling of verificatie wilt uitvoeren
Controleer de valuta, herkomst en bijbehorende labels samen om er zeker van te zijn dat de sleutelnummers niet per ongeluk zijn gewijzigd.
❓ Veelgestelde vragen (FAQ)
1. Als u alleen verplicht schrijft, betekent dit dan dat null verboden is?
Nee. required controleert alleen of de sleutel bestaat, het uitschakelen van null moet apart worden gedefinieerd in type.
2. Wat is het verschil tussen een veld dat nul is en een veld dat 0 is?
null betekent dat er momenteel geen waarde beschikbaar is, 0 is een ondubbelzinnige waarde. Beide moeten respectievelijk in het contract en de interface vertegenwoordigd zijn.
3. Betekent legale JSON dat het extractieresultaat accuraat is?
Betekent niet. Structurele inspectie kan alleen bevestigen dat het formaat consistent is met het contract, maar kan niet bewijzen dat het bedrag consistent is met de originele tekst.
4. Kan het veld direct als 0 worden weergegeven als het ontbreekt?
Niet aanbevolen. Ontbrekend betekent dat de uitvoerstructuur onvolledig is. Als u 0 invult, zal de stroomafwaartse stroom dit als het werkelijke bedrag behandelen.
📝 Samenvatting
Ontbrekende, nul- en nulwaarden hebben hun eigen betekenis en moeten afzonderlijk worden uitgedrukt via contracten en interfaces. Nadat de structuur is goedgekeurd, moeten de valuta, de bron en het bijbehorende label van het bedrag nog worden gecontroleerd.


