Проверка языка результата перевода: совпадения числа абзацев недостаточно; недостающие зависимости стороннего репозитория

This commit is contained in:
Илья Поляков
2026-08-03 10:31:35 +03:00
parent 9c7658df5e
commit b92a0a39c0
4 changed files with 86 additions and 9 deletions
+27 -3
View File
@@ -111,10 +111,22 @@ ebook-convert "Название.epub" "Название.azw3"
```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
# их requirements.txt неполон: openai и pyyaml импортируются, но не перечислены
~/.venvs/pdf2epub/bin/pip install openai pyyaml python-dotenv
umask 077
mkdir -p out/tr
cat > out/tr/.env <<'EOF'
USE_LOCAL_MODEL=false
DEEPSEEK_API_KEY=<ключ>
EOF
```
Без `pyyaml` каждый запрос падает внутри `_create_system_prompt` **до** обращения
к API, а сторонний скрипт молча подставляет `[UNTRANSLATED]` и рапортует
«API запросов: 0, ошибок: N». Ключ держать только в `.env` с правами `600`,
в командную строку и логи не выводить.
Сначала проверка, нужен ли перевод вообще (язык, объём; ничего не тратит):
```bash
@@ -130,7 +142,19 @@ export DEEPSEEK_API_KEY=... # либо .env в рабочем каталог
--repo ~/Projects/book_translator --workdir out/tr --workers 12
```
Прерванный перевод возобновляется: сторонний скрипт помнит готовые главы.
Прерванный перевод возобновляется: сторонний скрипт помнит готовые главы. Это
же свойство мешает при **неудачном** прогоне — упавшие главы он считает
готовыми, поэтому перед повторной попыткой:
```bash
rm -rf out/tr/progress out/tr/context out/tr/translations
```
После сборки скрипт сам проверяет язык результата и завершается с ошибкой,
если текст остался на языке оригинала или содержит `[UNTRANSLATED]` —
совпадения числа абзацев мало, при сбое API сторонний скрипт подставляет
оригинал. Файл, не прошедший проверку, упаковывать нельзя.
Дальше `out/book.ru.html` упаковывается тем же `ebook-convert` с
`--language=ru`.