PDF'den XML'e Dönüşüm: Yapılandırılmamış Dosyadan Veriye

Kerem Aydın·8 Temmuz 2026·⏱5 dk

Yapıyı koruyarak PDF'yi XML'e dönüştürmek üç temel yolla mümkündür: metin tabanlı PDF'ler için özel kütüphanelerin kullanılması (örneğin pdfminer), taramalar için OCR sistemlerinin uygulanması (ABBYY, Tesseract) veya etiket eşlemesinin yapılandırıldığı hazır dönüştürücüler. Başarının anahtarı, belge şemasının önceden analiz edilmesi ve çıktı verilerinin tutarlılığını garanti eden bir XSD şablonu oluşturulmasıdır.

PDF, makine tarafından işlenmek için değil, görsel görüntüleme için tasarlanmıştır. Açık bir semantiği yoktur: bir başlık sadece kalın yazı tipi olabilir ve bir tablo çizgiler ve boşluklardan oluşabilir. Buna karşılık XML, sıkı bir hiyerarşi gerektirir. Dönüşüm görevi, bu hiyerarşiyi yeniden kurmak ve belgenin "resmini" veritabanları, analitik veya web hizmetleri için uygun bir veri ağacına dönüştürmektir.

İçindekiler

  1. Yöntem Seçimi: Metin mi Tarama mı?
  2. Araçlar ve Teknolojiler
  3. Dönüşüm İçin Adım Adım Algoritma
  4. XML Yapı Örnekleri
  5. Doğrulama ve Kalite Kontrolü
  6. Sık Yapılan Hatalar
  7. SSS

Yöntem Seçimi: Metin mi Tarama mı?

İlk adım, kaynak PDF'nin türünü belirlemektir. Bu, araç seçimi ve sürecin karmaşıklığını belirler.

PDF TürüÖzellikÖnerilen Yaklaşım
Yerel (Dijital)Metin imleçle seçilebilir, Word/Excel/InDesign'dan oluşturulmuştur.Kütüphaneler aracılığıyla ayrıştırma (Python, Java). Yüksek doğruluk, düşük maliyet.
Taranmış (Görüntü Tabanlı)İçinde yalnızca sayfa görüntüleri vardır. Metin kopyalanamaz.OCR (Optik Karakter Tanıma). Ön işlemeyi ve hata kontrolünü gerektirir.
HibritMetin katmanı vardır ancak karmaşık düzen (sütunlar, tablolar) mevcuttur.Kombinasyon: Metin çıkarma + yapı için sezgisel kurallar.

Belge karmaşık tablolar içeriyorsa, yerel PDF'ler bile geometrinin OCR benzeri analizini gerektirebilir, çünkü PDF akışındaki sözcük sırası genellikle mantıksal okuma sırasıyla (soldan sağa, yukarıdan aşağıya) eşleşmez.

Araçlar ve Teknolojiler

Geliştiriciler İçin (Kod ve Otomasyon)

  1. Python:

    • pdfminer.six / pdfplumber: Koordinatları koruyarak metin çıkarmak için en iyi araçlar. Öğelerin konumuna dayanarak tabloları yeniden yapılandırmaya olanak tanır.
    • PyPDF2: Karmaşık düzen olmadan basit meta veri ve metin çıkarma için uygundur.
    • lxml: Nihai XML'i oluşturmak ve doğrulamak için.
  2. Java:

    • Apache PDFBox: PDF içeriğine düşük seviyeli erişim için güçlü bir kütüphane.
    • Camelot (JNI veya Python sarmalayıcıları aracılığıyla): Özellikle tablo çıkarmaya odaklanır.

İş Görevleri İçin (Hazır Çözümler)

  1. ABBYY FineReader Engine / Cloud API: Yapı tanıma konusunda pazar lideri. Başlıkların, tabloların ve listelerin hiyerarşisini koruyarak doğrudan XML'e dışa aktarma yapabilir. Lisans gerektirir.
  2. Adobe Acrobat Pro: PDF'yi XML olarak kaydetmeye olanak tanır (Spreadsheet XML veya Özel XML), ancak genellikle "Etiketler" paneli aracılığıyla manuel etiket ayarı gerektirir.
  3. Tesseract OCR: Taramalar için ücretsiz çözüm. Temiz yapısal XML'e dönüştürmek için ek sonrası işlemeye (örneğin hOCR veya ALTO formatı aracılığıyla) ihtiyaç duyar.

Dönüşüm İçin Adım Adım Algoritma

PDF'yi kaliteli verilere dönüştürme süreci beş aşamadan oluşur.

1. Şema Analizi ve Tasarımı (XSD)

Kodla başlamayın. Hangi verilere ihtiyacınız olduğunu belirleyin.

  • Varlıkları belirleyin: "Başlık", "Tarih", "Tutar", "Ürün Kodu".
  • İlişkileri tanımlayın: bir "İrsaliye" birçok "Ürün Satırı" içerir.
  • Bir XML yapı taslağı veya resmi bir XSD şeması oluşturun. Bu, dönüştürücünüz için sözleşme olacaktır.

2. Ham Verilerin Çıkarılması

  • Yerel PDF'ler için: (x, y, genişlik, yükseklik) koordinatlarıyla birlikte metni almak için pdfplumber kullanın.
  • Taramalar için: Sayfaları OCR'dan geçirin. Sonucu hOCR (koordinatlı HTML) veya ALTO (OCR XML formatı) formatında alın.

3. Yapının Yeniden İnşa Edilmesi (Düzen Analizi)

Bu en zor aşamadır. Koordinatları mantıkla eşleştirmeniz gerekir.

  • Başlıklar: Genellikle daha büyük yazı tipi boyutuna sahiptir veya sayfanın üst kısmında bulunur.
  • Tablolar: Yatay ve dikey çizgileri veya metnin sütunlara göre hizalanmasını arayın.
  • Metin Akışları: Aynı yükseklikte ve aynı girintiye sahipse, bölünmüş satırları paragraflarda birleştirin.

4. XML'e Eşleme

Kurtarılan blokları şemanıza göre etiketlere dönüştürün.

  • Örnek: Başlık koordinatlarına sahip metin bloğu → <section title="...">.
  • Örnek: Tablo hücreleri → <row><cell col="1">...</cell></row>.

5. Doğrulama ve Temizleme

  • Elde edilen XML'i XSD şemasına karşı kontrol edin.
  • Verileri normalleştirin: tarihleri ISO 8601 (YYYY-AA-GG) formatına, sayıları tek bir formata (ondalık kısım için nokta) getirin.
  • Hizmet karakterlerini, etiketler içindeki satır sonlarını kaldırın.

XML Yapı Örnekleri

Farklı belge türlerinin yapılandırılmış görünümünü inceleyelim.

Finansal Rapor (Basitleştirilmiş)

<FinancialReport date="2025-12-31">
  <Header>
    <CompanyName>Örnek LLC</CompanyName>
    <Currency>RUB</Currency>
  </Header>
  <Body>
    <Section name="Revenue">
      <Item category="Product A" amount="150000.00"/>
      <Item category="Service B" amount="45000.00"/>
    </Section>
    <Total>195000.00</Total>
  </Body>
</FinancialReport>

Ürün Kataloğu (Fiyat Listesinden)

<Catalog>
  <Product id="SKU-12345">
    <Name>Laptop Pro 15</Name>
    <Specs>
      <Param name="RAM" value="16GB"/>
      <Param name="SSD" value="512GB"/>
    </Specs>
    <Price currency="USD">1200.00</Price>
  </Product>
</Catalog>

Nihai XML iş mantığı için tasarlanmışsa, konumsal özniteliklerin (örneğin <text x="100" y="200">) kullanılmasından kaçının. Koordinatlara yalnızca ayrıştırma aşamasında ihtiyaç duyulur. Nihai dosya yalnızca anlam içermelidir.

Doğrulama ve Kalite Kontrolü

Doğrulama olmadan, aşağı akış sistemlerini bozacak "bozuk" XML elde etme riskiniz vardır.

  1. Sözdizimsel Doğrulama: İyi biçimlendirilmişlik kontrolü (kapalı etiketler, doğru tırnak işaretleri). Araçlar: xmllint, tarayıcıların yerleşik ayrıştırıcıları.
  2. Anlamsal Doğrulama (Şemaya Göre): Veri türlerinin kontrolü. Örneğin, <Age> alanı harf içermemelidir. XSD (XML Şema Tanımı) veya Relax NG kullanın.
  3. Mantıksal Kontrol:
    • Tablo satırlarının toplamı genel toplamla eşleşmelidir.
    • Belge tarihi gelecekte olamaz (tarihsel raporlar için).
    • Zorunlu alanlar (ID, Ad) boş olmamalıdır.

Sık Yapılan Hatalar

  • Kodlamayı Görmezden Gelme: PDF standart olmayan yazı tipleri kullanabilir. Metin çıkarılırken Kiril alfabesi veya özel semboller yerine "anlamsız karakterler" görünebilir. Çıktıda her zaman UTF-8'i kontrol edin.
  • Tablo Bağlamının Kaybedilmesi: Sıklıkla tablo satırları iki sayfaya bölünür. Algoritma, tablo başlığını sonraki sayfalarla "birleştirebilmelidir".
  • Koordinatlara Sıkı Bağlılık: Düzen belgeden belgeye 1-2 piksel kayabilir. Sert x=100 yerine aralıklar ve bağıl konumlandırma kullanın.
  • İstisna İşlemenin Eksikliği: PDF'de standart olmayan bir öğeyle (örneğin metnin üzerindeki filigran) karşılaşılırsa, komut dosyası çökmemelidir. Öğeyi atlamalı veya hatayı günlüğe kaydetmelidir.

SSS

PDF'yi XML'e ücretsiz dönüştürmek mümkün mü? Evet, yerel PDF'ler için açık kaynaklı Python kütüphanelerini (pdfminer.six, pymupdf) kullanın. Taramalar için Tesseract OCR kullanılabilir, ancak karmaşık tabloların tanıma kalitesi ABBYY gibi ticari çözümlere göre daha düşük olacaktır.

XML'de biçimlendirme (kalın yazı tipi, italik) nasıl korunur? XML kendi başına görsel biçimlendirmeyi saklamaz. <text style="bold"> gibi öznitelikler veya etiketler ekleyebilirsiniz, ancak bu şemayı karmaşıklaştırır. Anlam için önemliyse, yalnızca semantiği korumak daha iyidir: <strong> veya <emphasis>.

PDF'deki tablonun kenarlığı yoksa ne yapılmalı? X ve Y koordinatlarına göre kümeleme algoritmalarını kullanın. camelot-py gibi kütüphaneler (stream modu) özellikle metin hizalamasına dayalı olarak açık çizgileri olmayan tabloları tespit etmek için tasarlanmıştır.

Gizli PDF'leri çevrimiçi dönüştürücülere yüklemek güvenli midir? Hayır. Belge kişisel veriler veya ticari sırlar içeriyorsa, yerel araçlar (sunucunuza/PC'nize yüklü) veya veri şifreleme ve gizlilik sözleşmesi (NDA) imzalanmış bulut API'leri kullanın.