Python-da PDF-ni Markdown-ga qanday o‘girish mumkin
PDF-larni Markdown-ga o‘girish RAG jarayonlari va LLM ish oqimlari uchun standart tayyorlov bosqichiga aylandi — Markdown modellar tuzilmani tushunishda foydalanadigan sarlavha va jadvallarni ancha kam token evaziga saqlab qoladi. Python-da bir nechta yaxshi variant bor, har birining real afzallik va kamchiliklari bilan. Quyida ahamiyatga ega to‘rttasi — har biri uchun ishlaydigan kod bilan.
Nega Markdown va nega bu ko‘ringanidan qiyinroq
LLM-lar Markdown-ni juda yaxshi tushunadi: sarlavhalar bo‘lim chegaralarini belgilaydi, pipe jadvallar jadval ma’lumotlarini tekislangan holda saqlaydi, ro‘yxatlar ro‘yxatligicha qoladi. Modelga PDF-dan olingan xom matnni berish bularning barchasini yo‘qotadi — PDF binariyasini berish esa ko‘pchilik jarayonlar uchun umuman variant emas. Shu sababli deyarli har bir jiddiy RAG stack hujjatlarni chunking va embedding-dan oldin Markdown-ga o‘giradi.
Qiyin tomoni shundaki, PDF-larda tuzilma yo‘q — ularda x/y koordinatalarga joylashtirilgan belgilar bor. Konvertor qaysi qatorlar sarlavha ekanini (shrift o‘lchamidan), qaysi so‘zlar jadval hosil qilishini (tekislashdan) va o‘qish tartibi qanday ekanini (maket tahlilidan) teskari muhandislik qilishi kerak. Kutubxonalar buni qay darajada uddalashida juda katta farq bor — tanlov shu uchun muhim.
Ikkinchi murakkablik: skanerlangan PDF-larda umuman matn yo‘q, faqat sahifa rasmlari bor. Quyidagi variantlardan faqat ba’zilari ularni OCR orqali uddalaydi.
1-variant: PyMuPDF4LLM — tez va yengil
PyMuPDF4LLM — PyMuPDF (fitz) ustidagi, LLM jarayonlari uchun maxsus qurilgan yupqa qatlam: pip install pymupdf4llm, so‘ng md = pymupdf4llm.to_markdown("doc.pdf") — bitta qator, va u juda tez: ko‘pchilik hujjatlarni bir soniyadan ancha kam vaqtda qayta ishlaydi.
U sarlavhalarni shrift o‘lchamlaridan aniqlaydi, jadvallarni pipe jadval sifatida chiqaradi va LlamaIndex yoki LangChain-ga to‘g‘ridan-to‘g‘ri yuklash uchun metama’lumotli sahifa bo‘laklarini bera oladi. Oddiy maketli raqamli PDF-lar — hisobotlar, hujjatlar, g‘ayrioddiy formatlashsiz maqolalar — uchun bu a’lo darajadagi standart tanlov.
Cheklovlar: OCR yo‘q, shuning uchun skanerlangan sahifalar bo‘sh qaytadi. Murakkab ko‘p ustunli maketlar va chigal jadvallar aralashib chiqishi mumkin, chunki asosidagi evristikalar chuqur maket tahlilidan ko‘ra tezlikni afzal ko‘radi. Litsenziya haqida: PyMuPDF — AGPL; ichki vositalar uchun muammosiz, ammo uni tijorat mahsuloti ichida yetkazishdan oldin yuridik jamoangiz bilan maslahatlashing.
2-variant: Marker — eng yuqori sifat, GPU talab qiladi
Marker maket aniqlash, o‘qish tartibi va jadval tuzilmasi uchun chuqur o‘rganish modellari zanjiridan foydalanadi va barcha ochiq kodli variantlar ichida eng ishonchli Markdown-ni beradi — u ko‘p ustunli ilmiy maqolalarni, murakkab jadvallarni va hatto tenglamalarni ham uddalaydi.
Buning narxi — infratuzilma: bir necha gigabaytlik model og‘irliklari, maqbul tezlik uchun GPU (CPU ham ishlaydi, lekin sekin — ko‘pincha har hujjatga o‘nlab soniyalar) va production yoki serverless muhitlarga joylashtirish jiddiy mehnat talab qiladigan og‘ir bog‘liqliklar daraxti.
Marker-ni qiyin hujjatlarda natija sifati eng muhim bo‘lsa va kerakli uskunangiz bo‘lsa tanlang — GPU serverida ilmiy korpusni ommaviy o‘girish uning eng kuchli tomoni. Yengil servis yoki serverless funksiya uchun esa operatsion og‘irlik odatda uni istisno qiladi.
3-variant: MarkItDown — Microsoft-ning universal konvertori
MarkItDown — Microsoft-ning hamma narsani Markdown-ga o‘giruvchi ochiq kodli kutubxonasi: pip install markitdown, so‘ng MarkItDown().convert("doc.pdf").text_content. Uning kuchi qamrovda — bitta API PDF, DOCX, PPTX, XLSX, HTML va boshqalarni o‘giradi; LLM ma’lumotlarini tayyorlashda aynan shu sababli mashhur bo‘lib ketdi.
Aynan PDF-lar uchun uning ajratishi maxsus variantlardan soddaroq: u oddiy matn ajratishga tayanadi, shuning uchun sarlavha aniqlash va jadval sifati PyMuPDF4LLM va Marker-dan orqada qoladi, skanerlangan PDF-lar esa qo‘shimcha OCR sozlamalarini talab qiladi.
MarkItDown-ni ko‘plab fayl turlarini o‘rtacha sifatda qamrab oluvchi bitta bog‘liqlik kerak bo‘lganda tanlang — "odamlar nima yuklasa, shuni" qabul qilishi shart bo‘lgan ichki yuklash skripti uchun — eng yaxshi PDF natijasi uchun emas.
4-variant: hosted API — umuman bog‘liqliklarsiz
To‘rtinchi variant — konvertatsiyani lokal bajarmaslik: PDF-ni parsing API-ga POST qiling va Markdown-ni qaytarib oling. ParseJet bilan: resp = httpx.post("https://api.parsejet.com/v1/parse/auto/file", headers={"Authorization": "Bearer KEY"}, files={"file": open("doc.pdf", "rb")}) — JSON javobining "text" maydoni Markdown bo‘ladi.
Bu yo‘lda skanerlangan sahifalar uchun OCR ichiga qurilgan, o‘rnatiladigan model og‘irliklari yoki native kutubxonalar yo‘q va u serverless funksiyada, konteynerda yoki notebook-da bir xil ishlaydi. AGPL masalasini ham butunlay chetlab o‘tadi. Evaziga — tarmoq bo‘ylab bitta qatnov va bepul tarifdan keyin har hujjat uchun narx (oyiga 300 kredit bepul; bitta PDF 3 kredit turadi).
API-ni jarayon bugunoq ishlashini istasangiz, PDF-laringiz orasida skanlar bo‘lsa yoki og‘ir bog‘liqliklar zarar keltiradigan joyga — Lambda, Cloud Run, Vercel — joylashtirayotgan bo‘lsangiz tanlang.
Qaysi birini ishlatish kerak?
Raqamli PDF-lar, oddiy-o‘rtacha maketlar, tezlik muhim: PyMuPDF4LLM. Sof Python-da bu mehnat-sifat nisbati bo‘yicha eng yaxshi tanlov.
Qiyin hujjatlar (ko‘p ustunli maqolalar, murakkab jadvallar) va GPU bor: Marker. Natija sifati bo‘yicha uni hech bir ochiq kodli vosita yenga olmaydi.
Bitta kutubxona orqali ko‘plab turli fayl turlari, o‘rtacha sifat yetarli: MarkItDown.
Aralashmada skanerlangan PDF-lar, serverless joylashtirish yoki bog‘liqliklarni boshqarishga umuman xohish yo‘q: hosted API. Bitta HTTP chaqiruv, OCR ichida, har hujjat uchun bir xil natija sxemasi.
To‘liq misol: PDF papkasidan Markdown fayllarga
Qaysi yo‘lni tanlamang, jarayon shakli bir xil — aylanib chiqish, o‘girish, yozish. Mana u API bilan (lokal ishga tushirish uchun ichki chaqiruvni pymupdf4llm.to_markdown() ga almashtiring):
import httpx; from pathlib import Path — so‘ng Path("pdfs/").glob("*.pdf") ichidagi har bir pdf uchun: 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").
RAG-ga yuklashda Markdown-ni belgilangan belgi soni bo‘yicha emas, sarlavhalar bo‘yicha bo‘laklarga ajrating — sarlavhani hisobga oluvchi bo‘laklar bo‘limlarni butun saqlaydi va sezilarli darajada yaxshiroq topiladi. Konvertatsiya bosqichini sinchiklab bajarishga arziganining sababi ham aynan shu tuzilmaviy aniqlik.
Konvertatsiyani kod yozmasdan sinab ko‘ring
PDF yuklang va ushbu API beradigan Markdown natijasini ko‘ring — sarlavhalar, jadvallar va skanerlangan sahifalar uchun OCR bilan.
PDF-ni Markdown-ga bepul o‘giringTez-tez so'raladigan savollar
PDF-ni Markdown-ga o‘girish uchun eng yaxshi Python kutubxonasi qaysi?
Raqamli PDF-lar uchun PyMuPDF4LLM tezlik-sifat nisbati bo‘yicha eng yaxshisi. GPU mavjud bo‘lgan qiyin maketlar uchun Marker eng yuqori sifatni beradi. Skanerlangan PDF-lar yoki bog‘liqliklarsiz joylashtirish uchun ParseJet kabi hosted API OCR va tuzilmani bitta HTTP chaqiruvda hal qiladi.
Python-da skanerlangan PDF-ni Markdown-ga qanday o‘giraman?
Skanerlangan sahifalarda matn yo‘q, shuning uchun OCR kerak. Lokal buni qilish OCR dvigatelini o‘zingiz ulashni anglatadi; soddaroq yo‘l — OCR ichiga qurilgan API: ParseJet rasmga asoslangan sahifalarni aniqlab, o‘sha so‘rovning o‘zida avtomatik OCR qiladi.
MarkItDown PDF-ni Markdown-ga o‘girish uchun yaxshimi?
MarkItDown-ning kuchi — ko‘plab formatlarni (PDF, DOCX, PPTX, XLSX) bitta kutubxona orqali o‘girish. Aynan PDF-lar uchun uning tuzilma aniqlashi PyMuPDF4LLM yoki Marker-dan soddaroq — o‘rtacha sifat talablari uchun yetarli, ammo sarlavha va jadvallarni aniq ajratish uchun eng yaxshi tanlov emas.
RAG uchun PDF-larni nega oddiy matn emas, Markdown-ga o‘girish kerak?
Markdown oddiy matn tekislab yuboradigan sarlavhalar, ro‘yxatlar va jadvallarni saqlaydi. Sarlavhani hisobga oluvchi chunking yaxshiroq topadi, LLM-lar esa kontekstni tushunish uchun tuzilmadan foydalanadi — token narxi esa oddiy matn bilan deyarli bir xil.
Python-da hech narsa o‘rnatmasdan PDF-ni Markdown-ga o‘gira olamanmi?
Ha — httpx yoki requests bilan HTTP orqali parsing API-ni chaqiring. Faylni ParseJet-ning /v1/parse/auto/file endpoint-iga POST qiling — javobning "text" maydoni Markdown bo‘ladi. Bepul API kalitlariga oyiga 300 kredit kiradi.
Bog'liq vositalar
PDF to Markdown Converter
Convert PDF to Markdown online for free. Preserves headings, lists, tables, and code blocks. No signup required — try it instantly or automate via API.
PDF to JSON Converter
Convert PDF to JSON online for free. Get text, title, and metadata as structured JSON — ready for your app, database, or AI pipeline. API included.
Word to Markdown Converter
Convert Word documents (DOCX) to Markdown online for free. Headings, lists, and tables preserved. No signup — or automate DOCX to MD conversion via API.
Matnni bepul ajratishni boshlang
Ro'yxatdan o'tish talab etilmaydi. Birinchi faylingizni soniyalar ichida tahlil qiling.