Bidang yang hilang dan bidang nol adalah dua kegagalan yang berbeda.

"Field not found" dan "Field is a null value" mungkin keduanya tampak kosong pada antarmuka, namun keduanya tidak akan tertukar setelah memasuki program. Kemudian isi bagian yang kosong dengan angka nol, dan masalahnya akan lebih halus: hilir menerima nilai hukum, tetapi menganggapnya berasal dari teks aslinya.

Jika bidang tersebut tidak ditemukan atau bidang tersebut memiliki nilai nol, ini mungkin hanya menampilkan bagian kosong pada antarmuka, tetapi maknanya sangat berbeda setelah memasuki program. Jika bagian yang kosong kemudian diisi dengan angka nol, maka hilirnya akan mendapat nilai sah, namun salah mengira berasal dari teks aslinya sehingga membuat soal semakin sulit ditemukan.

Artikel ini ditujukan untuk pengembang dan pekerja dokumen yang perlu menyerahkan hasil ekstraksi ke program untuk diproses. Ini menjelaskan cara menggunakan Skema JSON untuk membedakan tiga status dan menggunakan beberapa sampel masukan untuk melakukan pemeriksaan regresi. Setelah membaca ini, Anda dapat menetapkan batasan nilai yang hilang, nol, dan nol untuk protokol data Anda sendiri.

Sampel dalam artikel ini adalah data sintetis, dan kodenya telah diperiksa dengan contoh di lingkungan yang terisolasi, namun ini tidak mewakili jaminan semua file nyata atau efek produk. Sebelum memproses dokumen penting, harap simpan dokumen asli dan tinjau sesuai dengan batasan dan item penerimaan dalam teks.

Satu kalimat kesimpulan

Bidangnya hilang, nilainya null dan nilainya 0. Seharusnya ada tiga negara bagian yang berbeda. Kontrak harus menggunakan keberadaan kunci dan tipe nilai untuk memisahkannya. Itu tidak bisa mengandalkan antarmuka atau tebakan hilir.

situasi AndaPraktik yang direkomendasikanalasan
Perlu memastikan apakah struktur keluaran sudah lengkapPeriksa apakah kuncinya ada dengan requiredKunci yang hilang menunjukkan bahwa struktur keluaran tidak lengkap dan tidak sama dengan angka nol.
Tidak ada jumlah yang tersedia di artikel asliTetapkan nilai ke nullnull artinya tidak ada nilai tersedia yang diperoleh dan tidak boleh diisi dengan 0
Teks aslinya secara eksplisit memberikan nolGunakan nilai 0Nol adalah nilai yang tidak ambigu, tidak seperti nilai yang hilang dan nol
Perlu dijelaskan alasan tidak mengekstraksiTambahkan bidang status atau reason tambahan dan tentukan nilai yang diizinkanHindari mengeja alasannya ke dalam string jumlah untuk mengurangi pembongkaran hilir

Pertama pisahkan ketiga negara bagian

Dalam kontrak komposisi artikel ini, amount harus ada, nilai numerik atau null diperbolehkan. Arti dari ketiga negara tersebut adalah sebagai berikut:

  • Tidak ada kunci amount: Struktur keluaran tidak lengkap dan merupakan pengecualian kontrak.
  • amount untuk null: Kuncinya ada, tetapi jumlahnya saat ini tidak tersedia.
  • amount adalah 0: Ada nilai nol yang tidak ambigu.

Protokol lain dapat digunakan untuk bisnis nyata, tetapi protokol tersebut harus ditulis dengan jelas dan tidak dapat ditebak oleh setiap penelepon.

required Skema JSON bertanggung jawab untuk memeriksa apakah kuncinya ada, dan type bertanggung jawab untuk memeriksa jenis nilainya. Dua kesalahpahaman umum memerlukan perhatian khusus:

  • Menulis required saja tidak otomatis menonaktifkan null.
  • Hanya bidang yang ditentukan di properties, dan tidak wajib muncul.

Kedua poin ini cocok untuk ditulis langsung ke dalam uji regresi. Untuk definisi lengkap tentang objek dan required, silakan merujuk ke Objek Skema JSON dan diperlukan.

Verifikasi kontrak dengan empat masukan

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 perlu diinstal sebelum dijalankan. Kode ini hanya melakukan pemeriksaan struktur di memori, tidak memanggil model ekstraksi, dan tidak dapat membuktikan bahwa jumlah tertentu konsisten dengan teks aslinya.

Jika jumlahnya memerlukan representasi desimal yang tepat, protokol string desimal dapat digunakan. Jangan hanya menganggap perhitungan floating point biner sebagai solusi keuangan hanya karena contohnya menggunakan number.

Antarmuka juga harus menyatakan status dengan jelas.

Tampilan pada antarmuka juga perlu membedakan status, jika tidak, pengguna akan salah menafsirkan arti yang berbeda sebagai hasil yang sama.

dataKeadaan yang harus diungkapkantidak boleh ditampilkan sebagai
Tidak ada kunci jumlahPengecualian kontrak keluaranJumlahnya nol
jumlahnya nolTidak ada nilai tersedia yang diperolehEkstraksi berhasil
jumlahnya adalah 0mempunyai nilai nol yang jelasHilang
jumlah adalah string yang tidak diketahuiTidak sesuai dengan kontrak iniSecara otomatis dikonversi ke null dan diteruskan secara diam-diam

Jangan masukkan alasan yang hilang ke dalam kolom numerik

Jika Anda perlu membedakan antara "teks asli tidak disediakan", "gambar tidak dapat dibaca", "konflik kandidat", dll., Anda dapat menambahkan bidang status atau reason tambahan dan menentukan nilai yang diizinkan untuk bidang tersebut.

Jangan menuliskan alasannya ke dalam string jumlah dan kemudian meminta pihak hilir mengeluarkan angka-angka tersebut. Tidak diketahui tidak sama dengan gagal: beberapa dokumen tidak memiliki bidang ini, dan hasil yang benar adalah membiarkannya tidak diketahui.

📊 Perbandingan inti

negaraApakah kuncinya ada?nilaiarti
HilangTIDAKtidak adaStruktur keluaran tidak lengkap
nilai nolYanullSaat ini tidak ada nilai yang tersedia
nilai nolYa0nilai eksplisit nol

🎯 Metode mana yang cocok untuk Anda?

Jika Anda perlu memeriksa apakah keluaran antarmuka sudah selesai

Gunakan required untuk memeriksa apakah kuncinya ada. Kunci yang hilang secara langsung dianggap sebagai pengecualian kontrak.

Jika dokumen Anda sering tidak memiliki field tertentu

Izinkan nilai bidang ini menjadi null dan tentukan alasannya sebagai status atau reason.

Jika jumlahnya perlu dihitung secara akurat

Pertimbangkan protokol string desimal dan jangan bergantung langsung pada float biner.

Jika Anda ingin melakukan terjemahan atau verifikasi setelah ekstraksi

Periksa mata uang, asal dan label terkait untuk memastikan bahwa nomor kunci tidak diubah secara tidak sengaja.

❓ Pertanyaan yang Sering Diajukan (FAQ)

1. Jika hanya menulis wajib, apakah berarti null dilarang?

TIDAK. required hanya memeriksa apakah kuncinya ada, menonaktifkan null perlu ditentukan secara terpisah di type.

2. Apa perbedaan antara bidang yang bernilai nol dan bidang yang bernilai 0?

null berarti saat ini tidak ada nilai yang tersedia, 0 adalah nilai yang tidak ambigu. Keduanya harus terwakili dalam kontrak dan antarmuka masing-masing.

3. Apakah JSON legal berarti hasil ekstraksinya akurat?

Tidak berarti. Inspeksi struktural hanya dapat memastikan bahwa formatnya sesuai dengan kontrak, tetapi tidak dapat membuktikan bahwa jumlahnya sesuai dengan teks aslinya.

4. Bisakah field langsung ditampilkan sebagai 0 jika tidak ada?

Tidak direkomendasikan. Hilang berarti struktur keluaran tidak lengkap. Mengisi 0 akan menyebabkan hilir memperlakukannya sebagai jumlah sebenarnya.

📝 Ringkasan

Nilai yang hilang, nol, dan nol memiliki arti tersendiri dan harus dinyatakan secara terpisah melalui kontrak dan antarmuka. Setelah struktur disetujui, mata uang, sumber dan label jumlah yang sesuai masih perlu diperiksa.

Coba sekarang: Unggah dokumen untuk memulai penerjemahan, dengan tetap mempertahankan tata letak aslinya

Diperbarui 2026-11-13