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ü:
- Token Verimliliği: HTML ve JSON'a göre çok daha az token kullanır
- Okunabilirlik: Hem insan hem de yapay zeka için son derece okunabilir
- Yapısal Zenginlik: Başlıklar, listeler, tablolar gibi yapısal bilgiyi korur
- 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