Проверка языка результата перевода: совпадения числа абзацев недостаточно; недостающие зависимости стороннего репозитория
This commit is contained in:
+23
-1
@@ -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__":
|
||||
|
||||
Reference in New Issue
Block a user