diff --git a/eval/tenant_panel/bank.py b/eval/tenant_panel/bank.py index 2d2c8ed6..1bc687bd 100644 --- a/eval/tenant_panel/bank.py +++ b/eval/tenant_panel/bank.py @@ -228,20 +228,47 @@ def _rx(dst: str) -> str: у всех, и ни один относительный вывод эксп-22 не двигается. Числа в отчёте пере-сняты. `(?= 4: - parts.append(w[:-2] + r"\w*") - elif len(raw) == 3: - parts.append(w[:-1] + r"\w*") - else: - parts.append(w) + drop = 2 if len(raw) >= 4 else 1 if len(raw) == 3 else 0 + drop = max(0, min(drop, len(raw) - ms)) if ms else drop + parts.append(w[:-drop] + r"\w*" if drop else (w + r"\w*" if ms else w)) return r"(? dict[str, tuple[str, str]]: + return MANUAL_BY_PAIR.get(pair().key, {}) + + +def _drop() -> set[str]: + return DROP_BY_PAIR.get(pair().key, set()) + + MANUAL: dict[str, tuple[str, str]] = {} # Выброшено из банка: это общеязыковая лексика, а не термины книги. Канон на них сделал бы # метрику покрытия замером словарного совпадения, а не терминологической дисциплины. @@ -268,14 +295,14 @@ def cmd_canon() -> None: got[src] = dst terms = {} for src, dst in got.items(): - if src in DROP: + if src in _drop(): continue - if src in MANUAL: - dst, why = MANUAL[src] + if src in _manual(): + dst, why = _manual()[src] else: why = "" terms[src] = dict(dst=dst, rx=_rx(dst), manual=bool(why), why=why) - for src, (dst, why) in MANUAL.items(): + for src, (dst, why) in _manual().items(): terms.setdefault(src, dict(dst=dst, rx=_rx(dst), manual=True, why=why)) # ⚠ Пишем в банк ПАРЫ. Безусловная запись в zh-путь затирала бы китайский банк при сборке # английского, и оба прогона переписывали бы друг друга. @@ -285,15 +312,17 @@ def cmd_canon() -> None: out_file.write_text(json.dumps( dict(book=M.BOOK["title"] if P.key == "zh-ru" else P.key, signed=False, note="ручной канон сессии, НЕ подпись владельца (образец D39.47)", - model=TERM_MODEL, dropped=sorted(DROP), terms=terms), + model=TERM_MODEL, dropped=sorted(_drop()), terms=terms), ensure_ascii=False, indent=1), encoding="utf-8") print(f"банк собран: {len(terms)} терминов · ручных правок {sum(1 for v in terms.values() if v['manual'])}" - f" · выброшено {len(DROP)}") + f" · выброшено {len(_drop())}") cmd_show() def cmd_show() -> None: - b = PR.bank() + # ⚠ Банк ПАРЫ, а не умолчание: после сборки английского банка показывался китайский. + P = pair() + b = PR.bank(None if P.key == "zh-ru" else P.bank_file) if not b: print("банка нет") return