06.11.2026
Скани українською - у Markdown для ШІ та RAG
Як перетворити скановані українські PDF, Word і Excel на чистий Markdown і фрагменти для ШІ - зі справжнім запуском, результатом, ціною та обмеженнями.
Більшість інструментів «документ → текст» налаштовані на англійську. Скан українського рахунку чи судового рішення часто повертається латинськими «двійниками» літер або без таблиць. Тут - спосіб, що зберігає кирилицю, заголовки й таблиці, і чесно про те, що він робить і чого ні. Усі результати нижче - зі справжнього запуску 6 листопада 2026 року.
Оновлення, 7 листопада 2026. Перший запуск показав дві вади: таблиця у скані поверталася одним пласким рядком, а
["ukr", "eng"]перетворювало «Арматура» наApmatypa. Обидві виправлено; результати нижче - з виправленої версії (збірка 0.1.14), а старі лишено в тексті, щоб було видно різницю.Розкриття: інструмент, про який ідеться, - Document to Markdown for AI на Apify - зробив я. Його код відкритий: AndriyVK/-apify-document-tools.
Що ви отримуєте
Один запис на документ: Markdown, кожна таблиця рядками клітинок, за бажанням - фрагменти з найближчим заголовком (для векторної бази) і кількість сторінок. Сторінки PDF з текстовим шаром читаються напряму; скановані сторінки й зображення проходять OCR Tesseract з українською моделлю.
Формати: PDF, сканований PDF, PNG/JPG/TIFF, DOCX/DOC, XLSX/XLS, PPTX/PPT, ODT/ODS/ODP, RTF, HTML.
Запуск з Python
pip install apify-client
from apify_client import ApifyClient
client = ApifyClient("<ВАШ_APIFY_TOKEN>")
run = client.actor("ai_admin/document-to-markdown").call(run_input={
"sources": [
{"url": "https://api.apify.com/v2/key-value-stores/FloomuI2DrQCJazY8/records/scan-uk.pdf"},
{"url": "https://api.apify.com/v2/key-value-stores/FloomuI2DrQCJazY8/records/sheet-uk.xlsx"},
],
"ocrMode": "auto", # OCR лише для сторінок без текстового шару
"ocrLanguages": ["ukr"], # тільки мови, які справді є у скані
"includeTables": True,
"chunkSize": 800, # символів у фрагменті, 0 - без фрагментів
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["fileName"], item["ocrPages"], "сторінок OCR")
print(item["markdown"])
Обидва файли-приклади публічні, тож код можна запустити як є. Свої файли - за посиланням або зі сховища Apify.
Справжній результат
Скан на одну сторінку (scan-uk.pdf, без текстового шару - 1 сторінка OCR):
Звіт про постачання
Склад у Львові отримав 1240 палет будівельних матеріалів протягом
третього кварталу. Терміни доставки скоротилися на дванадцять відсотків після запровадження
нового графіка.
| Товар | Кількість | Ціна |
| --- | --- | --- |
| Цемент | 420 | 96,50 |
| Арматура | 180 | 412,00 |
Текст правильний до літери, а таблиця з лініями знову справжня таблиця - і в Markdown, і як рядки JSON
[["Товар", "Кількість", "Ціна"], ["Цемент", "420", "96,50"], ["Арматура", "180", "412,00"]]. 6 листопада той самий
скан давав один плаский рядок: | Товар | Кількість | Ціна | Цемент | 420 | 96,50 | Арматура | 180 | 412,00.
Той самий зміст у файлі Excel (sheet-uk.xlsx, 0,2 с) - тут структура точна:
## Data
| Товар | Кількість | Ціна |
| --- | --- | --- |
| Цемент | 420 | 96,50 |
| Арматура | 180 | 412,00 |
| Total | 600 | 1,234.50 |
Значення клітинок зберігаються як записані: 96,50 лишається 96,50.
Одне важливе налаштування - мови OCR
6 листопада з "ocrLanguages": ["ukr", "eng"] слово «Арматура» повернулося як Apmatypa - OCR обрав схожі
латинські літери. Тепер таке слово повертається кирилицею, якщо воно є в українському словнику Tesseract, а латинське
написання не є англійським словом, тож Excel, API чи copy лишаються як є. Запуск 7 листопада з
["ukr", "eng"] дав «Арматура» правильно. Та все одно вказуйте лише ті мови, що справді є на сторінці: кожна зайва
мова - ще один спосіб для OCR помилитися.
Ціна
Оплата за сторінки: $1 за 1000 текстових сторінок і $4 за 1000 сторінок OCR (оплата Apify за подіями; OCR - лише для сторінок, яким він потрібен). Документ, який не вдалося завантажити чи прочитати, не оплачується. Два файли вище коштують частку цента.
Обмеження - чесно
- Таблиці у сканах повертаються таблицями, якщо мають лінії сітки і скан чистий. Таблиця без ліній або сітка, загублена в шумному скані 200 dpi, і далі виходить текстом. Якщо є оригінал Word чи Excel - конвертуйте його, там таблиці точні.
- Якість OCR залежить від скану. Чисті скани 300 dpi читаються добре; фото телефоном під кутом - гірше. Для фото є Image to Text OCR: сам повертає сторінки й дає впевненість для кожного слова.
- Рукописний текст не підтримується.
Для ШІ-агентів
Інструмент доступний через MCP-сервер Apify - його може викликати Claude, Cursor чи інший клієнт MCP:
https://mcp.apify.com?tools=ai_admin/document-to-markdown. Локальний MCP-сервер з усіма нашими інструментами -
у репозиторії на GitHub.