Yapay Zeka - AI

Markitdown ile Belgelerinizi Markdown'a Dönüştürün

Yapay Zeka Yolculuğuna Devam: Microsoft'tan Markitdown

Geçen yazımda Docling ile nasıl belgelerden veri çıkarabileceğimizi ve bunları yapay zeka modellerine nasıl besleyebileceğimizi anlatmıştım. Bu yazımda ise Microsoft'un geliştirdiği Markitdown aracını tanıtıyorum. Eğer amacınız belgeleri daha temiz, okunabilir ve LLM'lere uygun Markdown formatına dönüştürmekse, Markitdown tam size göre!

Markitdown Nedir ve Docling'den Farkı Ne?

Markitdown, Microsoft tarafından geliştirilen açık kaynaklı bir Python kütüphanesi. Temel amacı çeşitli belge formatlarını (PDF, DOCX, XLSX, PPTX, HTML, RTF, TXT) temiz Markdown formatına dönüştürmek.

Docling vs Markitdown karşılaştırması:

  • Docling: JSON ve HTML çıktılarıyla veri çıkarma odaklı, güçlü OCR/ASR desteği
  • Markitdown: Sadece Markdown çıktısı, temiz ve okunabilir format odaklı
  • Docling: IBM Research kökenli, topluluk destekli
  • Markitdown: Microsoft destekli, AutoGen ekosistemi ile entegre

Neden Markdown Bu Kadar Önemli?

LLM'ler için Markdown formatı gerçekten altın değerinde. Çünkü:

  1. Token Verimliliği: HTML ve JSON'a göre çok daha az token kullanır
  2. Okunabilirlik: Hem insan hem de yapay zeka için son derece okunabilir
  3. Yapısal Zenginlik: Başlıklar, listeler, tablolar gibi yapısal bilgiyi korur
  4. Evrensel Uyumluluk: Tüm LLM'ler Markdown'ı mükemmel anlayabilir

Kim Geliştirdi ve Nerede Kullanılıyor?

Markitdown, Microsoft'un AutoGen projesi kapsamında geliştirildi. AutoGen, çoklu AI ajan sistemleri için bir framework. Markitdown da bu sistemde belgeleri ajanların anlayabileceği formata dönüştürmek için kullanılıyor.

Microsoft Research ve GitHub ekipleri aktif olarak geliştirmeye devam ediyor. Proje MIT lisansı altında tamamen açık kaynak.

Pratik Kullanım: İlk Denemem

Geçen hafta elimde bir sunum dosyası (.pptx) ve birkaç Excel raporu vardı. Bunları ChatGPT'ye analiz ettirmek istiyordum ama dosya yüklemek yerine direkt metin olarak vermek daha praktikti.

from markitdown import MarkItDown

# Markitdown örneğini oluşturuyoruz
md = MarkItDown()

# PowerPoint sunumunu Markdown'a çeviriyoruz
result = md.convert("sunum/Q4_2024_Raporu.pptx")
markdown_content = result.text_content

# Çıktıyı dosyaya kaydediyoruz
with open("Q4_raporu.md", "w", encoding="utf-8") as f:
    f.write(markdown_content)

print("✅ Sunum başarıyla Markdown'a dönüştürüldü!")

Sonuç gerçekten etkileyiciydi. 50 sayfalık PowerPoint sunumu, başlıkları, madde işaretleri ve tablolarıyla beraber temiz bir Markdown dosyasına dönüştü.

Excel Dosyalarını Markdown Tablolarına Çevirmek

Markitdown'un bence en güzel özelliklerinden biri Excel dosyalarındaki tabloları Markdown tablo formatına çevirmesi:

# Excel dosyasını Markdown'a çevirme
excel_result = md.convert("raporlar/satis_verileri.xlsx")

# Çıkan Markdown içeriği
print(excel_result.text_content)

Çıktı örneği:

# Satış Verileri

## Sayfa 1: Aylık Satışlar

| Ay | Satış (TL) | Hedef (TL) | Gerçekleşme (%) |
|---|---|---|---|
| Ocak | 125.000 | 150.000 | 83% |
| Şubat | 138.000 | 150.000 | 92% |
| Mart | 162.000 | 150.000 | 108% |

Bu tabloları doğrudan ChatGPT, Claude veya herhangi bir LLM'e gönderdiğinizde çok daha net analizler alabiliyorsunuz.

PDF Belgelerini Temiz Markdown'a Dönüştürme

PDF'ler her zaman sorunludur ama Markitdown oldukça başarılı:

# PDF'i Markdown'a çevirme
pdf_result = md.convert("belgeler/sozlesme.pdf")

# Başlıkları ve yapıyı koruyarak temiz Markdown
with open("sozlesme_temiz.md", "w", encoding="utf-8") as f:
    f.write(pdf_result.text_content)
    
print("PDF temiz Markdown formatına dönüştürüldü!")

RAG (Retrieval-Augmented Generation) Sistemlerine Entegrasyon

Markitdown'ın en güçlü kullanım alanlarından biri RAG sistemleri. LangChain veya LlamaIndex ile çok kolay entegre:

from markitdown import MarkItDown
from langchain.text_splitter import MarkdownTextSplitter
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings

# Belgeleri Markdown'a çevir
md = MarkItDown()
documents = []

for file_path in ["belge1.pdf", "belge2.docx", "belge3.xlsx"]:
    result = md.convert(file_path)
    documents.append(result.text_content)

# Markdown için özel text splitter kullan
splitter = MarkdownTextSplitter(chunk_size=1000, chunk_overlap=200)
chunks = []

for doc in documents:
    doc_chunks = splitter.split_text(doc)
    chunks.extend(doc_chunks)

# Vector store'a kaydet
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_texts(chunks, embeddings)

print(f"✅ {len(chunks)} chunk vector store'a kaydedildi!")

Toplu Belge İşleme: Klasör Bazlı Dönüşüm

Elimde yüzlerce belge varsa tek tek işlemek yerine otomatik bir sistem kuruyorum:

import os
from pathlib import Path
from markitdown import MarkItDown

def convert_folder_to_markdown(input_folder, output_folder):
    md = MarkItDown()
    
    # Desteklenen formatlar
    supported_formats = ['.pdf', '.docx', '.xlsx', '.pptx', '.html', '.rtf', '.txt']
    
    # Çıktı klasörünü oluştur
    Path(output_folder).mkdir(parents=True, exist_ok=True)
    
    converted_count = 0
    
    for file_path in Path(input_folder).rglob("*"):
        if file_path.suffix.lower() in supported_formats:
            try:
                # Dosyayı Markdown'a çevir
                result = md.convert(str(file_path))
                
                # Çıktı dosya adını oluştur
                output_name = file_path.stem + ".md"
                output_path = Path(output_folder) / output_name
                
                # Markdown dosyasını kaydet
                with open(output_path, "w", encoding="utf-8") as f:
                    f.write(result.text_content)
                
                print(f"✅ {file_path.name} -> {output_name}")
                converted_count += 1
                
            except Exception as e:
                print(f"❌ Hata: {file_path.name} - {str(e)}")
    
    print(f"\n🎉 Toplam {converted_count} dosya dönüştürüldü!")

# Kullanım
convert_folder_to_markdown("belgeler/", "markdown_cikti/")

Markitdown vs Diğer Araçlar

Özellik Markitdown Pandoc Docling
Çıktı Formatı Sadece Markdown Çok format JSON/HTML/MD
Kurulum pip install Sistem bağımlılığı pip install
Office Desteği Mükemmel İyi Orta
PDF Desteği İyi Zayıf Çok iyi
API Basitliği Çok basit Karmaşık Orta
LLM Optimizasyonu Mükemmel İyi İyi

Gerçek Hayat Senaryosu: Şirket İçi Belge Analizi

Geçen ay bir şirkete danışmanlık yaparken şu sistemi kurdum:

from markitdown import MarkItDown
import openai
from datetime import datetime

def analyze_company_documents(folder_path):
    md = MarkItDown()
    all_content = ""
    
    # Tüm belgeleri Markdown'a çevir ve birleştir
    for file_path in Path(folder_path).glob("*"):
        if file_path.suffix.lower() in ['.pdf', '.docx', '.xlsx']:
            result = md.convert(str(file_path))
            all_content += f"\n\n## {file_path.name}\n\n"
            all_content += result.text_content
    
    # GPT ile analiz et
    client = openai.OpenAI()
    
    response = client.chat.completions.create(
        model="gpt-4",
        messages=[
            {"role": "system", "content": "Sen bir iş analisti uzmanısın. Verilen şirket belgelerini analiz ederek önemli bulgular ve öneriler sun."},
            {"role": "user", "content": f"Şu şirket belgelerini analiz et:\n\n{all_content}"}
        ],
        max_tokens=2000
    )
    
    # Raporu kaydet
    with open(f"analiz_raporu_{datetime.now().strftime('%Y%m%d')}.md", "w", encoding="utf-8") as f:
        f.write("# Şirket Belge Analizi Raporu\n\n")
        f.write(response.choices[0].message.content)
    
    return response.choices[0].message.content

# Kullanım
analysis = analyze_company_documents("sirket_belgeleri/")
print("✅ Analiz tamamlandı ve rapor oluşturuldu!")

Performans ve Hız

200 belgelik bir testte Markitdown'ın performansını ölçtüm:

  • PDF (10 MB): ~3 saniye
  • DOCX (2 MB): ~1 saniye
  • XLSX (5 MB): ~2 saniye
  • PPTX (15 MB): ~4 saniye

Docling'e göre biraz daha hızlı çünkü sadece Markdown çıktısına odaklanıyor.

Sınırları ve Dikkat Edilecekler

💚 Güçlü yanları:

  • Çok temiz Markdown çıktısı
  • Microsoft Office dosyalarında mükemmel
  • Kurulumu çok basit
  • LLM'lerle mükemmel uyum

⚠️ Zayıf yanları:

  • OCR desteği yok (taranmış PDF'lerde sorun)
  • Ses dosyası desteği yok
  • Sadece Markdown çıktısı (JSON istemiyorsanız sorun değil)
  • Görsel içerikleri işleyemiyor

Ne Zaman Hangisini Kullanmalı?

Markitdown kullan eğer:

  • Sadece Markdown çıktısı istiyorsan
  • Office dosyalarıyla çok çalışıyorsan
  • LLM'lere besleyeceğin temiz metin istiyorsan
  • RAG sistemi kuruyorsan

Docling kullan eğer:

  • JSON/HTML çıktısı istiyorsan
  • OCR/ASR desteği gerekiyorsa
  • Ses kayıtlarıyla çalışıyorsan
  • Veri çıkarma odaklıysan

Sonuç ve Gelecek Planlarım

Markitdown, özellikle LLM tabanlı projeler için harika bir araç. Docling ile birlikte kullandığınızda neredeyse her türlü belgeyi yapay zeka modellerinize besleyebilirsiniz.

Bir sonraki yazımda bu iki aracı LangChain ve AutoGen ile nasıl entegre edebileceğinizi, otomatik belge analiz sistemleri nasıl kurabileceğinizi anlatacağım. Ayrıca vector database kurulumu ve semantic search örnekleri de gelecek!

Hızlı Başlangıç

Hemen denemek istiyorsanız:

pip install markitdown
from markitdown import MarkItDown

md = MarkItDown()
result = md.convert("belgeniz.pdf")
print(result.text_content)

Bu kadar basit! 🚀


GitHub: https://github.com/microsoft/markitdown
Dokümantasyon: https://github.com/microsoft/markitdown/blob/main/README.md