Mengubah dokumen menjadi teks#
PDF, gambar, dan dokumen lain bisa diubah menjadi Markdown atau teks, supaya bisa dipotong menjadi chunk dan disimpan ke vector database. Ada dua jalur: DoclingVLMConverter, yang mengirim halaman ke Vision Language Model (VLM) pilihanmu, dan fungsi OCR berbasis Google Gemini.
Sebelum mulai: kamu butuh Zul yang sudah ter-install (Instalasi Zul). Untuk jalur Docling, kamu butuh endpoint chat completions yang kompatibel dengan OpenAI dan melayani sebuah model VLM. Untuk jalur Gemini, kamu butuh API key Google. Jika PDF-mu berisi teks yang bisa diseleksi, kamu tidak butuh OCR: pakai PDFProcessor di Memakai helper kecil.
Mengonversi dokumen dengan Docling#
-
Install Zul dengan extra
ocr. Extra ini meng-install Docling, yang ikut membawa PyTorch, jadi unduhannya besar: -
Buat converter dengan nama model, alamat endpoint, dan format keluaran model:
from zul.utilities.OCR.docling_OCR import DoclingVLMConverter converter = DoclingVLMConverter( model="NAMA_MODEL", hostname_and_port="https://HOST/v1/chat/completions", api_key="API_KEY", prompt="Convert this page to markdown.", response_format="markdown", )Ganti
NAMA_MODELdengan nama model VLM di endpoint, misalnyaQwen3-VL-8B-Instruct. GantiHOSTdengan alamat server model, danAPI_KEYdengan key-nya.hostname_and_portadalah URL lengkap endpoint, termasuk path-nya. -
Konversi dokumen ke bentuk yang kamu butuhkan:
markdown = converter.convert_to_markdown("dokumen.pdf") text = converter.convert_to_text("dokumen.pdf") data = converter.convert_to_dict("dokumen.pdf")Converter menerima PDF, gambar, DOCX, PPTX, HTML, AsciiDoc, CSV, dan Markdown. Halaman PDF dan gambar dikirim ke VLM.
-
Saat memakai model lain, cocokkan
response_formatdengan format yang ditulis model itu. Pakaimarkdownuntuk VLM umum yang diminta menulis Markdown, dandoctags(nilai bawaan) untuk model yang menulis DocTags. Nilai di luar daftar yang didukung melemparValueError. Daftarnya ada di Referensi OCR.
Menyertakan deskripsi gambar#
Secara bawaan, gambar di dalam dokumen tidak dijelaskan.
-
Buat converter dengan
enable_picture_description=Truedan prompt untuk gambar: -
Konversi dokumen seperti biasa:
Deskripsi gambar memanggil model lagi untuk gambar di dokumen, jadi konversi berjalan lebih lama.
Mengambil tabel sebagai DataFrame#
-
Panggil
convert, yang mengembalikan objek hasil dari Docling, bukan teks: -
Ubah setiap tabel di dokumen menjadi DataFrame, lalu simpan sebagai CSV:
for index, table in enumerate(result.document.tables, start=1): dataframe = table.export_to_dataframe(doc=result.document) dataframe.to_csv(f"tabel_{index}.csv", index=False)Objek
result.documentjuga menyediakanexport_to_markdown(),export_to_text(), danexport_to_dict().
Memakai converter bawaan#
create_default membuat converter berformat markdown tanpa menulis nama model dan endpoint di kode. Model dan endpoint bawaannya menunjuk ke server internal, jadi arahkan ke server-mu lewat environment.
-
Set nama model dan URL endpoint di environment:
Ganti
NAMA_MODELdanHOSTseperti pada bagian sebelumnya. Di PowerShell, pakai$env:DOCLING_VLM_MODEL = "NAMA_MODEL". -
Buat converter dengan API key-mu:
Membaca PDF dengan Gemini#
Jalur ini mengunggah PDF ke Gemini, meminta model memprosesnya sesuai prompt, lalu menghapus file dari server Gemini.
-
Install Zul dengan extra
gemini: -
Simpan API key Google di environment:
Ganti
API_KEYdengan key-mu. -
Buat logger dan client, lalu proses file:
import os from zul.utilities.OCR.gemini_ocr import ( create_gemini_client, process_pdf_with_gemini, setup_logger, ) logger = setup_logger() client = create_gemini_client(api_key=os.environ["GOOGLE_API_KEY"], logger=logger) markdown = process_pdf_with_gemini( client=client, pdf_path="dokumen.pdf", prompt="Extract the text content from this PDF and return it in markdown format.", logger=logger, model_name="gemini-2.5-pro", ) -
Periksa nilai kembaliannya. Kedua fungsi tidak melempar exception saat gagal. Mereka mengembalikan
Nonedan menulis penyebabnya ke logger: -
Jika dokumenmu berisi gambar dan flowchart, ganti prompt dengan
OCR_VLM_FLOW_DESCRIPTION_PROMPT. Prompt ini meminta model menulis Markdown, mendeskripsikan setiap gambar dalam Bahasa Indonesia, menjelaskan flowchart langkah demi langkah, dan menulis rumus dalam LaTeX:
Memeriksa hasilnya#
Untuk memastikan konversi menghasilkan teks, cetak tipe dan sebagian isinya:
Jika berhasil, baris pertama mencetak tipe str dan True:
Baris kedua mencetak 200 karakter pertama dokumenmu. Untuk menyimpan hasilnya ke file, pakai save_text_to_md di Memakai helper kecil.
Halaman terkait#
- Referensi OCR untuk semua parameter
DoclingVLMConverter, pilihanresponse_format, dan fungsi Gemini. - Memakai helper kecil untuk
PDFProcessor, yang membaca PDF berteks tanpa memanggil model. - Menyimpan dan mencari vektor di Milvus untuk menyimpan hasil konversi sebagai vektor.