Tiefer Einstieg in Microsoft MarkItDown
Min-jun Kim
Dev Intern · Leapcell

Was ist MarkItDown?
MarkItDown ist eine von Microsoft entwickelte Python-Bibliothek, die verschiedene Dateiformate in Markdown konvertiert.
Seit seiner Veröffentlichung hat es schnell an Popularität gewonnen und in nur 2 Wochen über 25.000 Sterne auf GitHub gesammelt! 🤯
Warum ist MarkItDown so beliebt?
MarkItDown unterstützt eine beeindruckende Reihe von Dateitypen, darunter:
- Office-Dokumente: PowerPoint, Word, Excel
- Rich-Media-Dateien: Bilder (mit EXIF und Bildbeschreibung), Audio (mit Transkription)
- Web- und strukturierte Daten: HTML, CSV, JSON, XML
- Archive: ZIP-Dateien
Es kann nicht nur gängige Formate wie Word und Excel verarbeiten, sondern auch Multi-Modal-Dateien, indem es OCR und Spracherkennung zur Inhaltsentnahme nutzt.
Die Möglichkeit, alles in Markdown zu konvertieren, macht MarkItDown zu einem leistungsstarken Werkzeug für das LLM-Training. Durch die Verarbeitung domänenspezifischer Dokumente bietet es einen reichhaltigen Kontext für die Erzeugung genauerer und relevanterer Antworten in LLM-gestützten Anwendungen.
Wie man MarkItDown verwendet
Die Verwendung von MarkItDown ist bemerkenswert einfach - nur 4 Zeilen Code:
from markitdown import MarkItDown md = MarkItDown() result = md.convert("test.xlsx") print(result.text_content)
Hier sind einige Anwendungsfälle von MarkItDown.
Das Konvertieren einer Word-Datei liefert eine akkurate Markdown-Ausgabe:
Mehrseitige Excel-Dateien sind natürlich ein Kinderspiel:
Es kann auch ZIP-Dateien verarbeiten, wobei der gesamte Inhalt innerhalb von ZIP-Archiven rekursiv geparst wird:
Der Versuch, Inhalte aus Bildern zu extrahieren, gibt nichts zurück:
Warum gibt es nichts zurück? MarkItDown ist für die Unterstützung von Bilddateien konzipiert!
Das Problem liegt in der Notwendigkeit eines LLM zur Extraktion von Bildbeschreibungen. Integrieren Sie einen kompatiblen LLM-Client wie folgt in MarkItDown:
from openai import OpenAI client = OpenAI(api_key="i-am-not-an-api-key") md = MarkItDown(llm_client=client, llm_model="gpt-4o")
Nach der Konfiguration wird der Bildinhalt erfolgreich konvertiert:
Hinweis: LLM funktioniert nur für Bilder. Um Inhalte aus PDFs zu extrahieren, stellen Sie sicher, dass die PDF-Datei zuvor mit OCR verarbeitet wurde.
Der aus der PDF-Datei extrahierte Text verliert jedoch seine gesamte Formatierung, wodurch nicht zwischen Überschriften und normalem Text unterschieden wird.
Einschränkungen von MarkItDown
Wie oben gezeigt, hat MarkItDown einige Einschränkungen:
- Nicht-OCRed PDFs können nicht verarbeitet werden.
- Die Formatierung ist bei der Extraktion aus PDFs nicht verfügbar.
Da MarkItDown ein Open-Source-Tool ist, ist es in hohem Maße erweiterbar. Seine übersichtliche Codebasis ermöglicht es Entwicklern, problemlos neue Funktionen hinzuzufügen.
Wie funktioniert MarkItDown?
Die Architektur von MarkItDown ist einfach und übersichtlich, wobei die Kernimplementierung in nur einer Datei enthalten ist.
In der Codebasis ist eine DocumentConverter
-Klasse mit einer convert()
-Methode definiert:
class DocumentConverter: """Abstract superclass of all DocumentConverters.""" def convert( self, local_path: str, **kwargs: Any ) -> Union[None, DocumentConverterResult]: raise NotImplementedError()
Verschiedene Konverter erben von dieser Basisklasse und werden während der Initialisierung registriert:
self.register_page_converter(PlainTextConverter()) self.register_page_converter(HtmlConverter()) self.register_page_converter(DocxConverter()) self.register_page_converter(XlsxConverter()) self.register_page_converter(Mp3Converter()) self.register_page_converter(ImageConverter()) # ...
Dieses modulare Design macht MarkItDown in hohem Maße erweiterbar, sodass Entwickler bei Bedarf ihre eigenen Konverter erstellen können.
Wie verschiedene Dateitypen konvertiert werden
Office-Dateien
Office-Dateien werden zuerst mit Bibliotheken wie mammoth
, pandas
und pptx
in HTML konvertiert und dann mit BeautifulSoup
in Markdown geparst.
Audiodateien
Audiodateien werden mit der Bibliothek speech_recognition
verarbeitet, die die Google-API zur Transkription nutzt.
(Microsoft, du bist immer noch loyal zu Azure, ...oder? 💔)
Bilder
Bilder werden verarbeitet, indem ein LLM mit der Aufforderung aufgerufen wird:
"Schreibe eine detaillierte Bildunterschrift für dieses Bild."
PDFs
PDFs werden mit der Bibliothek pdfminer
geparst. Es gibt jedoch keine integrierte OCR, daher müssen Sie sicherstellen, dass der PDF-Inhalt vorher extrahierbar ist.
MarkItDown als API verwenden (und kostenlos hosten)
MarkItDown kann lokal ausgeführt werden, aber das Hosting als API eröffnet zusätzliche Flexibilität und erleichtert die Integration in Workflows wie Zapier, n8n oder sogar Ihre eigene Website, die Dateikonvertierungsdienste anbietet.
Hier ist ein einfaches Beispiel dafür, wie Sie MarkItDown mit FastAPI
als API hosten können:
import shutil from markitdown import MarkItDown from fastapi import FastAPI, UploadFile from uuid import uuid4 md = MarkItDown() app = FastAPI() @app.post("/convert") async def convert_markdown(file: UploadFile): hash = uuid4() folder_path = f"./tmp/{hash}" shutil.os.makedirs(folder_path, exist_ok=True) file_path = f"{folder_path}/{file.filename}" with open(file_path, "wb") as f: shutil.copyfileobj(file.file, f) result = md.convert(file_path) text = result.text_content shutil.rmtree(folder_path) return {"result": text}
Sie können die API wie folgt aufrufen:
const formData = new FormData(); formData.append('file', file); const response = await fetch('http://localhost:8000/convert', { method: 'POST', body: formData, });
Die API kostenlos hosten
Das Hosten von Python-APIs kann knifflig sein. Traditionelle Dienste wie AWS EC2 oder DigitalOcean erfordern das Mieten eines ganzen Servers, was immer kostspielig ist.
Aber jetzt können Sie Leapcell verwenden.
Es ist eine Plattform, die Python-Codebasis auf Serverless-Art hosten kann - sie berechnet nur pro API-Aufruf, mit einer großzügigen Free-Tier-Nutzung.
Verbinden Sie einfach Ihr GitHub-Repository, definieren Sie Build- und Startbefehle, und schon sind Sie startklar:
Jetzt haben Sie eine MarkItDown-API, die in der Cloud gehostet wird, bereit zur Integration in Ihren Workflow und, was am wichtigsten ist, nur dann Gebühren erhebt, wenn sie wirklich aufgerufen wird.
Beginnen Sie noch heute mit dem Aufbau Ihrer eigenen MarkItDown-API auf Leapcell! 😎