Карточка проекта — звёзды, техстек, ссылка на исходники — в каталоге REDDYX: microsoft/markitdown.
ЗАЧЕМ RAG НУЖЕН ИМЕННО MARKDOWN
Если просто вытащить текст из PDF библиотекой вроде PyPDF2, теряется структура: непонятно, где заголовок, где ячейка таблицы, где подпись к рисунку. Модель хуже отвечает на вопросы по такому «плоскому» тексту. Markdown сохраняет иерархию (#, ##), таблицы остаются таблицами, списки — списками. Чанкинг по заголовкам работает предсказуемо, а не режет текст посреди предложения.
ЧТО УМЕЕТ КОНВЕРТИРОВАТЬ
- Офисные форматы — Word (.docx), Excel (.xlsx), PowerPoint (.pptx) с сохранением таблиц и структуры слайдов.
- PDF — извлечение текста и таблиц, распознавание структуры документа.
- Изображения — метаданные EXIF, а с подключённой vision-моделью — описание содержимого.
- Аудио — транскрипция речи в текст через встроенную интеграцию с распознаванием.
- HTML, CSV, JSON, ZIP-архивы — рекурсивная обработка вложенных файлов.
УСТАНОВКА И БЫСТРЫЙ СТАРТ
pip install markitdown
# CLI: файл сразу в markdown
markitdown report.pdf > report.md
Через Python API — то же самое, но встраивается прямо в пайплайн обработки документов:
from markitdown import MarkItDown
md = MarkItDown()
result = md.convert("quarterly_report.pdf")
print(result.text_content) # готовый markdown
# Пакетная обработка папки с документами
import pathlib
for path in pathlib.Path("docs").glob("**/*"):
if path.is_file():
try:
out = md.convert(str(path))
(path.with_suffix(".md")).write_text(out.text_content)
except Exception as e:
print("skip", path, e)
MARKITDOWN ПРОТИВ АЛЬТЕРНАТИВ
| Критерий | MarkItDown | unstructured | pandoc |
|---|---|---|---|
| Формат на выходе | Markdown, готовый для LLM | Elements/JSON, нужен постпроцессинг | Много форматов, не заточен под RAG |
| Поддержка Office | Нативная | Есть, тяжелее ставится | Ограниченная |
| Аудио/транскрипция | Есть | Нет | Нет |
| Простота установки | Один pip-пакет | Много системных зависимостей | Отдельный бинарник |
| Скорость на больших объёмах | Хорошая | Тяжелее из-за моделей разметки | Быстрая, но проще логика |
ВСТРАИВАНИЕ В RAG-ПАЙПЛАЙН
Типовая схема: входящие документы → MarkItDown → чанкинг по заголовкам markdown → embedding → векторная база. Такой порядок сильно снижает долю «мусорных» чанков по сравнению с чанкингом сырого текста, вытащенного примитивным PDF-парсером — таблицы и списки не разваливаются посреди чанка.
Частые вопросы
Справляется ли MarkItDown со сканами PDF без текстового слоя?
Сам по себе — ограниченно. Для сканов нужен OCR-слой перед конвертацией (например Tesseract), либо подключение vision-модели для распознавания содержимого изображений.
Чем это лучше, чем просто попросить LLM прочитать PDF напрямую?
Некоторые модели умеют принимать PDF на вход, но это дороже по токенам и не всегда сохраняет структуру таблиц. Предобработка в markdown даёт предсказуемый, компактный и переиспользуемый результат — конвертировать один раз, использовать много раз.
Работает ли на русскоязычных документах?
Да, извлечение текста не завязано на язык — репозиции таблиц и заголовков работают одинаково независимо от языка контента.
Разбираем свежие open-source инструменты каждый день — от дата-пайплайнов до security-сканеров. Если хотите первыми видеть, что реально работает в 2026 — подписывайтесь на Telegram-канал REDDYX AI — новые репозитории каждые 30-60 минут.
