Перевод PDF с английского на русский нейросетью: текст, таблицы, формулы
Рабочий пайплайн перевода PDF: достаём текст, режем на части, переводим с глоссарием и собираем результат. Считаем, сколько стоит перевод 100 страниц.
5 мин · · автоматизация · разработка
Загрузить PDF в чат и попросить «переведи» работает, пока документ короткий. Статья на 40 страниц или руководство на 300 упирается в длину ответа, теряет таблицы и по-разному переводит один и тот же термин. Нейросеть для перевода PDF с английского на русский даёт предсказуемый результат, если разбить работу на этапы: достать текст, переводить частями с общим глоссарием и собрать результат. Ниже — такой пайплайн на Python и расчёт цены для 100 страниц.
Шаг 0. Определите тип PDF
От этого зависит способ извлечения:
- PDF с текстовым слоем (скачан из журнала, собран из Word): текст можно вытащить программно. Проверка — выделить мышью фразу в просмотрщике.
- Скан или фотографии страниц: текстового слоя нет, нужно либо распознавание, либо отправка страниц в модель как картинок.
- Смешанный: часть страниц текстовая, часть — сканы. Разделяйте по страницам.
Переводите только те документы, на которые у вас есть право: чужие книги и закрытые материалы переводить для распространения нельзя.
Шаг 1. Извлечение текста
Для текстовых PDF подойдёт библиотека pypdf:
pip install pypdf openaifrom pypdf import PdfReader
reader = PdfReader("paper.pdf")
pages = [(page.extract_text() or "").strip() for page in reader.pages]
empty = [i + 1 for i, text in enumerate(pages) if len(text) < 50]
print(f"Страниц: {len(pages)}, почти пустых: {empty}")Страницы почти без текста — кандидаты на режим «картинка» (шаг 4). Колонки, сноски и таблицы после извлечения могут перемешаться: посмотрите две-три страницы глазами, прежде чем запускать всё.
Шаг 2. Деление на части
Модель надёжнее переводит куски среднего размера, чем весь документ за раз. Простое правило: набирайте страницы, пока не достигнете примерно 6 000 символов, и не режьте посреди страницы.
def make_chunks(pages, limit=6000):
chunks, current = [], ""
for text in pages:
if current and len(current) + len(text) > limit:
chunks.append(current)
current = ""
current += text + "\n\n"
if current.strip():
chunks.append(current)
return chunks
chunks = make_chunks(pages)Если у документа есть главы, лучше резать по ним: смысловой контекст сохраняется.
Шаг 3. Перевод с глоссарием
Главная причина разнобоя в терминах — модель не знает, как вы переводили их в предыдущих частях. Решение — глоссарий в начале каждого запроса. Составьте его сами для 20–50 ключевых терминов или попросите модель выписать термины из первой главы и поправьте вручную.
from openai import OpenAI
client = OpenAI(base_url="https://api.zukko.pro/v1", api_key="fetch_ваш_ключ")
GLOSSARY = """attention head — голова внимания
fine-tuning — дообучение
loss function — функция потерь"""
SYSTEM = f"""Ты технический переводчик с английского на русский.
Правила:
1. Переводи точно, без пересказа и сокращений. Ничего не добавляй от себя.
2. Формулы, LaTeX, код, имена переменных, ссылки и числа оставляй без изменений.
3. Таблицы возвращай в формате Markdown, сохраняя порядок строк и столбцов.
4. Сохраняй заголовки и списки как Markdown.Замечания по коду:
- Параметр
temperatureподдерживают не все модели. Если запрос вернул ошибку на этом параметре, уберите его. - Для сотен кусков запускайте перевод параллельно с повторами: пример в статье асинхронные запросы в Python.
- Сохраняйте промежуточные результаты на диск, чтобы после сбоя не переводить всё заново.
- Параметры запроса и работа с Python описаны в руководстве по SDK.
Шаг 4. Сканы и сложная вёрстка: страницы как картинки
Если текстового слоя нет или вёрстка сломала порядок строк, отправляйте страницы в модель картинками. Страницу можно отрисовать библиотекой PyMuPDF (pip install pymupdf, в старых версиях импорт называется fitz):
import base64
import pymupdf
doc = pymupdf.open("scan.pdf")
def translate_page_image(page_index: int, model: str = "claude-sonnet-5-5") -> str:
png = doc[page_index].get_pixmap(dpi=150).tobytes("png")
b64 = base64.b64encode(png).decode()
response = client.chat.completions.create(
model=model,
messages=[
{"role": "system", "content": SYSTEM},
{"role": "user", "content": [
{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{b64}"}},
{"type": "text", "text": "Переведи текст на странице на русский по правилам выше."},
]},
],
)
return response.choices[0].message.contentКартинки на вход принимают не все модели. По таблице на 18 октября 2026 это, например, claude-sonnet-5-5 и gpt-6.1-sol, а deepseek-v4.1-flash и glm-5.3-flash изображения не принимают. Подробный разбор распознавания — в статье как распознать PDF нейросетью. Страница-картинка стоит дороже страницы-текста: сколько именно токенов уходит на одну страницу, проверьте по полю usage на одном запросе.
Таблицы и формулы
- Таблицы. Просите Markdown-таблицу и сверяйте число строк и столбцов с оригиналом. Для больших таблиц надёжнее переводить только ячейки с текстом, а числа не трогать.
- Формулы. Если формулы извлеклись как мусор, это проблема извлечения, а не перевода. В режиме картинок модель обычно сохраняет вид формулы, но проверьте выборочно.
- Подписи к рисункам и ссылки на литературу. Номера и ссылки не переводите: это прописано в правилах.
Проверка качества
Нейросетевой перевод ошибается в терминологии и числах, поэтому:
- Сравните количество чисел в оригинале и переводе кусок за куском: расхождение — повод открыть место.
- Выборочно прочитайте 5–10% страниц, особенно таблицы и определения.
- Просканируйте итог на английские слова, которые должны были быть переведены.
- Для важных документов отдайте перевод специалисту: нейросеть не заменяет заверенный перевод.
Сколько стоит перевод 100 страниц
Допущения для примера: 100 страниц по 500 слов, около 650 токенов на страницу в оригинале, то есть 65 000 токенов текста. К нему добавляются инструкция и глоссарий в каждом из примерно 50 запросов (по 500 токенов): 25 000 токенов. Итого вход 90 000 токенов. Русский перевод занимает больше токенов, чем английский оригинал (см. почему русский текст считается иначе); примем выход 130 000 токенов. Точные числа зависят от документа, это оценка.
Цены Zukko на 18 октября 2026, $ за 1M токенов:
| Модель | Вход | Выход | Расчёт | Итого |
|---|---|---|---|---|
claude-sonnet-5-5 | 0.4 | 2 | 90 000 × 0.4 / 1M + 130 000 × 2 / 1M = $0.036 + $0.26 | около $0.30 |
gpt-6.1-sol | 0.27 | 1.32 | 90 000 × 0.27 / 1M + 130 000 × 1.32 / 1M = $0.0243 + $0.1716 | около $0.20 |
deepseek-v4.1-flash | 0.013 | 0.038 | 90 000 × 0.013 / 1M + 130 000 × 0.038 / 1M = $0.00117 + $0.00494 | около $0.006 |
Из таблицы видно, что цена перевода определяется в основном выходом. Выбирая модель, ориентируйтесь на цену, индекс силы и свой тест: переведите одну главу на двух моделях и сравните. Актуальные цены — GET https://api.zukko.pro/v1/models.
Частые вопросы
Можно ли переводить PDF без программирования?
Для небольших файлов можно использовать чат в браузере: вставляйте текст по частям вместе с глоссарием. Для больших документов скрипт удобнее.
Сохранится ли оформление PDF?
Нет. Вы получите Markdown с заголовками, списками и таблицами. Вёрстку исходного PDF придётся воссоздавать отдельно, например конвертацией Markdown в нужный формат.
Какую модель выбрать?
Начните с недорогой и сравните результат с более сильной на одной главе. Для скан-страниц нужна модель с поддержкой изображений.
Как начать?
Создайте ключ в кабинете Zukko, запустите скрипт на 3–5 страницах и посмотрите расход на странице «Использование».
zukko
Платите в 25×
меньше
за Claude Code & ChatGPT
Один ключ fetch_* и base URL api.zukko.pro — в Cursor, Claude Code, Codex и любом SDK.
Похожие статьи
- Перевод субтитров нейросетью: SRT без сбитых таймкодовГлавный риск при переводе SRT нейросетью — сломанная структура файла. Показываем схему, где таймкоды не попадают к модели, и скрипт на Python с проверкой.
- Редактирование текстов нейросетью: корректура, стиль и сокращениеРазные виды редактуры требуют разных промптов. Показываем формулировки для корректуры, стиля и сокращения, как получать правки с объяснением и не терять авторский голос.
- Нейросеть для написания скриптов: Bash, PowerShell и PythonМодель быстро пишет скрипты для рутины, но запускать их вслепую нельзя. Показываем, как ставить задачу, требовать безопасный режим dry-run и проверять результат до запуска.
- Dify в Docker: установка, первичная настройка и подключение моделейСтавим Dify через Docker Compose, создаём администратора и подключаем модели Claude, GPT и DeepSeek по одному ключу. Отдельно — что делать, если контейнеры не стартуют.