list_altİçindekilerexpand_more
- 01Neden PDF Parsing Bu Kadar Zor?
- 02Üç Araç: Hızlı Tanıtım
- 03Docling
- 04LlamaParse
- 05Unstructured.io
- 06Karşılaştırma Tablosu
- 07Kurulum ve Kod Örnekleri
- 08Docling ile PDF Parsing
- 09LlamaParse ile PDF Parsing
- 10Unstructured.io (Yerel Mod)
- 11Tablo, Şema ve Görsel Çıkarımı
- 12RAG Pipeline’ına Entegrasyon
- 13LangChain ile Docling
- 14LlamaIndex ile LlamaParse (Native)
- 15Unstructured.io ile Karma Format Pipeline
- 16Hangisini Seçmelisiniz?
- 17Üç Aracı Birlikte Kullanmak

RAG pipeline’ı kurarken ilk kritik adım belge parsing’dir. “Garbage in, garbage out” ilkesi tam burada geçerli: dokümanı hatalı çıkaran bir parser, downstream’de ne kadar güçlü bir LLM kullanırsanız kullanın anlamsız yanıtlar üretir. Karmaşık tablolar, iki sütunlu akademik makaleler, taranmış sayfalar ve gömülü görseller içeren PDF’leri klasik PyPDF2 veya pdfminer güvenilir biçimde işleyemiyor.
Bu soruna 2026’da üç farklı yaklaşım öne çıkıyor: IBM Research’ün açık kaynak aracı Docling, LlamaIndex ekosisteminin cloud parsing servisi LlamaParse ve çok formatlı işleme odaklı Unstructured.io. Bu yazı üçünü kurulum, tablo çıkarımı, OCR kalitesi, maliyet ve RAG entegrasyonu açısından karşılaştırıyor.
Neden PDF Parsing Bu Kadar Zor?
PDF formatı baskıya hazır bir görsel düzenleme standardıdır; metin akışı için tasarlanmamış. Bir PDF dosyasını açtığınızda gördüğünüz paragraflar, altta yatan yapıda koordinat tabanlı konumlandırılmış karakter dizilerinden oluşur. Satır sonu nerede, sütun nerede, başlık mı yoksa gövde metni mi; bunların hiçbiri PDF spesifikasyonunda anlamsal olarak işaretlenmez.
Pratikte bu şu anlama gelir:
- Dijital PDF: Metin katmanı varsa yüzeysel araçlar çalışıyor gibi görünür, ancak iki sütunlu layout’ta sütunlar birbirine karışır, tablo hücreleri yanlış sırayla okunur.
- Taranmış PDF: Metin katmanı hiç yoktur, görüntü vardır. OCR olmadan tek bir kelime çıkaramazsınız.
- Karma belgeler: Dijital metin ile taranmış sayfaların iç içe olduğu kurumsal belgeler, her iki durumu aynı anda yönetmeyi gerektirir.
- Karmaşık tablolar: Birleştirilmiş hücreler, iç içe tablolar, başlıksız tablolar; klasik regex tabanlı yaklaşımlar bunları doğru ayrıştıramaz.
Bozuk parsing doğrudan embedding kalitesini etkiler. Hatalı çıkarılmış metin parçaları benzer içeriği farklı vektör uzaylarına iter, RAG sisteminin alaka puanı hesapları çöker. LLM ne kadar iyi olursa olsun, bozuk girdi bozuk çıktı verir.
Üç Araç: Hızlı Tanıtım
Docling
IBM Research’ün 2024 sonunda açık kaynak yaptığı Docling, yerel çalışan, API gerektirmeyen bir belge dönüştürme aracı. Farkını yapan şey layout analizini DocLayNet adlı görsel bir model üzerinden yapması: başlık, paragraf, tablo, şekil gibi öğeleri piksel düzeyinde ayırt ediyor.
Öne çıkan özellikler:
- Markdown, JSON ve HTML çıktı formatları
- Tablo çıkarımı (başlık hizalama ve birleşik hücre desteği)
- OCR entegrasyonu: EasyOCR veya Tesseract ile taranmış PDF desteği
- DOCX, PPTX, HTML ve görüntü formatı desteği
- MIT lisansı, tamamen ücretsiz
- LangChain ve LlamaIndex ile doğrudan entegrasyon
pip install docling
LlamaParse
LlamaParse, LlamaIndex ekosisteminin resmi cloud PDF parsing servisi. PDF dosyanız LlamaCloud sunucularına gönderilir, parse edilmiş markdown veya JSON olarak geri döner. Karmaşık tablo yapılarını ve çok sütunlu layout’ları çözümlemek için LLM destekli bir parsing katmanı kullanıyor.
Öne çıkan özellikler:
- Gelişmiş tablo ve karmaşık layout desteği (LLM destekli)
- Markdown ve JSON çıktı
- LlamaIndex ve LangChain ile native entegrasyon
- Ücretsiz tier: 1.000 sayfa/gün; ücretli: sayfa başı ~$0,003 (kaynak: LlamaCloud fiyatlandırma)
- Python paketi:
llama-parse
pip install llama-parse llama-index-core
Unstructured.io
Unstructured.io, yalnızca PDF değil 20’den fazla format işleyen bir belge ayrıştırma çerçevesi. Hem açık kaynak yerel sürümü hem de kurumsal API planları var. “hi_res” modu gelişmiş layout analizi ve OCR için Detectron2 tabanlı model kullanıyor.
Öne çıkan özellikler:
- PDF, Word, HTML, e-posta (EML/MSG), PowerPoint, Excel ve daha fazlası
hi_resmodunda tablo tanıma ve layout analizi- Yerel kurulum (ücretsiz) + Unstructured API (ücretli, kurumsal)
- LangChain ve LlamaIndex entegrasyonu
- Chroma, Pinecone, Weaviate gibi vektör veritabanı konnektörleri
pip install "unstructured[pdf]"
Karşılaştırma Tablosu
| Özellik | Docling | LlamaParse | Unstructured.io |
|---|---|---|---|
| Deployment | Yerel (open-source) | Cloud API | Yerel + Cloud API |
| Fiyat | Ücretsiz | 1.000 sayfa/gün ücretsiz, sonrası ~$0,003/sayfa | Yerel ücretsiz; API ücretli |
| Tablo çıkarımı | İyi | Çok iyi (LLM destekli) | Çok iyi (hi_res mod) |
| Taranmış PDF (OCR) | EasyOCR / Tesseract | API içinde (bulut) | Tesseract / unstructured |
| Çok format desteği | PDF, DOCX, PPTX, HTML | Ağırlıklı PDF | 20+ format |
| Çıktı formatı | Markdown, JSON, HTML | Markdown, JSON | JSON, metin |
| LangChain entegrasyonu | Evet | Evet | Evet |
| LlamaIndex entegrasyonu | Evet | Evet (native) | Evet |
| Veri gizliliği | Tam (yerel işleme) | Veri API’ye gönderilir | Yerel seçenek mevcut |
| Lisans | MIT | Tescilli (cloud) | Apache 2.0 (yerel) |
Bu tablo genel yetenek karşılaştırmasıdır. Fiyat verileri için: LlamaCloud pricing, Unstructured API pricing. Hız ve doğruluk sonuçları doküman tipine ve donanıma göre değişir.
Kurulum ve Kod Örnekleri
Docling ile PDF Parsing
from docling.document_converter import DocumentConverter
converter = DocumentConverter()
result = converter.convert("rapor.pdf")
# Markdown çıktısı al
markdown_text = result.document.export_to_markdown()
print(markdown_text)
# JSON çıktısı için
json_data = result.document.export_to_dict()
Docling’in en çok tercih edilen özelliği tablo yapısını koruyarak Markdown’a dönüştürmesi. Birleşik hücreleri olan tablolar bile çoğu durumda doğru Markdown tablosuna dönüşüyor.
LlamaParse ile PDF Parsing
from llama_parse import LlamaParse
from llama_index.core import SimpleDirectoryReader
parser = LlamaParse(
api_key="<LLAMA_CLOUD_API_KEY>",
result_type="markdown",
verbose=True
)
# Tek dosya
documents = parser.load_data("rapor.pdf")
# Dizin içindeki tüm PDF'ler
reader = SimpleDirectoryReader(
"./belgeler",
file_extractor={".pdf": parser}
)
documents = reader.load_data()
LlamaParse karmaşık layout’larda tablo yapısını LLM çıkarımıyla yorumladığı için dijital PDF’lerde doğruluk oranı yüksek. Her sayfa API’ye gönderildiğinden veri gizliliği kritikse bu önemli bir kısıt.
Unstructured.io (Yerel Mod)
from unstructured.partition.pdf import partition_pdf
elements = partition_pdf(
filename="rapor.pdf",
strategy="hi_res", # Gelişmiş layout analizi
infer_table_structure=True # Tablo yapısını çıkar
)
for element in elements:
print(type(element).__name__, ":", element.text[:100])
hi_res modu ek model indirmesi gerektiriyor ve “fast” moda göre belirgin şekilde yavaş; ancak tablo ve çok sütunlu layout’larda çok daha doğru sonuç veriyor. Yüksek hacimli işlem için “fast” mod çoğu durumda yeterli.
Tablo, Şema ve Görsel Çıkarımı
Üç araç arasındaki farklar en çok tablo çıkarımında belirginleşiyor.
LlamaParse’ın LLM destekli yaklaşımı, başlıksız veya birleşik hücreli tablolarda en tutarlı Markdown tablosu üretiyor. Unstructured’ın hi_res modu benzer kalitede çalışıyor, ama yerel makinede çalıştığı için donanım gereksinimi daha yüksek. Docling’in DocLayNet modeli iki sütunlu akademik makalelerde özellikle güçlü.
Grafik ve şemalar farklı bir mesele. Hiçbiri PDF içindeki grafikleri anlamsal olarak yorumlayamıyor. Görseller metadata (resim koordinatları, boyut) olarak çıkarılıyor ya da görüntü dosyası olarak kaydediliyor. Çok modlu yapay zeka tabanlı pipeline gerekiyorsa bu aşamada ayrı bir vision model şart. Multimodal RAG yaklaşımı bu konuyu ayrıntılı ele alıyor.
OCR tarafında: Docling EasyOCR veya Tesseract arasında seçim yapma esnekliği tanıyor. LlamaParse OCR’ı API tarafında hallediyor, yerel kurulum gerekmez. Unstructured, Tesseract ile geliyor; strategy="ocr_only" modu da mevcut.
Çok dilli belgeler söz konusu olduğunda Docling ve Unstructured, OCR engine’i değiştirerek farklı dil desteği sağlıyor. LlamaParse çok dilli belgeleri API içinde otomatik algılıyor.
RAG Pipeline’ına Entegrasyon
LangChain ile Docling
from langchain_docling import DoclingLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings
from langchain_chroma import Chroma
# Belge yükleme ve parsing
loader = DoclingLoader("belgeler/")
docs = loader.load()
# Chunklama
splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200
)
chunks = splitter.split_documents(docs)
# Vektör veritabanına yükleme
vectorstore = Chroma.from_documents(chunks, OpenAIEmbeddings())
retriever = vectorstore.as_retriever()
Parsing sonrası chunklama ve vektör veritabanı yükleme adımları için RAG Nasıl Kurulur rehberine bakabilirsiniz.
LlamaIndex ile LlamaParse (Native)
LlamaParse, LlamaIndex için en sorunsuz entegrasyonu sunuyor. Parsing ve indeksleme aynı ekosistem içinde kalıyor:
from llama_index.core import VectorStoreIndex
from llama_parse import LlamaParse
from llama_index.core import SimpleDirectoryReader
parser = LlamaParse(result_type="markdown")
reader = SimpleDirectoryReader(
"./belgeler",
file_extractor={".pdf": parser}
)
documents = reader.load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine()
response = query_engine.query("Q3 geliri ne kadar?")
print(response)
LlamaIndex vs LangChain karşılaştırmasında hangi framework’ün hangi durumda daha uygun olduğunu inceleyebilirsiniz.
Unstructured.io ile Karma Format Pipeline
Unstructured’ın asıl gücü veri kaynağı türünden bağımsız tek bir pipeline kurmanıza izin vermesi:
from unstructured.partition.auto import partition
from unstructured.chunking.title import chunk_by_title
# PDF, DOCX, HTML veya e-posta fark etmez
elements = partition("belge.docx", strategy="hi_res")
# Başlık bazlı chunklama
chunks = chunk_by_title(elements, max_characters=1500)
# Her chunk bir LangChain Document'a dönüştürülebilir
from langchain_core.documents import Document
langchain_docs = [
Document(page_content=str(chunk)) for chunk in chunks
]
Hangisini Seçmelisiniz?
Kararı veren iki faktör var: veri gizliliği ve doküman türü çeşitliliği.
Docling: Verilerin dışarıya çıkmaması gerekiyorsa, ölçek büyükse ya da çok dilli akademik makaleler işliyorsanız Docling doğal tercih. MIT lisansı kurumsal ortamlarda lisans kaygısını ortadan kaldırıyor.
LlamaParse: Karmaşık finans tabloları, yasal dokümanlar veya teknik raporlar işliyorsanız ve cloud API kabul edilebilirse LlamaParse en yüksek tablo doğruluğunu veriyor. LlamaIndex zaten kullanıyorsanız ek kurulum neredeyse sıfır.
Unstructured.io: PDF dışı kaynakları da (e-posta arşivi, Word, HTML) aynı pipeline’a dahil etmek istiyorsanız Unstructured kaçınılmaz seçim. Kurumsal destek gerektiren projelerde enterprise planı da var.
| Senaryo | Öneri |
|---|---|
| Veri gizliliği / yerel işleme zorunlu | Docling |
| Karmaşık tablolar + cloud API kabul edilebilir | LlamaParse |
| PDF + DOCX + HTML + e-posta karışık kaynak | Unstructured.io |
| LlamaIndex native pipeline | LlamaParse |
| Yüksek hacim, düşük maliyet | Docling |
| Kurumsal destek gereksinimi | Unstructured.io (enterprise) |
Üç Aracı Birlikte Kullanmak
Seçim ikili olmak zorunda değil. Pratikte hibrit yaklaşımlar da işe yarar: standart dijital PDF’ler için Docling, karmaşık tablo içeren kritik dokümanlar için LlamaParse, PDF dışı formatlar için Unstructured. Ortak LangChain veya LlamaIndex arayüzü üzerinden her araçtan gelen dokümanları aynı vektör veritabanına besleyebilirsiniz.
Parsing adımında kalite kontrol için küçük bir doğrulama seti tutmak işe yarıyor: birkaç temsili belgeyi her araçla çalıştırın, tablo çıktılarını karşılaştırın, embedding benzerlik skorlarına bakın. “Hangi araç genel olarak daha iyi?” sorusundan çok “hangi araç benim doküman tipimde daha iyi?” sorusu doğru çerçeve.
Embedding modelleri seçimi de parsing kalitesiyle doğrudan bağlantılı: çok dilli dokümanlarla çalışıyorsanız dil-agnostik embedding modeli tercih etmek, parsing katmanındaki küçük hataların etkisini azaltır.



