ParseJet

Cara Konversi PDF ke Markdown di Python

Mengonversi PDF ke Markdown kini menjadi langkah praproses standar untuk pipeline RAG dan alur kerja LLM — Markdown mempertahankan heading dan tabel yang dipakai model untuk memahami struktur, dengan jumlah token jauh lebih hemat. Python punya beberapa opsi bagus, masing-masing dengan trade-off nyata. Berikut empat opsi yang paling penting, lengkap dengan kode siap pakai untuk masing-masing.

Kenapa Markdown, dan kenapa ini lebih sulit dari kelihatannya

LLM menangani Markdown dengan sangat baik: heading menandai batas bagian, tabel pipa menjaga data tabular tetap sejajar, dan daftar tetap menjadi daftar. Memberi model teks mentah hasil ekstraksi PDF menghilangkan semua itu — dan memberikan biner PDF-nya bukan pilihan bagi kebanyakan pipeline. Itulah kenapa hampir semua stack RAG yang serius mengonversi dokumen ke Markdown sebelum chunking dan embedding.

Bagian sulitnya: PDF tidak menyimpan struktur — ia menyimpan karakter yang diposisikan pada koordinat x/y. Sebuah konverter harus merekayasa balik baris mana yang merupakan heading (dari ukuran font), kata mana yang membentuk tabel (dari perataan), dan bagaimana urutan bacanya (dari analisis tata letak). Kemampuan tiap library sangat berbeda di sini, dan itulah kenapa pilihannya penting.

Komplikasi kedua: PDF hasil pindai sama sekali tidak berisi teks, hanya gambar halaman. Hanya sebagian opsi di bawah ini yang bisa menanganinya, lewat OCR.

Opsi 1: PyMuPDF4LLM — cepat dan ringan

PyMuPDF4LLM adalah lapisan tipis di atas PyMuPDF (fitz) yang dibuat khusus untuk pipeline LLM: pip install pymupdf4llm, lalu md = pymupdf4llm.to_markdown("doc.pdf") — satu baris, dan sangat cepat: kebanyakan dokumen selesai jauh di bawah satu detik.

Ia mendeteksi heading dari ukuran font, merender tabel sebagai tabel pipa, dan bisa mengeluarkan chunk per halaman beserta metadata untuk langsung dimasukkan ke LlamaIndex atau LangChain. Untuk PDF digital dengan tata letak sederhana — laporan, dokumentasi, makalah tanpa format yang aneh-aneh — ini default yang sangat baik.

Batasannya: tanpa OCR, jadi halaman hasil pindai kembali kosong. Tata letak multikolom yang rumit dan tabel yang kompleks bisa keluar berantakan, karena heuristik di baliknya mengutamakan kecepatan di atas analisis tata letak yang dalam. Catatan lisensi: PyMuPDF berlisensi AGPL — aman untuk alat internal, tapi konsultasikan dengan tim legal Anda sebelum menyertakannya dalam produk komersial.

Opsi 2: Marker — kualitas tertinggi, butuh GPU

Marker memakai pipeline model deep-learning untuk deteksi tata letak, urutan baca, dan struktur tabel, dan menghasilkan Markdown paling akurat di antara semua opsi open-source — ia sanggup menangani makalah akademis multikolom, tabel kompleks, bahkan persamaan matematika.

Harganya adalah infrastruktur: bobot model beberapa gigabyte, GPU agar kecepatannya masuk akal (CPU bisa tapi lambat — sering puluhan detik per dokumen), dan pohon dependensi berat yang butuh usaha nyata untuk di-deploy ke produksi atau lingkungan serverless.

Pilih Marker ketika kualitas output pada dokumen sulit adalah prioritas utama dan Anda punya perangkat kerasnya — mengonversi korpus akademis secara massal di mesin ber-GPU adalah habitat terbaiknya. Untuk layanan ringan atau serverless function, beban operasionalnya biasanya membuatnya tersingkir.

Opsi 3: MarkItDown — konverter segala format dari Microsoft

MarkItDown adalah library open-source "apa pun ke Markdown" dari Microsoft: pip install markitdown, lalu MarkItDown().convert("doc.pdf").text_content. Kekuatannya ada di cakupan — API yang sama mengonversi PDF, DOCX, PPTX, XLSX, HTML, dan lainnya, itulah kenapa ia viral untuk persiapan data LLM.

Khusus untuk PDF, ekstraksinya lebih sederhana dibanding opsi yang terdedikasi: ia mengandalkan ekstraksi teks dasar, sehingga deteksi heading dan akurasi tabelnya tertinggal dari PyMuPDF4LLM dan Marker, dan PDF hasil pindai butuh setup OCR tambahan.

Pilih MarkItDown saat Anda butuh satu dependensi yang mencakup banyak tipe file dengan kualitas menengah — skrip ingesti internal yang harus menerima "apa pun yang diunggah orang" — bukan output PDF terbaik.

Opsi 4: API hosted — tanpa dependensi sama sekali

Opsi keempat adalah tidak menjalankan konversinya secara lokal: POST PDF ke API parsing dan terima Markdown kembali. Dengan ParseJet: resp = httpx.post("https://api.parsejet.com/v1/parse/auto/file", headers={"Authorization": "Bearer KEY"}, files={"file": open("doc.pdf", "rb")}) — field "text" pada respons JSON-nya adalah Markdown-nya.

Jalur ini punya OCR bawaan untuk halaman hasil pindai, tanpa bobot model atau library native yang harus diinstal, dan berjalan identik di serverless function, kontainer, maupun notebook. Ia juga menghindari persoalan AGPL sepenuhnya. Trade-off-nya: satu perjalanan bolak-balik jaringan dan biaya per dokumen setelah tier gratis (300 kredit/bulan gratis; satu PDF berbiaya 3 kredit).

Pilih API ketika Anda ingin pipeline-nya jalan hari ini juga, ketika PDF Anda mencakup hasil pindai, atau ketika Anda deploy ke tempat yang tidak ramah dependensi berat — Lambda, Cloud Run, Vercel.

Jadi, mana yang sebaiknya dipakai?

PDF digital, tata letak sederhana sampai menengah, kecepatan penting: PyMuPDF4LLM. Rasio usaha-ke-kualitas terbaik dalam Python murni.

Dokumen sulit (makalah multikolom, tabel kompleks) dan Anda punya GPU: Marker. Tidak ada opsi open-source yang mengalahkan kualitas outputnya.

Banyak tipe file lewat satu library, kualitas menengah sudah cukup: MarkItDown.

Ada PDF hasil pindai di antaranya, deployment serverless, atau tidak mau pusing mengelola dependensi: API hosted. Satu panggilan HTTP, OCR termasuk, skema output sama untuk setiap dokumen.

Contoh lengkap: folder PDF menjadi file Markdown

Rute mana pun yang Anda pilih, bentuk pipeline-nya sama — iterasi, konversi, tulis. Berikut versinya dengan API (ganti panggilan di dalamnya dengan pymupdf4llm.to_markdown() untuk menjalankannya secara lokal):

import httpx; from pathlib import Path — lalu untuk setiap pdf di Path("pdfs/").glob("*.pdf"): resp = httpx.post("https://api.parsejet.com/v1/parse/auto/file", headers={"Authorization": "Bearer KEY"}, files={"file": pdf.read_bytes()}); Path("md/", pdf.stem + ".md").write_text(resp.json()["text"], encoding="utf-8").

Untuk ingesti RAG, chunk Markdown-nya berdasarkan heading, bukan jumlah karakter tetap — chunk yang mengikuti heading menjaga tiap bagian tetap utuh dan hasil retrieval-nya jauh lebih baik. Kesetiaan struktural itulah alasan langkah konversinya layak dikerjakan dengan cermat.

Coba konversinya tanpa menulis kode

Unggah sebuah PDF dan lihat output Markdown yang dihasilkan API ini — lengkap dengan heading, tabel, dan OCR untuk halaman hasil pindai.

Konversi PDF ke Markdown gratis

Pertanyaan yang sering diajukan

Library Python apa yang terbaik untuk konversi PDF ke Markdown?

Untuk PDF digital, PyMuPDF4LLM menawarkan rasio kecepatan-ke-kualitas terbaik. Untuk tata letak sulit dengan GPU tersedia, Marker menghasilkan kualitas tertinggi. Untuk PDF hasil pindai atau deployment bebas dependensi, API hosted seperti ParseJet menangani OCR dan struktur dalam satu panggilan HTTP.

Bagaimana cara mengonversi PDF hasil pindai ke Markdown di Python?

Halaman hasil pindai tidak berisi teks, jadi Anda butuh OCR. Secara lokal itu berarti merangkai engine OCR sendiri; jalur yang lebih sederhana adalah API dengan OCR bawaan — ParseJet mendeteksi halaman berbasis gambar dan meng-OCR-nya otomatis dalam permintaan yang sama.

Apakah MarkItDown bagus untuk PDF ke Markdown?

Kekuatan MarkItDown ada pada konversi banyak format (PDF, DOCX, PPTX, XLSX) lewat satu library. Khusus PDF, deteksi strukturnya lebih sederhana dibanding PyMuPDF4LLM atau Marker — cukup untuk kebutuhan kualitas menengah, bukan pilihan terbaik untuk ekstraksi heading dan tabel yang akurat.

Kenapa mengonversi PDF ke Markdown untuk RAG, bukan ke teks polos?

Markdown mempertahankan heading, daftar, dan tabel yang hilang di teks polos. Chunking berbasis heading menghasilkan retrieval yang lebih baik, dan LLM memakai strukturnya untuk memahami konteks — dengan biaya token yang kurang lebih sama dengan teks polos.

Bisakah konversi PDF ke Markdown di Python tanpa menginstal apa pun?

Bisa — panggil API parsing lewat HTTP dengan httpx atau requests. POST file-nya ke /v1/parse/auto/file milik ParseJet dan field "text" pada responsnya adalah Markdown-nya. Kunci API gratis mencakup 300 kredit per bulan.

Mulai ekstraksi teks secara gratis

Tidak perlu mendaftar. Parse file pertama Anda dalam hitungan detik.

Lihat Harga