textmachine/eval/editor_harness/judge_direct.py

57 lines
2.8 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""Пакеты для слепого суда БЕЙК-ОФФА: перевод с нуля против редактуры дешёвого черновика.
⚠ Отличие от `judge_packets.py`, и оно принципиальное: здесь черновик в пакет НЕ кладётся.
В сравнении «full-regen против диффа» черновик был нужен как база отсчёта. Здесь он бы РАЗВАЛИЛ
СЛЕПОТУ: full-regen сохраняет 65% слов черновика, и судья опознал бы отредактированную версию
за секунду. Судья видит только исходник, глоссарий и две готовые версии.
Раскладка А/Б чередуется по чётности окна, ключ пишется отдельно и судьям не отдаётся.
"""
from __future__ import annotations
import json
import sys
from pathlib import Path
REPO = Path("/home/ubuntu/projects/textmachine")
RAW = Path.home() / "books" / "gu-zhenren" / "editor-harness"
OUT = RAW / "judge-direct"
sys.path.insert(0, str(REPO / "eval" / "bank_arbitration"))
import editor_wire_probe as P # noqa: E402
from inject_probe import pick_windows # noqa: E402
def text_of(tag: str) -> str | None:
f = RAW / f"{tag}.json"
return json.loads(f.read_text(encoding="utf-8"))["content"] if f.exists() else None
def build(ms: str) -> int:
OUT.mkdir(parents=True, exist_ok=True)
key, n = {}, 0
for k, (_, src, terms) in enumerate(pick_windows()):
a_tag, b_tag = f"eh-{ms}-direct-w{k}", f"eh-{ms}-full-w{k}"
if k % 2:
a_tag, b_tag = b_tag, a_tag
ta, tb = text_of(a_tag), text_of(b_tag)
if not ta or not tb:
print(f" w{k}: пропуск")
continue
gloss = "\n".join(f"- {t} → «{P.TERMS[t][0]}»" for t in terms)
(OUT / f"packet-{ms}-w{k}.md").write_text(
f"# Материалы для оценки перевода, окно {k}\n\n"
f"## Исходный текст (китайский)\n\n{src}\n\n"
f"## Утверждённый глоссарий (канонические формы обязательны)\n\n{gloss}\n\n"
f"## Версия А\n\n{ta}\n\n## Версия Б\n\n{tb}\n", encoding="utf-8")
key[f"w{k}"] = {"А": a_tag, "Б": b_tag}
n += 1
(OUT / f"KEY-{ms}.json").write_text(json.dumps(key, ensure_ascii=False, indent=1),
encoding="utf-8")
print(f"{ms}: пакетов {n}")
return n
if __name__ == "__main__":
for ms in (sys.argv[1:] or ["dp", "gl", "gr", "lu"]):
build(ms)