Menangani respons pemrosesan
Respons terhadap permintaan pemrosesan berisi objek Document
yang menyimpan semua yang diketahui tentang dokumen yang diproses, termasuk semua
informasi terstruktur yang dapat diekstrak oleh Document AI.
Halaman ini menjelaskan tata letak objek Document
dengan memberikan contoh dokumen,
lalu memetakan aspek hasil OCR ke elemen tertentu dari JSON objek Document
.
SDK ini juga menyediakan contoh kode library klien dan contoh kode Document AI Toolbox SDK.
Contoh kode ini menggunakan pemrosesan online, tetapi penguraian objek Document
berfungsi
sama untuk pemrosesan batch.
Gunakan penampil JSON atau utilitas pengeditan yang dirancang khusus untuk memperluas atau menciutkan elemen. Meninjau JSON mentah dalam utilitas teks biasa tidak efisien.
Skor teks, tata letak, dan kualitas
Berikut adalah contoh dokumen teks:
Berikut adalah objek dokumen lengkap seperti yang ditampilkan oleh pemroses Enterprise Document OCR:
Output OCR ini juga selalu disertakan dalam output pemroses Document AI, karena OCR dijalankan oleh pemroses. Pemroses ini menggunakan data OCR yang ada, itulah sebabnya Anda dapat memasukkan data JSON tersebut menggunakan opsi dokumen inline ke dalam pemroses Document AI.
image=None, # all our samples pass this var
mime_type="application/json",
inline_document=document_response # pass OCR output to CDE input - undocumented
Berikut adalah beberapa kolom penting:
Teks mentah
Kolom text
berisi teks yang dikenali oleh Document AI.
Teks ini tidak berisi struktur tata letak selain spasi, tab, dan
feed baris. Ini adalah satu-satunya kolom yang menyimpan informasi tekstual dokumen dan berfungsi sebagai sumber tepercaya teks dokumen. Kolom
lain dapat merujuk ke bagian kolom teks berdasarkan posisi (startIndex
dan endIndex
).
{
text: "Sample Document\nHeading 1\nLorem ipsum dolor sit amet, ..."
}
Ukuran halaman dan bahasa
Setiap page
dalam objek dokumen sesuai dengan
halaman fisik dari dokumen contoh. Contoh output JSON berisi satu
halaman karena merupakan satu gambar PNG.
{
"pages:" [
{
"pageNumber": 1,
"dimension": {
"width": 679.0,
"height": 460.0,
"unit": "pixels"
},
}
]
}
- Kolom
pages[].detectedLanguages[]
berisi bahasa yang ditemukan di halaman tertentu, beserta skor keyakinan.
{
"pages": [
{
"detectedLanguages": [
{
"confidence": 0.98009938,
"languageCode": "en"
},
{
"confidence": 0.01990064,
"languageCode": "und"
}
]
}
]
}
Data OCR
OCR Document AI mendeteksi teks dengan berbagai tingkat perincian atau organisasi di halaman, seperti blok teks, paragraf, token, dan simbol (tingkat simbol bersifat opsional, jika dikonfigurasi untuk menghasilkan data tingkat simbol). Ini adalah semua anggota objek halaman.
Setiap elemen memiliki layout
yang sesuai yang
menjelaskan posisi dan teksnya. Elemen visual non-teks
(seperti kotak centang) juga berada di tingkat halaman.
{
"pages": [
{
"paragraphs": [
{
"layout": {
"textAnchor": {
"textSegments": [
{
"endIndex": "16"
}
]
},
"confidence": 0.9939527,
"boundingPoly": {
"vertices": [ ... ],
"normalizedVertices": [ ... ]
},
"orientation": "PAGE_UP"
}
}
]
}
]
}
Teks mentah dirujuk dalam objek textAnchor
yang diindeks ke dalam string teks utama dengan startIndex
dan endIndex
.
Untuk
boundingPoly
, sudut kiri atas halaman adalah asal(0,0)
. Nilai X positif berada di sebelah kanan, dan nilai Y positif berada di bawah.Objek
vertices
menggunakan koordinat yang sama dengan gambar asli, sedangkannormalizedVertices
berada dalam rentang[0,1]
. Ada matriks transformasi yang menunjukkan pengukuran deskewing dan atribut normalisasi gambar lainnya.
- Untuk menggambar
boundingPoly
, gambar segmen garis dari satu vertex ke vertex berikutnya. Kemudian, tutup poligon dengan menggambar segmen garis dari vertex terakhir kembali ke vertex pertama. Elemen orientasi tata letak menunjukkan apakah teks telah diputar relatif terhadap halaman.
Untuk membantu Anda memvisualisasikan struktur dokumen, gambar berikut menggambar poligon
batas untuk page.paragraphs
,
page.lines
, page.tokens
.
Paragraf
Baris
Token
Blok
Pemroses Enterprise Document OCR dapat melakukan penilaian kualitas dokumen berdasarkan keterbacaannya.
- Anda harus menetapkan kolom
processOptions.ocrConfig.enableImageQualityScores
ketrue
untuk mendapatkan data ini dalam respons API.
Penilaian kualitas ini adalah skor kualitas di [0, 1]
, dengan 1
berarti kualitas sempurna.
Skor kualitas ditampilkan di kolom Page.imageQualityScores
.
Semua cacat yang terdeteksi tercantum sebagai quality/defect_*
dan diurutkan dalam
urutan menurun menurut nilai keyakinan.
Berikut adalah PDF yang terlalu gelap dan buram untuk dibaca dengan nyaman:
Berikut adalah informasi kualitas dokumen seperti yang ditampilkan oleh pemroses Enterprise Document OCR:
{
"pages": [
{
"imageQualityScores": {
"qualityScore": 0.7811847,
"detectedDefects": [
{
"type": "quality/defect_document_cutoff",
"confidence": 1.0
},
{
"type": "quality/defect_glare",
"confidence": 0.97849524
},
{
"type": "quality/defect_text_cutoff",
"confidence": 0.5
}
]
}
}
]
}
Contoh kode
Contoh kode berikut menunjukkan cara mengirim permintaan pemrosesan, lalu membaca dan mencetak kolom ke terminal:
Java
Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Java Document AI.
Untuk melakukan autentikasi ke Document AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Node.js
Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Node.js Document AI.
Untuk melakukan autentikasi ke Document AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Python
Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python Document AI.
Untuk melakukan autentikasi ke Document AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Formulir dan tabel
Berikut adalah contoh formulir kami:
Berikut adalah objek dokumen lengkap seperti yang ditampilkan oleh Parser Formulir:
Berikut adalah beberapa kolom penting:
Parser Formulir dapat mendeteksi FormFields
di halaman. Setiap kolom formulir memiliki nama dan nilai. Ini juga disebut
pasangan nilai kunci (KVP). Perhatikan bahwa KVP berbeda dengan entitas (skema) di
ekstraktor lain:
Nama entity dikonfigurasi. Kunci dalam KVP secara harfiah adalah teks kunci pada dokumen.
{
"pages:" [
{
"formFields": [
{
"fieldName": { ... },
"fieldValue": { ... }
}
]
}
]
}
- AI Dokumen juga dapat mendeteksi
Tables
di halaman.
{
"pages:" [
{
"tables": [
{
"layout": { ... },
"headerRows": [
{
"cells": [
{
"layout": { ... },
"rowSpan": 1,
"colSpan": 1
},
{
"layout": { ... },
"rowSpan": 1,
"colSpan": 1
}
]
}
],
"bodyRows": [
{
"cells": [
{
"layout": { ... },
"rowSpan": 1,
"colSpan": 1
},
{
"layout": { ... },
"rowSpan": 1,
"colSpan": 1
}
]
}
]
}
]
}
]
}
Ekstraksi tabel dalam Parser Formulir hanya mengenali tabel sederhana,
yaitu tabel tanpa sel yang mencakup baris atau kolom. Jadi, rowSpan
dan colSpan
selalu 1
.
Mulai dari versi pemroses
pretrained-form-parser-v2.0-2022-11-10
, Form Parser juga dapat mengenali entity generik. Untuk informasi selengkapnya, lihat Parser Formulir.Untuk membantu Anda memvisualisasikan struktur dokumen, gambar berikut menggambar poligon pembatas untuk
page.formFields
danpage.tables
.Kotak centang dalam tabel. Parser Formulir dapat mendigitalkan kotak centang dari gambar dan PDF sebagai KVP. Memberikan contoh digitalisasi kotak centang sebagai pasangan nilai kunci.
Di luar tabel, kotak centang direpresentasikan sebagai elemen visual dalam Parser Formulir. Menandai kotak persegi yang memiliki tanda centang di UI dan unicode ✓ dalam JSON.
"pages:" [
{
"tables": [
{
"layout": { ... },
"headerRows": [
{
"cells": [
{
"layout": { ... },
"rowSpan": 1,
"colSpan": 1
},
{
"layout": { ... },
"rowSpan": 1,
"colSpan": 1
}
]
}
],
"bodyRows": [
{
"cells": [
{
"layout": { ... },
"rowSpan": 1,
"colSpan": 1
},
{
"layout": { ... },
"rowSpan": 1,
"colSpan": 1
}
]
}
]
}
]
}
]
}
Dalam tabel, kotak centang muncul sebagai karakter Unicode seperti ✓ (dicentang) atau ☐ (tidak dicentang).
Kotak centang yang terisi memiliki nilai filled_checkbox:
under pages > x > formFields > x > fieldValue > valueType.
. Kotak centang yang tidak dicentang
memiliki nilai unfilled_checkbox
.
Kolom konten menampilkan nilai konten kotak centang seperti yang ditandai ✓ di
jalur pages>formFields>x>fieldValue>textAnchor>content
.
Untuk membantu Anda memvisualisasikan struktur dokumen, gambar berikut menggambar poligon batas untuk page.formFields
dan page.tables
.
Kolom Formulir
Tabel
Contoh kode
Contoh kode berikut menunjukkan cara mengirim permintaan pemrosesan, lalu membaca dan mencetak kolom ke terminal:
Java
Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Java Document AI.
Untuk melakukan autentikasi ke Document AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Node.js
Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Node.js Document AI.
Untuk melakukan autentikasi ke Document AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Python
Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python Document AI.
Untuk melakukan autentikasi ke Document AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Entity, entity bertingkat, dan nilai yang dinormalisasi
Banyak pemroses khusus mengekstrak data terstruktur yang didasarkan pada
skema yang ditentukan dengan baik. Misalnya, Parser invoice
mendeteksi kolom tertentu seperti invoice_date
dan supplier_name
. Berikut adalah
contoh invoice:
Berikut adalah objek dokumen lengkap seperti yang ditampilkan oleh Parser invoice:
Berikut adalah beberapa bagian penting dari objek dokumen:
Kolom yang terdeteksi:
Entities
berisi kolom yang dapat dideteksi oleh prosesor, misalnya,invoice_date
:{ "entities": [ { "textAnchor": { "textSegments": [ { "startIndex": "14", "endIndex": "24" } ], "content": "2020/01/01" }, "type": "invoice_date", "confidence": 0.9938466, "pageAnchor": { ... }, "id": "2", "normalizedValue": { "text": "2020-01-01", "dateValue": { "year": 2020, "month": 1, "day": 1 } } } ] }
Untuk kolom tertentu, pemroses juga menonmalisasi nilai. Dalam contoh ini, tanggal telah dinormalisasi dari
2020/01/01
menjadi2020-01-01
.Normalisasi: Untuk banyak kolom tertentu yang didukung, pemroses juga mennormalisasi nilai dan juga menampilkan
entity
. KolomnormalizedValue
ditambahkan ke kolom ekstrak mentah yang diperoleh melaluitextAnchor
dari setiap entitas. Jadi, fungsi ini akan menormalisasi teks literal, yang sering kali membagi nilai teks menjadi subkolom. Misalnya, tanggal seperti 1 September 2024 akan ditampilkan sebagai:
normalizedValue": {
"text": "2020-09-01",
"dateValue": {
"year": 2024,
"month": 9,
"day": 1
}
Dalam contoh ini, tanggal telah dinormalisasi dari 01/01/2020 menjadi 01-01-2020, format standar untuk mengurangi pascapemrosesan dan memungkinkan konversi ke format yang dipilih.
Alamat juga sering dinormalisasi, yang membagi elemen alamat
menjadi setiap kolom. Angka dinormalisasi dengan memiliki bilangan bulat atau angka floating point sebagai normalizedValue
.
- Penambahan nilai: Pemroses dan kolom tertentu juga mendukung penambahan nilai.
Misalnya,
supplier_name
asli dalam dokumenGoogle Singapore
telah dinormalisasi terhadap Enterprise Knowledge Graph menjadiGoogle Asia Pacific, Singapore
. Perhatikan juga bahwa karena Enterprise Knowledge Graph berisi informasi tentang Google, Document AI menyimpulkansupplier_address
meskipun tidak ada dalam dokumen contoh.
{
"entities": [
{
"textAnchor": {
"textSegments": [ ... ],
"content": "Google Singapore"
},
"type": "supplier_name",
"confidence": 0.39170802,
"pageAnchor": { ... },
"id": "12",
"normalizedValue": {
"text": "Google Asia Pacific, Singapore"
}
},
{
"type": "supplier_address",
"id": "17",
"normalizedValue": {
"text": "70 Pasir Panjang Rd #03-71 Mapletree Business City II Singapore 117371",
"addressValue": {
"regionCode": "SG",
"languageCode": "en-US",
"postalCode": "117371",
"addressLines": [
"70 Pasir Panjang Rd",
"#03-71 Mapletree Business City II"
]
}
}
}
]
}
Bidang bertingkat: Skema bertingkat (kolom) dapat dibuat dengan mendeklarasikan entity sebagai induk terlebih dahulu, lalu membuat entity turunan di bawah induk. Respons pemrosesan untuk induk menyertakan kolom turunan dalam elemen
properties
kolom induk. Pada contoh berikut,line_item
adalah kolom induk yang memiliki dua kolom turunan:line_item/description
danline_item/quantity
.{ "entities": [ { "textAnchor": { ... }, "type": "line_item", "confidence": 1.0, "pageAnchor": { ... }, "id": "19", "properties": [ { "textAnchor": { "textSegments": [ ... ], "content": "Tool A" }, "type": "line_item/description", "confidence": 0.3461604, "pageAnchor": { ... }, "id": "20" }, { "textAnchor": { "textSegments": [ ... ], "content": "500" }, "type": "line_item/quantity", "confidence": 0.8077843, "pageAnchor": { ... }, "id": "21", "normalizedValue": { "text": "500" } } ] } ] }
Parser berikut mengikutinya:
- Ekstrak (Pengekstrak Kustom)
- Lama
- Parser laporan mutasi bank
- Parser pengeluaran
- Parser Invoice
- Parser PaySlip
- Parser W2
Contoh kode
Contoh kode berikut menunjukkan cara mengirim permintaan pemrosesan, lalu membaca dan mencetak kolom dari pemroses khusus ke terminal:
Java
Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Java Document AI.
Untuk melakukan autentikasi ke Document AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Node.js
Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Node.js Document AI.
Untuk melakukan autentikasi ke Document AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Python
Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python Document AI.
Untuk melakukan autentikasi ke Document AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Pengekstrak Dokumen Kustom
Pemroses Ekstraktor Dokumen Kustom dapat mengekstrak entity kustom dari dokumen yang tidak memiliki pemroses pretrained yang tersedia. Hal ini dapat dilakukan dengan melatih model kustom atau menggunakan Model Dasar AI Generatif untuk mengekstrak entitas bernama tanpa pelatihan apa pun. Untuk mengetahui informasi selengkapnya, lihat Membuat Ekstraktor Dokumen Kustom di konsol.
- Jika Anda melatih model kustom, pemroses dapat digunakan dengan cara yang sama persis seperti pemroses ekstraksi entity terlatih.
- Jika menggunakan model dasar, Anda dapat membuat versi prosesor untuk mengekstrak entitas tertentu untuk setiap permintaan, atau Anda dapat mengonfigurasinya berdasarkan per permintaan.
Untuk mengetahui informasi tentang struktur output, lihat Entity, entity bertingkat, dan nilai yang dinormalisasi.
Contoh kode
Jika Anda menggunakan model kustom atau membuat versi pemroses menggunakan model dasar, gunakan contoh kode ekstraksi entity.
Contoh kode berikut menunjukkan cara mengonfigurasi entity tertentu untuk Custom Document Extractor model dasar per permintaan dan mencetak entity yang diekstrak:
Python
Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python Document AI.
Untuk melakukan autentikasi ke Document AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Perangkuman
Pemroses ringkasan menggunakan Model Dasar AI Generatif untuk meringkas teks yang diekstrak dari dokumen. Durasi dan format respons dapat disesuaikan dengan cara berikut:
- Panjang
BRIEF
: Ringkasan singkat dari satu atau dua kalimatMODERATE
: Ringkasan panjang paragrafCOMPREHENSIVE
: Opsi terpanjang yang tersedia
- Format
Anda dapat membuat versi prosesor untuk format dan durasi tertentu, atau Anda dapat mengonfigurasinya berdasarkan per permintaan.
Teks ringkasan akan muncul di Document.entities.normalizedValue.text
. Anda dapat menemukan contoh file JSON output lengkap di Contoh output pemroses.
Untuk informasi selengkapnya, lihat Mem-build peringkas dokumen di konsol.
Contoh kode
Contoh kode berikut menunjukkan cara mengonfigurasi panjang dan format tertentu dalam permintaan pemrosesan dan mencetak teks ringkasan:
Python
Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python Document AI.
Untuk melakukan autentikasi ke Document AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Pemisahan dan klasifikasi
Berikut adalah PDF gabungan 10 halaman yang berisi berbagai jenis dokumen dan formulir:
Berikut adalah objek dokumen lengkap seperti yang ditampilkan oleh pemisah dan pengklasifikasi dokumen pinjaman:
Setiap dokumen yang terdeteksi oleh pemisah diwakili oleh
entity
. Contoh:
{
"entities": [
{
"textAnchor": {
"textSegments": [
{
"startIndex": "13936",
"endIndex": "21108"
}
]
},
"type": "1040se_2020",
"confidence": 0.76257163,
"pageAnchor": {
"pageRefs": [
{
"page": "6"
},
{
"page": "7"
}
]
}
}
]
}
Entity.pageAnchor
menunjukkan bahwa dokumen ini memiliki 2 halaman. Perhatikan bahwapageRefs[].page
berbasis nol dan merupakan indeks ke kolomdocument.pages[]
.Entity.type
menentukan bahwa dokumen ini adalah formulir 1040 Schedule SE. Untuk mengetahui daftar lengkap jenis dokumen yang dapat diidentifikasi, lihat Jenis dokumen yang diidentifikasi di dokumentasi pemroses.
Untuk informasi selengkapnya, lihat Perilaku pemisah dokumen.
Contoh kode
Pemisah mengidentifikasi batas halaman, tetapi tidak benar-benar memisahkan dokumen input untuk Anda. Anda dapat menggunakan Toolbox Document AI untuk memisahkan file PDF secara fisik menggunakan batas halaman. Contoh kode berikut mencetak rentang halaman tanpa memisahkan PDF:
Java
Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Java Document AI.
Untuk melakukan autentikasi ke Document AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Node.js
Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Node.js Document AI.
Untuk melakukan autentikasi ke Document AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Python
Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python Document AI.
Untuk melakukan autentikasi ke Document AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Document
yang diproses.
Python
Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python Document AI.
Untuk melakukan autentikasi ke Document AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Toolbox Document AI
Document AI Toolbox adalah SDK untuk Python yang menyediakan fungsi utilitas
untuk mengelola, memanipulasi, dan mengekstrak informasi dari respons dokumen.
Fungsi ini membuat objek dokumen "digabungkan" dari respons dokumen yang diproses dari file JSON di Cloud Storage, file JSON lokal, atau output langsung dari metode process_document()
.
Fungsi ini dapat melakukan tindakan berikut:
- Menggabungkan file JSON
Document
yang terfragmentasi dari Pemrosesan Batch menjadi satu dokumen "digabungkan". - Mengekspor shard sebagai
Document
terpadu. -
Dapatkan output
Document
dari: - Mengakses teks dari
Pages
,Lines
,Paragraphs
,FormFields
, danTables
tanpa menangani informasiLayout
. - Menelusuri
Pages
yang berisi string target atau cocok dengan ekspresi reguler. - Telusuri
FormFields
berdasarkan namanya. - Telusuri
Entities
menurut jenis. - Konversikan
Tables
ke Dataframe atau CSV Pandas. - Sisipkan
Entities
danFormFields
ke dalam tabel BigQuery. - Memisahkan file PDF berdasarkan output dari pemroses Splitter/Classifier.
- Ekstrak gambar
Entities
dariDocument
kotak pembatas. -
Mengonversi
Documents
ke dan dari format yang umum digunakan:- Cloud Vision API
AnnotateFileResponse
- hOCR
- Format pemrosesan dokumen pihak ketiga
- Cloud Vision API
- Membuat batch dokumen untuk diproses dari folder Cloud Storage.
Contoh Kode
Contoh kode berikut menunjukkan cara menggunakan Toolbox Document AI.