AndriyVK Tools

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 - лише для сторінок, яким він потрібен). Документ, який не вдалося завантажити чи прочитати, не оплачується. Два файли вище коштують частку цента.

Обмеження - чесно

Для ШІ-агентів

Інструмент доступний через MCP-сервер Apify - його може викликати Claude, Cursor чи інший клієнт MCP: https://mcp.apify.com?tools=ai_admin/document-to-markdown. Локальний MCP-сервер з усіма нашими інструментами - у репозиторії на GitHub.