PDF tablolarında düz metin çıkarma neden yetmez?
Yetmez, çünkü PDF bir tabloyu satır ve sütunlardan oluşan bir ızgara olarak değil, sayfadaki koordinatlara yerleştirilmiş karakterler olarak saklar. Metin çıkarıcı bu karakterleri okuma sırasına dizmeye çalışırken sütunları karıştırabilir, bir hücreyi iki satıra bölebilir ya da değeri anlamını veren başlıktan koparabilir. "12.400" tek başına bir şey söylemez; hangi ürüne, hangi yıla, hangi para birimine ait olduğu ve bir dipnotla koşula bağlanıp bağlanmadığı ancak tablo yapısı korunursa bilinir.
Sorun parçalama (chunking) aşamasında büyür. Paragraflar için tasarlanmış bir parçalayıcı tabloyu sabit uzunlukta keser; başlık satırı bir parçada, veri satırları başka parçada kalır. Arama doğru satırı bulsa bile modelin elinde sütun başlığı olmayan bir sayı dizisi vardır. Sık görülen zor durumlar şunlardır: birden çok düzeyli başlıklar ("2026" altında "EUR" ve "USD"), birleşik hücreler, başlıkta duran birimler ("bin TL"), yıldızla işaretlenmiş dipnotlar, ara toplam satırları, birden fazla sayfaya yayılıp her sayfada başlığı tekrarlanan tablolar, döndürülmüş sayfalar ve taranmış belgeler.
Bazı PDF'ler yapıyı zaten taşır. Erişilebilirlik için etiketlenmiş (tagged) PDF'lerde tablo, W3C'nin PDF6 tekniğinde anlatıldığı gibi Table, TR, TH ve TD yapı öğeleriyle işaretlenir; ekran okuyucular satır ve başlık ilişkisini buradan anlar. Ancak kurum arşivlerindeki belgelerin önemli bir kısmı etiketsiz ya da hatalı etiketlidir, bu yüzden etiketlere güvenmeden önce örneklem üzerinde kontrol etmek gerekir.
Hangi PDF'e hangi ayrıştırma yöntemi uyar?
Tek bir ayrıştırıcı her PDF türünde iyi sonuç vermez; doğru yaklaşım belgeleri türlerine ayırıp her türü kendisine uyan yola yönlendirmektir. Aşağıdaki tablo bu yönlendirme için bir başlangıç noktasıdır:
| PDF türü | Uygun yol | Dikkat edilecek nokta |
|---|---|---|
| Etiketli dijital PDF | Yapı etiketlerini doğrudan okumak | Etiketler eksik veya yanlış olabilir; örneklemle doğrulayın |
| Kenarlıklı (çizgili) dijital tablo | Çizgi tabanlı ayrıştırma | Çizgisi olmayan tablolarda çalışmaz |
| Çizgisiz, boşluklarla hizalanmış tablo | Metin hizasına dayalı ayrıştırma | Sütun sınırları tahmindir; dar sütunlar birbirine karışabilir |
| Taranmış veya görüntü PDF | OCR ile birlikte tablo yapısı tanıma | OCR hatası sayıyı bozar; hücre güven skorunu izleyin |
| Çok düzeyli başlıklı, birleşik hücreli tablo | Yerleşim (layout) modeli ve insan doğrulaması | Başlık hiyerarşisini çıktıdan ayrıca kurmanız gerekir |
Açık kaynak Camelot kütüphanesinin çalışma biçimi belgesi bu ayrımı iyi gösterir: Lattice yöntemi hücreler arasında çizgi olan tabloları çizgi kesişimlerinden çözer, Stream yöntemi ise hücreler arasındaki boşluklardan tablo yapısını çıkarır. İkisi de metin katmanı olan PDF'ler içindir; taranmış sayfada önce OCR gerekir.
Bulut hizmetleri yapıyı daha zengin döndürür. Amazon Textract'ın tablo çıktısı her hücreyi satır ve sütun indeksiyle ayrı bir blok olarak verir; birleşik hücreleri ayrı bir ilişkiyle bağlar, hücreleri sütun başlığı, tablo başlığı, dipnot (footer), bölüm başlığı ve özet hücresi olarak işaretleyebilir ve her blok için bir güven skoru üretir. Microsoft'un Document Intelligence yerleşim modeli de satır ve sütun sayısını, satır ve sütun yayılımını ve başlık hücrelerini döndürür; v4.0 sürümünün Markdown çıktısında tablolar, birleşik hücreleri ve çok satırlı başlıkları koruyabilmek için HTML tablosu olarak yazılır. Aynı belgede önemli bir ayrıntı vardır: bu sürümde tablonun sınır bölgesi başlık yazısını (caption) ve dipnotları kapsamaz. Yani dipnotu tabloya siz bağlamazsanız "KDV hariçtir" gibi bir koşul kaybolur.
Tablo verisi dizine nasıl yazılmalı?
Her satırı, başlıklarını ve bağlamını kendi üzerinde taşıyan bağımsız bir kayıt olarak yazın. Kullanıcının sorusu çoğunlukla tek bir satıra ya da tek bir hücreye denk gelir; bu yüzden aramanın birimi de satır olmalıdır. Satır kaydında en az şu alanlar bulunsun:
- Kaynak bilgisi: Belge kimliği, sürüm, sayfa numarası, tablo kimliği ve tablo başlığı.
- Satır etiketi: Satırın adı ve varsa üst grubu ("Destek paketleri > Premium").
- Sütun başlık yolu: Çok düzeyli başlıklarda tam yol ("2026 > EUR").
- Değer: Ham metin, normalize edilmiş sayı ve birim. "12.400,50" ile "12,400.50" aynı sayıdır; ayrıştırmayı belgenin diline göre yapın ve başlıktaki "bin TL" gibi birimleri her değere taşıyın.
- Dipnot: İşaret değil, işaretin karşılığı olan metin.
- Kalite bilgisi: Ayrıştırıcının adı ve sürümü, hücre güven skoru ve hücrenin sayfadaki koordinatları.
Aranacak metni bu alanlardan üretin: "2026 fiyat listesi, Premium destek paketi, yıllık fiyat, EUR, KDV hariç: 10.300". Yapısal hücreleri ise ayrı saklayın; yanıtı doğrularken ve hesap yaparken onları kullanacaksınız. Uzun tablolarda başlık satırını her parçaya yeniden ekleyin. "Hangi tabloda indirim oranları var?" gibi tablo düzeyindeki sorular için tablo başlığını ve sütun adlarını içeren ayrı bir özet kayıt da eklemek işe yarar. Boş hücreyi sıfır saymayın; kaynakta bir kural yoksa "değer yok" olarak saklayın. Ara toplam ve genel toplam satırlarını da işaretleyin ki normal veri satırıyla karışmasın.
Varsayımsal örnek: fiyat tablosundan doğru hücreyi getirmek
Bir satın alma ekibinin tedarikçi teklifleri arasında aşağıdaki gibi bir tablo olduğunu düşünün. Tablonun altında "* Fiyatlar KDV hariçtir. 2026 fiyatları ön tekliftir." dipnotu yer alıyor. Rakamlar örnek amaçlıdır.
| Destek paketi | 2025 EUR | 2025 USD | 2026 EUR* | 2026 USD* |
|---|---|---|---|---|
| Temel | 4.200 | 4.550 | 4.400 | 4.750 |
| Premium | 9.800 | 10.600 | 10.300 | 11.100 |
Kullanıcı "Premium paketin 2026 EUR fiyatı ne?" diye soruyor. Doğru yanıt 10.300 EUR'dur ve iki koşul taşır: KDV hariçtir ve ön tekliftir. Düz metin çıkarıldığında satır "Premium 9.800 10.600 10.300 11.100" biçimine döner; model dört sayıdan birini seçmek zorunda kalır ve sütun sırası çıkarımda kaymışsa yanlış sayıyı güvenle söyler. Parçalayıcı başlık satırını ayrı parçaya düşürmüşse hangi sütunun 2026 olduğu hiç bilinmez. Dipnot tablodan ayrı tutulmuşsa yanıt "ön teklif" uyarısını atlar. Üç hatanın üçünde de yanıt doğru sayfaya atıf verebilir; yani sayfa düzeyinde atıf kontrolü bu hataları yakalamaz. Doğru kayıtla arama, "Premium" satırını, "2026 > EUR" başlık yolunu ve dipnot metnini birlikte getirir; yanıt da hücreye kadar doğrulanabilir.
Ayrıştırıcıları nasıl karşılaştırmalısınız?
Ayrıştırıcıyı ürün tanıtımına göre değil, kendi belgelerinizden seçtiğiniz tablolar üzerinde ölçerek seçin. Uygulanabilir bir test tasarımı şöyledir:
- Arşivden her türden tablo seçin: etiketli ve etiketsiz dijital PDF, taranmış sayfa, çizgili ve çizgisiz tablo, birden fazla sayfaya yayılan tablo, birleşik başlıklı tablo. Her türden birkaç örnek, toplamda 20–40 tablo başlangıç için yeterlidir.
- Her tablonun beklenen ızgarasını elle çıkarın: hücre değerleri, satır etiketleri, sütun başlık yolları, birimler ve dipnot bağlantıları.
- Her aday yöntemi (düz metin, çizgi veya hiza tabanlı ayrıştırıcı, bulut yerleşim hizmeti) aynı tablolarda çalıştırın.
- Hücre içeriği doğruluğunu, her değerin doğru satır ve sütun başlığına bağlanma oranını, birim ve dipnotun korunmasını ve normalize sayının birebir eşleşmesini ölçün. Tablo yapısı tanıma araştırmalarında kullanılan GriTS ölçütü, tabloyu bir matris olarak ele alıp hücre topolojisini, konumunu ve içeriğini aynı çerçevede değerlendirir; kendi puanlamanızı kurarken iyi bir referanstır.
- Sayfa başına işleme süresini ve maliyetini kaydedin.
- Ardından aramayı sınayın: gerçek kullanıcı sorularından 30–50 soru yazın, her biri için beklenen satır kimliğini işaretleyin ve doğru satırın ilk birkaç sonuç arasında gelip gelmediğini, yanıttaki sayının hücredeki sayıyla aynı olup olmadığını ölçün.
Karar kuralı basit tutulabilir: her belge türü için eşiği geçen en ucuz yöntemi seçin ve belgeleri türüne göre yönlendirin. Eşiği hiçbir yöntemin geçemediği türler için insan doğrulamalı ayrı bir yol açın.
Karşılaştırma ve toplam soruları nasıl yanıtlanır?
Satır düzeyinde arama tek bir değeri soran sorularda iyi çalışır; "En ucuz paket hangisi?" ya da "2025'ten 2026'ya en çok hangi kalem arttı?" gibi bütün tabloyu taramayı gerektiren sorularda ise yetmez, çünkü arama yalnızca en benzer birkaç satırı getirir. Bu tür sorular sık soruluyorsa tabloları ayrıca yapısal bir depoya, örneğin ilişkisel bir veritabanı tablosuna yazın ve bu soruları oraya yönlendiren bir sorgu adımı ekleyin. Sorgu sonucunu yine kaynak tablo ve sayfa bilgisiyle gösterin. Hangi soruların bu yola gideceğini test sorularınızdan çıkarın; her soruyu yapısal sorguya göndermek, basit değer sorularına gereksiz bir hata kaynağı ekler.
Yanıt aşamasında tablo hataları nasıl önlenir?
Modele dağınık değer listesi değil, başlıkları, birimi, dipnotu ve sayfa bilgisiyle birlikte ilgili satırı verin; yanıttan sayfa, tablo ve satıra kadar atıf isteyin. Toplama, fark veya oran gibi hesapları modele bırakmayın: hesabı yapısal hücrelerden kodla yapın ve işlemin girdilerini yanıtla birlikte gösterin ki inceleyen kişi sonucu yeniden üretebilsin. Basit bir otomatik kontrol de çok iş görür: yanıttaki her sayı atıf yapılan hücrede birebir bulunmalıdır, bulunmuyorsa yanıt incelemeye düşer. Hücre güveni düşükse, başlık yolu belirsizse ya da aynı tablonun iki sürümü farklı değer veriyorsa kaynak sayfanın görüntüsünü gösterip kullanıcıdan doğrulama isteyin. Özgün PDF her zaman erişilebilir kalmalıdır; ayrıştırılmış yapı, kanıtın kendisi değil türetilmiş bir görünümüdür.
Sık yapılan hatalar
- Tabloyu paragraf parçalayıcısına bırakmak ve başlığı veri satırlarından ayırmak.
- Başlıktaki birimi ve dipnot işaretini değerlere taşımamak.
- Boş hücreyi sıfır, ara toplam satırını normal satır saymak.
- Her sayfada tekrarlanan başlık satırını veri satırı olarak dizinlemek.
- Yalnızca sayfa atfını kontrol edip yanıttaki sayıyı hücreyle karşılaştırmamak.
Nereden başlamalı?
Önce arşivinizdeki tablo türlerinin envanterini çıkarın: kaç belge taranmış, kaçında çok düzeyli başlık var, hangi sorular tablolara düşüyor? Ardından yukarıdaki küçük testi çalıştırın ve yöntemi ölçüme göre seçin. Taranmış tablolar ağırlıktaysa taranmış PDF'lerle RAG kurma rehberimizdeki OCR kalite kapılarını da aynı teste ekleyin. PDF ve Word belgelerinden metin, tablo ve meta veri çıkaran belge alımının arama, yetki ve atıf adımlarıyla nasıl birleştiğini kurumsal RAG ve anlamsal arama hizmet sayfamızda bulabilirsiniz.