Обзор MarkItDown: конвертер файлов в Markdown, который не является скрапером

Последнее обновление: August 12, 2026
Обзор MarkItDown: конвертер файлов в Markdown, который не является скрапером
AI-сводка
Этот обзор MarkItDown объясняет, что инструмент Microsoft — это конвертер файлов в Markdown, а не краулер и не система автоматизации браузера. В статье тестируются существующие входные данные PDF, DOCX, XLSX и PPTX, а затем измеряются размер пакета, время импорта, точность таблиц, скорость работы на документах разного объёма и рост потребления памяти на таблицах. Автор приходит к выводу, что MarkItDown быстр и полезен на чистых данных, но имеет неожиданно тяжёлую зависимость от ML-runtime и может сохранять текст таблиц, тихо теряя их структуру. Это практичный материал для команд, которые преобразуют документы в Markdown для поиска, RAG или внутренних баз знаний.

MarkItDown часто относят к веб-скраперам — и это ошибка. У него нет краулера, JavaScript-движка и возможности открыть URL, забрать страницу и очистить её от лишней обвязки. Его задача другая: взять уже имеющиеся у вас байты — PDF, Word-документ, таблицу, презентацию — и преобразовать всё это в Markdown, который может читать языковая модель.

В течение пары недель я прогонял Microsoft MarkItDown через набор реальных документов на одном Mac, сверяя каждую таблицу с заранее подготовленным манифестом и замеряя время каждого преобразования. Коротко: на чистых данных он быстрый и точный, в установочный пакет незаметно входит 73 МБ машинного обучения, которое вы не просили, а таблицы ломаются так, что проверку «текст уцелел?» они проходят, а проверку «данные стоят в нужном столбце?» — нет. Ниже — полная картина с цифрами.

Что такое MarkItDown на самом деле

MarkItDown — это Python-утилита от Microsoft, которая преобразует файлы и офисные документы в Markdown, оптимизированный для LLM. Дай ему PDF, .docx, .xlsx, .pptx, изображение, HTML-файл или несколько других форматов — и на выходе получишь Markdown. Запустить его можно тремя способами: через CLI (markitdown file.pdf -o out.md или через stdin), через Python API (MarkItDown().convert(...)) и через опциональный MCP-сервер для агентных сценариев.

MarkItDown converts existing files to Markdown and is not a crawler

Самое важное здесь — то, чего он не делает. И это не просто моя интерпретация: в README этого нет, и тесты подтвердили это на практике. Никакого сканирования сайтов, никакого рендеринга JS, переходов по ссылкам, пагинации или извлечения основного контента в стиле readability. Это конвертер целых документов. Вы приносите байты — он приводит их к единому виду. Именно это различие решает, место ли этому инструменту в вашем стеке, поэтому я ещё не раз к нему вернусь.

С точки зрения GitHub-метрик репозиторий тяжеловесный: по состоянию на середину июля 2026 года у него 165 282 звезды и 11 790 форков, лицензия MIT, а свежий релиз (v0.1.6) вышел 2026-05-26. Но это, скорее, отражение популярности Microsoft и общего хайпа вокруг LLM-инструментов, чем зрелости внутренних механизмов конвертации. Там же 833 открытых issue, и часть из них стоит учитывать ещё до установки.

HTML в Markdown: быстро, полно, но с лишней обвязкой

Поскольку в остальной части моей серии обзоров скраперов используются одни и те же четыре веб-фикстуры, я подал MarkItDown те же локальные HTML-файлы — не для того, чтобы оценивать его как скрапер, а чтобы посмотреть, насколько хорошо он конвертирует HTML в Markdown. На хорошо размеченных страницах он действительно хорош.

Все четыре страницы конвертировались на базовой установке без дополнительных компонентов, и все контрольные точки основного текста сохранились. Статья Wikipedia про Web scraping (226 КБ) сохранила дерево заголовков — один h1, семь h2 и двенадцать h3, что соответствует реальной структуре разделов статьи — а также 418 ссылок в корректном формате [текст](url). Таблица хоккейной статистики 25×9 на странице Scrape This Site forms превратилась в аккуратную GFM-таблицу из 27 строк (заголовок + разделитель + 26 строк данных), включая пустые ячейки. По скорости тоже всё было отлично: от медианы 48 мс для небольшой страницы Quotes до 352 мс для Wikipedia на 226 КБ.

Но есть нюанс — и это именно осознанное решение, а не баг. MarkItDown не вырезает служебную обвязку страницы. Он конвертирует весь <body>, так что вместе с контентом тянется и интерфейс сайта — причём чем больше его на странице, тем заметнее след.

СтраницаКол-во символов на выходеЗаголовки (h1/h2/h3)СсылкиСтрок с обвязкой сайта
Books to Scrape10,4781 / 0 / 0940.6% (1/159)
Quotes to Scrape2,9731 / 1 / 0551.2% (1/86)
ScrapeThisSite forms3,3851 / 0 / 0316.7% (5/75)
Wikipedia Web scraping60,1591 / 7 / 1241812.4% (42/338)

На почти лишённой обвязки домашней странице Books 0,6% строк вывода — это интерфейс сайта. На Wikipedia — уже 12,4%: 42 из 338 непустых строк — это «jump to content», переключение оглавления, «22 languages», «retrieved from», cookie- и license-footers. Даже сервисные баннеры Wikipedia вроде «This article needs additional citations» корректно превращаются в двухколоночные pipe-таблицы — именно оттуда на странице без реальной таблицы данных берутся девять строк таблицы.

Но это не значит, что MarkItDown делает что-то неправильно. Это конвертер целого документа, а не инструмент для извлечения только основного текста: честный HTML-to-Markdown — это совсем другая задача, чем чистое извлечение статьи. Trafilatura и инструменты в духе Firecrawl стараются вернуть только основной контент; MarkItDown возвращает страницу целиком. Внутри его _html_converter.py удаляет <script> и <style>, а потом передаёт весь body в библиотеку markdownify — без каких-либо эвристик для поиска основного текста. Если нужна только статья, это не тот уровень.

Родная стихия: PDF, DOCX, XLSX, PPTX

Именно для документов MarkItDown и создавался. Я проверил его на реальных публичных файлах: arXiv-статье с текстовым слоем, whitepaper Bitcoin, отсканированном PDF без текстового слоя, а также на DOCX/XLSX/PPTX из собственного набора тестов MarkItDown (с UUID-маркерами, чтобы отлавливать скрытую потерю контента).

ДокументВходной размерКол-во символов на выходеТочки проверкиМедианное времяПримечания
arXiv 1706.03762 (PDF с текстовым слоем)2.2 MB40,1747/73.7 s (warm)title, "Transformer", "BLEU", "References" на месте
Bitcoin whitepaper (9 стр. PDF)184 KB22,4856/61.4 sприсутствуют "Satoshi Nakamoto", "proof-of-work", "Conclusion"
Сканированный PDF (без текстового слоя)89 KB00/415 msпустой результат, без ошибки, без OCR
DOCX (test.docx)136 KB4,651—70 msзаголовки + GFM-таблица; встроенные UUID на месте
DOCX с формулами15 KB240—101 msOffice Math сохранён как LaTeX
XLSX (test.xlsx)12 KB808—57 msкаждый лист → ## SheetName + GFM-таблица
PPTX (test.pptx)278 KB2,047—52 msмаркеры номеров слайдов, таблицы, график → таблица

На PDF с текстовым слоем полнота извлечения текста была отличной — 7 из 7 заранее заданных контрольных точек на статье arXiv Attention Is All You Need, 6 из 6 на whitepaper Bitcoin — и ни один офисный файл не потерял ни одного UUID-маркера, то есть скрытой потери контента в собственных регрессионных фикстурах мейнтейнеров я не увидел. Ещё один приятный, но узкий плюс: путь DOCX (через mammoth) сохраняет офисные формулы как LaTeX, превращая equations.docx в настоящий математический блок $$...$$. Если вы скармливаете LLM Word-документы с большим количеством математики, это реальное, пусть и нишевое, преимущество, которое мне больше нигде не попадалось.

На этой территории есть два наблюдения, которые особенно важно отметить — они с наибольшей вероятностью создадут проблемы.

Сканированный PDF, который просто исчезает

Если подать MarkItDown PDF только с изображением и без текстового слоя, он вернёт пустую строку. Ноль символов, без исключения, без предупреждения — и сделает это примерно за 15 мс, потому что извлекать нечего. Путь обработки PDF у MarkItDown — это только извлечение текста (под капотом pdfminer и pdfplumber), и OCR не входит ни в базовую установку, ни в какие-либо pip extra.

Для пакетной обработки это критично. Разработчик, который отдаёт на вход папку с PDF, где часть файлов — сканы, получит по этим файлам молча пустой результат, без какого-либо сигнала, что что-то пропущено. Я проверил, что это не сломанная фикстура, запустив extract_text из pdfminer напрямую — ноль символов, текста нет, всё подтвердилось — так что пустой вывод действительно является реальным поведением MarkItDown на реальном скане. Это повторяет давно открытую проблему с отсутствием OCR-fallback (#1268), которую уже какое-то время отслеживают upstream. Описанный путь — это опциональный бэкенд Azure Document Intelligence или плагин; ни один из них не входит в базовую установку.

PDF выходит плоским текстом, а не структурой

На обоих PDF с текстовым слоем MarkItDown не создал ни одного Markdown-маркера заголовка. У PDF нет семантических тегов заголовков, а MarkItDown не пытается выводить их из размера шрифта, поэтому каждая строка оказывается на уровне обычного текста. Полнота извлечения текста высокая; структура — плоская.

И это не только мой вывод. Внешние публичные бенчмарки оценивают иерархию заголовков PDF у MarkItDown примерно в 0.0, а качество таблиц — около 0.27, что заметно ниже 0.88 у Docling с TableFormer (см. сравнение MarkItDown vs Docling vs Marker и бенчмарк READoc). Мои фикстуры воспроизводят эти результаты, а это усиливает доказательную базу — мои цифры совпали с внешним источником. При этом те же бенчмарки показывают, что MarkItDown работает примерно в 100 раз быстрее, чем Docling, и это хорошо согласуется с моими измерениями: секунды вместо минут на документах, которые инструментам с layout-моделями приходится обрабатывать минутами. Вывод простой: MarkItDown даёт вам чистый и быстрый PDF-текст, но не даёт PDF-структуру. Если заголовки и таблицы должны сохраниться, нужен инструмент уровня layout-модели — например Docling или Marker.

Таблицы: текст сохраняется всегда, структура — не всегда

Таблицы как раз тот случай, где «текст уцелел?» и «данные можно использовать?» расходятся, поэтому я собрал матрицу из 13 кейсов — по одному <table> на кейс, каждый сравнивался с манифестом, созданным до запуска, — чтобы точно понять, какие формы держатся, а какие ломаются.

MarkItDown table fidelity: tokens survive but rowspan can silently shift columns

Главный вывод: MarkItDown ни разу не потерял содержимое таблиц. Во всех 13 случаях сохранилось 100% заранее заданных токенов. Но структурная точность распалась на три сценария. Семь из тринадцати кейсов дали корректную GFM-сетку (обычная, с colspan в заголовке, очень широкая на 24 столбца, без заголовка, с пустыми ячейками, с блоком внутри ячейки и арабскую справа налево). Четыре случая вышли рваными, потому что в Markdown нет понятия ячейки, растянутой на несколько строк или столбцов, а также из-за некорректных исходников. И ещё два были откровенно сломаны.

О двух сломанных сценариях стоит сказать отдельно. Вложенная таблица (<table> внутри <td>) схлопывается в строку, её собственные pipe-символы и строка-разделитель попадают в родительскую ячейку, и в итоге получается мусорная строка с 14 «столбцами». А литеральный | внутри ячейки не экранируется — текст a | b превращается в два столбца, x || y — в три, так что двухколоночная таблица в выводе даёт строки с двумя, тремя и четырьмя столбцами, а любой downstream Markdown-парсер прочитает границы неверно. Любопытно, что звёздочки и обратные кавычки внутри ячеек экранируются, а вот pipes — нет. Корень проблемы в том, что HTML-путь MarkItDown использует стандартную обработку таблиц markdownify, а его кастомный подкласс переопределяет ссылки, изображения и заголовки, но не ячейки таблиц. Та же ошибка с экранированием pipe-сиволов уже отмечена как открытая проблема для CSV-конвертера (#2019), хотя это исправление не затрагивает HTML-путь, который я тестировал.

Самое тонкое наблюдение — то, что я бы хотел показать data engineer в первую очередь, — это rowspan. Кейс t03 не просто выходит рваным; он молча сбивает данные по колонкам. Метка с rowspan=2 («Fruit») выводится один раз, а строка под ней становится короткой двухколоночной строкой (| Banana | 8 |), поэтому «Banana» попадает в столбец Group вместо Item. Все токены на месте. Наивный потребитель, который читает второй столбец, получит неверное значение. Это именно тот баг, который проходит проверку на сохранность текста и тихо портит датасет.

Само ограничение на span — это известный и зафиксированный компромисс дизайна (#1211, #1248): плоская GFM-сетка действительно не может выразить ни объединённые ячейки, ни вложенность, поэтому конвертер жертвует структурой ради полноты текста. При этом есть и хорошие сценарии: таблицы без заголовка получают сгенерированную пустую строку заголовка (так данные не «повышаются» в заголовок незаметно), пустые ячейки сохраняются, а <caption> выводится как строка текста над таблицей.

Установка и запуск: налог, о котором «лёгкая утилита» не предупреждает

Ничто в этом обзоре не удивило меня сильнее, и именно здесь формулировка «лёгкая Python-утилита» тихо завышает ожидания.

MarkItDown dependency footprint: 161 MB total, onnxruntime 73 MB and numpy 34 MB

Во-первых, не ставь pip install 'markitdown[all]'. На Python 3.14 он молча откатывается на markitdown 0.0.2 — релиз двухлетней давности — и я воспроизвёл это в чистом venv. Если зафиксировать версию, причина становится очевидной: pip install 'markitdown[all]==0.1.6' падает с ошибкой, потому что extra [all] фиксирует youtube-transcript-api~=1.0.0, а на текущем PyPI все сборки из этого диапазона ограничены Python <3.14, тогда как единственные сборки, совместимые с 3.14, не попадают в этот pin. В итоге резолвер откатывается до последнего релиза, зависимости которого можно удовлетворить. Это совпадает с открытой upstream-проблемой (#2179). Исправление простое: зафиксировать версию и ставить extras по отдельности — pip install 'markitdown==0.1.6', затем pip install 'markitdown[pdf,docx,pptx,xlsx,xls]==0.1.6'. Каждый из этих пакетов ставится без проблем; отравленным является только общий бандл [all]. (Этот подвох зависит от версии Python — на Python 3.13 и ниже ограничение может не сработать, и тогда [all] резолвится иначе.)

Во-вторых, вес установки. Базовая установка занимает 161 МБ: пустой venv на 13 МБ плюс ещё 148 МБ. Из этого на onnxruntime (73 МБ) и numpy (34 МБ) вместе приходится 107 МБ — 66% всей базовой массы — и оба пакета подтягиваются одной жёсткой зависимостью: magika, ML-детектор типов файлов от Google. То есть текстовый конвертер в базовой поставке тащит за собой 73-МБ runtime для ONNX-инференса ещё до того, как ты поставишь хотя бы одно расширение для документов. Если добавить все document extras, venv разрастается до 310 МБ. Это намного легче, чем стек на headless-браузере, но если ты ожидал микроутилиту в стиле «поставил и забыл», учти: ONNX runtime уже едет в комплекте.

В-третьих — и это единственный результат во всём моём наборе, который прошёл все проверки на новизну, которые я сделал, — даже после чистой установки import markitdown стоит на этой машине около 3,35 секунды. Почти вся цена платится на этапе импорта: markitdown._markitdown заранее импортирует весь реестр конвертеров (2,56 с суммарно, то есть 76% от общего времени), что тянет за собой pandas (1,21 с, через XLSX-конвертер), python-pptx (427 мс), magika (354 мс) и requests (270 мс) — независимо от того, будешь ли ты вообще конвертировать эти форматы. Для долгоживущего сервиса это разовая амортизация и не проблема. Для CLI-вызова или serverless cold start это реальный налог на каждый процесс, которого от маркировки «лёгкая утилита» совсем не ждёшь. (Справедливое замечание: это один профильный прогон, одно наблюдение, а не распределение по множеству запусков.)

MarkItDown cold start import tax: 3.35 seconds, registry 2.56 seconds

Масштаб: не падает, но для PDF закладывайте CPU, а для таблиц — RAM

Я прогнал четыре крупных кейса в отдельных процессах, чтобы пиковая память не была искажена предыдущими запусками. Ничего не упало. Но профиль затрат оказался очень неравномерным.

MarkItDown timing scale: arXiv 3.7 seconds, NIST 192.5 seconds, 50K XLSX plus 374 MB

ОбъектВходной размерКол-во символов на выходеМедианное времяПик RSS Δ
NIST SP 800-53r5 (PDF на 492 страницы)6.07 MB1,625,365192.5 s+40 MB
XLSX 50,000 строк × 8 столбцов2.1 MB3,722,95562.1 s+374 MB
arXiv 1706.03762 (~15 страниц PDF)2.2 MB40,17412.6 s+25 MB
XLSX 200 строк × 64 столбца46 KB120,1292.9 s+22 MB

PDF NIST на 492 страницы занял медианно 192,5 секунды — примерно 3,2 минуты, или 0,39 с/страницу — потому что pdfplumber выполняет на каждой странице обнаружение форм на основе положения слов. Пиковый RSS остался на уровне +40 МБ, так что это CPU-bound, а не memory-bound задача. Даже 15-страничный arXiv PDF в изолированном процессе занял 12,6 секунды — примерно в 3,4 раза дольше, чем 3,7 секунды на том же файле в тёплом прогоне внутри моего набора документов. Этот разрыв — цена холодного процесса, и он подтверждает, что основная нагрузка идёт от покадровой/постраничной работы, а не от размера байтов как такового. Если нужен один переносимый показатель для этого PDF, берите изолированные 12,6 с.

У таблиц бутылочное горлышко другое. XLSX на 2,1 МБ с 50 000 строк раздувается до +374 МБ пикового RSS (и 3,7 млн символов на выходе), потому что конвертер загружает весь лист и собирает одну огромную Markdown-строку. Поэтому практический совет прямой: для больших PDF закладывайте минуты CPU, для больших таблиц — сотни мегабайт RAM. Это цифры с одной машины на macOS arm64 и Python 3.14, а константы на страницу и на строку зависят от платформы — но сама форма зависимости (PDF медленный и CPU-bound, XLSX прожорлив по памяти, ничего не падает) переносится.

Где здесь место Thunderbit — и где его нет

Попробовать Thunderbit для извлечения веб-данных

Это как раз та часть сравнения, где легко уйти в преувеличение, поэтому границу проведу аккуратно. MarkItDown и Thunderbit решают соседние задачи, но не одну и ту же.

MarkItDown преобразует файлы, которые у тебя уже есть. Thunderbit сначала забирает страницу. Эндпоинт Thunderbit /distill превращает живую веб-страницу в чистый Markdown, пригодный для LLM — обрабатывая JS-рендеринг, антибот-защиту и динамический контент, для которых у MarkItDown просто нет механизма — а эндпоинт /extract возвращает структурированный JSON, согласованный со схемой, а не только сырой Markdown. Для разработчиков это доступно через API (POST /distill / POST /extract), MCP-сервер и CLI (npx @thunderbit/thunderbit-cli) — всё на одном AI-движке, том же, что стоит за расширением с 100 000+ пользователями.

Так что они пересекаются ровно в одном — оба умеют выдавать «LLM-ready Markdown» — но домен входных данных разный: Thunderbit distill принимает URL из открытого веба, а MarkItDown — локальный файл. Это не взаимозаменяемые инструменты, и делать вид, что это так, я не буду. Реальный стек часто использует оба: сначала забирает и краулит веб с помощью Thunderbit (или сервиса в духе Firecrawl), а затем нормализует локальные документы — PDF, презентации, таблицы — через MarkItDown. Один работает с сетью, другой — с файловым шкафом.

Плюсы и минусы

Сильные стороны

  • Полное извлечение основного текста из чистого HTML (4/4 страниц), с корректным сохранением дерева заголовков и ссылок
  • Высокая полнота извлечения текста из PDF/DOCX (arXiv 7/7 контрольных точек, Bitcoin 6/6) и отсутствие скрытой потери контента на собственных офисных фикстурах мейнтейнеров
  • Формулы Office Math сохраняются как LaTeX — редкое и очень полезное преимущество
  • Ни разу не упал ни на одном крупном кейсе, вплоть до PDF на 492 страницы и XLSX на 50k строк
  • Прост в вызове: CLI, convert(), stdin и опциональный MCP-сервер
  • MIT-лицензия, активная поддержка Microsoft, живой issue tracker

Слабые стороны

  • Сохраняет лишнюю обвязку — до 12,4% строк в Wikipedia; это не извлекатель статьи
  • Таблицы ломаются на span, вложенности и символах | внутри ячеек (2/13 сломаны, 4/13 рваные), а rowspan может молча смещать данные
  • Сканированные PDF без текстового слоя возвращаются пустыми, без OCR и без ошибки
  • В PDF отсутствует структурирование заголовков (это совпадает с публичными бенчмарками)
  • Базовая установка весит 161 МБ и тащит 73-МБ ONNX runtime; холодный импорт ~3,35 с
  • Extra [all] на Python 3.14 молча откатывается на устаревшую 0.0.2

Кому стоит использовать, а кому — нет

MarkItDown стоит брать, если вам нужно привести в единый Markdown-формат смешанный набор локальных документов — Word, Excel, PowerPoint, PDF с текстовым слоем — для LLM-пайплайна, и вы больше цените полноту текста, чем сохранение структуры. Как последний этап пакетной обработки, когда нужно быстро подать модели чистый текст, он быстрый, точный и бесплатный.

Лучше обойтись без него или использовать вместе с другим инструментом, если ваша задача относится к одному из этих случаев: вам нужен только основной текст со страницы сайта (тогда берите инструмент для readability или в духе Firecrawl); вам нужно, чтобы заголовки и таблицы PDF сохранились без искажений (тогда это территория Docling или Marker); или среди входных данных есть отсканированные документы, где требуется OCR (вам понадобится бэкенд Azure или другой инструмент). И если ты думал, что покупаешь скрапер — то есть инструмент, который и забирает страницу, и краулит её, — это совсем не он.

Предварительная оценка, которую я прогнал по рубрике, похожей на скраперную, даёт MarkItDown 60/100, но этот низкий итог — артефакт того, что конвертер оценивают по тесту краулера. На своей территории у него высокие оценки за точность текста; слабые места здесь структурные (таблицы, заголовки PDF) и упаковочные (размер, импорт, ловушка [all]), а не качество текста. Если судить его как то, чем он является — конвертером файлов в Markdown — это добротный, хорошо поддерживаемый инструмент с несколькими острыми углами, о которых стоит знать до того, как вы отправите его в продакшен.

Часто задаваемые вопросы

MarkItDown — это веб-скрапер?

Нет. У него нет краулера, рендеринга JavaScript, переходов по ссылкам и пагинации. Он преобразует уже имеющиеся у тебя файлы и документы — PDF, DOCX, XLSX, PPTX, изображения, HTML — в Markdown. Если тебе нужно забрать и обойти живые веб-страницы, тебе нужен инструмент для скрапинга вроде Thunderbit или Firecrawl; MarkItDown — это следующий шаг, когда уже полученные или локальные файлы нужно превратить в чистый Markdown.

Почему pip install markitdown[all] ставит старую версию?

На Python 3.14 extra [all] фиксирует youtube-transcript-api~=1.0.0, а все сборки из этого диапазона доступны только для Python ниже 3.14. Резолвер не может удовлетворить этот pin и поэтому молча откатывается на markitdown 0.0.2 — релиз двухлетней давности. Исправление такое: зафиксировать версию и ставить extras по отдельности — pip install 'markitdown==0.1.6', затем добавить 'markitdown[pdf,docx,pptx,xlsx,xls]==0.1.6'. Это отслеживается в issue #2179.

Делает ли MarkItDown OCR для сканированных PDF?

Не в базовой установке. Его PDF-путь — только извлечение текста, поэтому PDF только с изображением и без текстового слоя возвращается пустой строкой — без ошибки, без предупреждения. OCR требует опционального бэкенда Azure Document Intelligence или плагина, ни один из которых не входит в поставку по умолчанию. Это давняя известная проблема (issue #1268).

Насколько хорошо MarkItDown работает с таблицами?

По содержимому — очень хорошо: в моём тесте из 13 кейсов он сохранил 100% содержимого таблиц во всех случаях. Но структурно всё зависит от формы: простые, широкие, без заголовков и с пустыми ячейками таблицы выходят как аккуратные GFM-сетки, а вот rowspan и colspan начинают ломать сетку (и rowspan может молча сместить данные в неправильный столбец), вложенные таблицы расплющиваются в мусорные строки, а символ pipe внутри ячеек не экранируется. Плоский формат таблиц Markdown просто не умеет корректно описывать span и вложенность.

Достаточно ли MarkItDown быстр для больших документов?

Он не падает на больших файлах, но ресурсы нужно планировать по типу данных. PDF на 492 страницы занял около 3,2 минуты (примерно 0,39 с/страницу), потому что на каждой странице выполняется поиск форм, и это CPU-bound задача. Таблица XLSX на 50 000 строк завершилась примерно за минуту, но потребовала +374 МБ RAM, потому что конвертер собирает одну огромную Markdown-строку в памяти. Для больших PDF планируй минуты CPU, для больших таблиц — сотни мегабайт RAM.

Попробовать Thunderbit для извлечения веб-данных Get Started Free

Ke
Ke
Технический директор в Thunderbit | Senior Data Scientist и эксперт по ML Имея почти десятилетний опыт в машинном обучении и data science, Кэ Шэнь — выпускник Колумбийского университета и бывший Senior Data Scientist в Walmart Labs. Обладая глубокой, признанной коллегами экспертизой в Python, R, Java и статистике, он делится проверенными на практике наблюдениями о том, как переводить сложные AI-алгоритмы из теории в production-grade архитектуру.
Содержание
Thunderbit · AI-агент для веб-данных

Извлекай данные с любой страницы за 1 клик

Нам доверяют более 250 000 пользователей
доступен бесплатный тариф
От веб-страницы к таблице
Опиши, что тебе нужно, — AI-агент Thunderbit соберет это и экспортирует в Excel, Google Sheets, Airtable или Notion. Старт бесплатный.
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week