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

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
+23 -1
View File
@@ -146,6 +146,24 @@ def rebuild(src, chapters, workdir, out):
return missing == 0
def verify_output(out, target):
"""Совпадение числа абзацев ещё не значит, что перевод состоялся: внешний
скрипт при ошибке API молча подставляет оригинал. Проверяем язык результата.
"""
text = re.sub("<[^>]+>", "", out.read_text(encoding="utf-8"))
lang, share = detect_language(text)
stub = text.count("[UNTRANSLATED]")
print("результат: %s (кириллица %.0f%%), заглушек [UNTRANSLATED]: %d"
% (lang, share * 100, stub))
if stub:
print("ВНИМАНИЕ: внешний переводчик вернул заглушки — проверь его логи и ключ API")
return False
if lang != target:
print("ВНИМАНИЕ: результат не на языке %s — перевода фактически не было" % target)
return False
return True
def main():
ap = argparse.ArgumentParser(description=__doc__)
ap.add_argument("source", type=Path, help="XHTML от pdf2html.py")
@@ -184,7 +202,11 @@ def main():
extracted = (args.workdir / "extracted").resolve()
write_input(chapters, extracted)
run_translator(args.repo.resolve(), args.workdir.resolve(), extracted, args.workers)
rebuild(args.source, chapters, args.workdir, args.output)
ok = rebuild(args.source, chapters, args.workdir, args.output)
if not verify_output(args.output, args.target):
sys.exit("перевод не состоялся — упаковывать этот файл нельзя")
if not ok:
print("часть блоков осталась на языке оригинала — см. счётчик выше")
if __name__ == "__main__":