Pipeline dokumen masih jadi bottleneck di banyak workflow AI. PDF, Word, dan PowerPoint penuh dengan formatting aneh yang sulit diparsing oleh LLM. Microsoft merilis MarkItDown, tool open-source yang bisa mengonversi berbagai format dokumen ke Markdown bersih. Markdown ini jadi input ideal untuk RAG, chatbot, dan pipeline text processing lainnya.
Berbeda dengan library parsing yang ada, MarkItDown dirancang khusus untuk preservasi struktur dokumen: heading, list, table, dan bahkan metadata. Di tutorial ini, kita akan setup MarkItDown, mengonversi berbagai jenis file, dan mengintegrasikannya ke dalam pipeline otomasi. Source utama tutorial ini berasal dari repository microsoft/markitdown yang trending di GitHub.
MarkItDown memerlukan Python 3.10 ke atas. Instalasi sangat straightforward via pip, tapi ada beberapa optional dependencies untuk format spesifik seperti PDF dan gambar.
pip install markitdown
# Untuk OCR dan image support
pip install markitdown[images]
# Untuk PDF parsing dengan struktur terbaik
pip install markitdown[pdf]
Pastikan kamu juga punya libreoffice atau antiword di sistem untuk konversi file Office legacy. Di Ubuntu/Debian, install via apt.
sudo apt-get update
sudo apt-get install -y libreoffice poppler-utils tesseract-ocr
MarkItDown mendukung .docx, .pptx, dan .xlsx secara native. Hasil konversi mempertahankan hierarchy heading dan struktur tabel.
from markitdown import MarkItDown
md = MarkItDown()
result = md.convert("proposal.docx")
print(result.text_content)
Untuk PowerPoint, setiap slide dikonversi menjadi section dengan heading yang sesuai. Ini sangat berguna kalau kamu ingin membuat knowledge base dari deck presentasi tim produk.
Perhatikan bahwa formatting visual seperti warna, font size, dan alignment tidak di-preserve. MarkItDown fokus pada semantic structure, bukan visual styling. Itu intentional dan sebenarnya lebih baik untuk consumption LLM.
PDF sering jadi momok karena campuran antara teks asli dan scanned image. MarkItDown menangani kedua kasus dengan elegan menggunakan backend pdfplumber dan Tesseract OCR.
result = md.convert("invoice.pdf")
print(result.text_content)
# Untuk gambar dengan teks
result = md.convert("screenshot.png")
print(result.text_content)
Gambar yang mengandung diagram atau chart masih challenging untuk OCR murni. Tapi untuk screenshot code, dokumen scan, dan teks flat, akurasinya sangat tinggi. Pastikan Tesseract language pack sudah terinstall untuk bahasa yang kamu butuhkan.
Kelebangan utama Markdown adalah compatibility-nya dengan semua framework LLM. Setelah konversi, kamu bisa langsung chunk dan masukkan ke vector store.
from langchain.text_splitter import MarkdownHeaderTextSplitter
splitter = MarkdownHeaderTextSplitter(headers_to_split_on=[("#", "Header 1"), ("##", "Header 2")])
chunks = splitter.split_text(result.text_content)
# Masukkan ke vector store
vectorstore.add_texts([chunk.page_content for chunk in chunks])
Dengan MarkdownHeaderTextSplitter, kamu mendapatkan chunk yang context-aware. Heading tetap terasosiasi dengan konten di bawahnya, sehingga retrieval quality meningkat signifikan dibanding plain text splitting.
Untuk production, kamu tidak mungkin proses file satu per satu. Buat script otomasi yang watch folder atau terintegrasi dengan cloud storage.
import os
from pathlib import Path
input_dir = Path("./incoming")
output_dir = Path("./markdown_output")
for file_path in input_dir.glob("*"):
if file_path.suffix in [".docx", ".pdf", ".pptx", ".xlsx"]:
result = md.convert(str(file_path))
output_file = output_dir / f"{file_path.stem}.md"
output_file.write_text(result.text_content, encoding="utf-8")
Integrasikan dengan AWS S3, Google Cloud Storage, atau MinIO. Trigger konversi via event queue seperti RabbitMQ atau Apache Kafka. Dengan demikian, setiap dokumen yang diupload tim akan otomatis tersedia sebagai Markdown bersih dalam pipeline AI-mu.
Repository lengkap dan dokumentasi resmi tersedia di github.com/microsoft/markitdown. Microsoft aktif merge PR dan rilis update, jadi pantau releasenotes untuk fitur baru seperti support format tambahan dan performance improvement.
Tidak semua dokumen bisa dikonversi dengan sempurna. File yang corrupted, password-protected, atau memiliki struktur table yang sangat kompleks sering menghasilkan output yang berantakan.
Implementasikan error handler yang graceful. Jika MarkItDown gagal parsing suatu file, log error tersebut dan pindahkan file ke folder quarantine untuk review manual. Jangan biarkan satu file gagal menghentikan seluruh batch processing.
try:
result = md.convert(str(file_path))
except Exception as e:
logger.error(f"Failed to convert {file_path}: {e}")
shutil.move(str(file_path), str(quarantine_dir / file_path.name))
continue
Untuk file password-protected, MarkItDown saat ini belum support ekstraksi langsung. Solusi workaround adalah menggunakan library tambahan seperti msoffcrypto-tool untuk decrypt file Office sebelum diteruskan ke MarkItDown.
Monitor conversion success rate via metrics dashboard. Target minimal 95% success rate untuk dokumen standar. Di bawah angka itu, pertimbangkan untuk menambahkan preprocessing layer atau mengupdate dependency ke versi terbaru.
MarkItDown juga bisa diintegrasikan dengan CI/CD pipeline. Setiap commit dokumentasi ke repository bisa otomatis dikonversi ke Markdown dan dideploy ke knowledge base. Ini menjaga dokumentasi selalu up-to-date tanpa intervensi manual.
Dapatkan feedback, users, dan eksposur dari komunitas kreator, developer, dan entrepreneur digital Indonesia.
Submit Produk → Pelajari Dulu