Стадия перевода: мост к book_translator без модификации стороннего репозитория

This commit is contained in:
Илья Поляков
2026-08-03 07:59:12 +03:00
parent 0a98e7cf65
commit 9c7658df5e
4 changed files with 371 additions and 1 deletions
+50
View File
@@ -98,6 +98,56 @@ ebook-convert "Название.epub" "Название.azw3"
- `.epub` — через Send to Kindle (веб или почта), Amazon конвертирует на своей стороне;
- `.azw3` — по USB прямо в `documents/` на устройстве.
## Перевод (опционально)
Перевод делает сторонний проект
[`vetermanve/book_translator`](https://github.com/vetermanve/book_translator)
(DeepSeek или локальная Ollama). **Репозиторий не модифицируется** — он
вызывается через свой штатный CLI и форматы файлов. `scripts/translate.py` —
мост: раскладывает наш XHTML в его входной JSON, запускает
`03_translate_parallel.py --all`, собирает результат обратно.
Подготовка (один раз):
```bash
git clone https://github.com/vetermanve/book_translator.git ~/Projects/book_translator
~/.venvs/pdf2epub/bin/pip install openai python-dotenv # openai нет в их requirements.txt
export DEEPSEEK_API_KEY=... # либо .env в рабочем каталоге, либо USE_OLLAMA
```
Сначала проверка, нужен ли перевод вообще (язык, объём; ничего не тратит):
```bash
~/.venvs/pdf2epub/bin/python scripts/translate.py out/book.html out/book.ru.html \
--repo ~/Projects/book_translator --workdir out/tr --check-only
```
Если книга уже на целевом языке, скрипт откажется переводить (`--force`
переопределяет). Сам перевод:
```bash
~/.venvs/pdf2epub/bin/python scripts/translate.py out/book.html out/book.ru.html \
--repo ~/Projects/book_translator --workdir out/tr --workers 12
```
Прерванный перевод возобновляется: сторонний скрипт помнит готовые главы.
Дальше `out/book.ru.html` упаковывается тем же `ebook-convert` с
`--language=ru`.
Курсив и полужирный переживают внешний переводчик в виде маркеров
`⟦i⟧…⟦/i⟧`; на обратном пути баланс маркеров проверяется по каждому абзацу.
Картинки, заголовки и порядок блоков вообще не покидают наш скрипт — наружу
уходит только текст, сборка идёт по индексам. В отчёте после перевода:
«без перевода» — главы, вернувшиеся с другим числом абзацев (оставлен
оригинал), «разметка потеряна» — абзацы, где модель испортила маркеры и
курсив снят. Оба числа должны быть близки к нулю.
Самопроверка моста без сети и ключей:
```bash
cd scripts && python3 test_translate.py
```
## Проверка результата
```bash