Доразметка студий: nnm «Перевод: … (Студия)», kinozal из заголовка раздачи
* harvest_core.nnm_part_studio: студия из части строки «Перевод:» nnm («Дублированный (Невафильм)», «… - Jaskier»); раньше такие строки шли с «(не указана)», и модель училась не извлекать студию даже из «Дублированный (Пифагор)». tech-строки со студиями больше не выбрасываются, если на странице нет строк «Аудио N» с именами. * harvest_core.kz_title_rows: kinozal, студии из заголовка «ПМ (LostFilm, HDrezka Studio)», которых нет на странице; вход — сегмент как у сервиса, строка «Аудио Rus: … | Студия» — в audio_raw. * tools/relabel_studios.py — то же по готовому labels.csv без пересборки страниц; применено к data/labels.csv: со студией 22 061 -> 29 331 строк (nnm +3 051, kinozal +4 219 строк в 3 007 релизах); prepare_data: 39 418 строк, спан студии 24 004 -> 31 214. * e2e: эталон как aggregate — «тип без студии» убирается, если у типа есть студия. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
f91f6cb48e
commit
83bab13893
6 files changed
+7488
-3056
No files matched your search
@@ -41,6 +41,10 @@ def run(predictor, rows, mode: str, test_only: bool) -> dict:
|
||||
if len(per_src[src]) >= MAX_PER_SOURCE:
|
||||
continue
|
||||
gold = {(r["translation_type"], r["studio"] or None) for r in by_rel[rid]}
|
||||
# как aggregate: «тип без студии» не отдельная дорожка, если у типа есть студия
|
||||
# (kinozal: «Перевод: многоголосый» + студии из заголовка)
|
||||
named = {t for t, s in gold if s}
|
||||
gold = {(t, s) for t, s in gold if s or t not in named}
|
||||
res = predict_release(predictor, text=page_text(page), segmenter=mode)
|
||||
pred = {(t["translation_type"], t["studio"]) for t in res["tracks"]}
|
||||
tp = len(gold & pred)
|
||||
|
||||
@@ -926,6 +926,24 @@ check("prepare_data: у редкого языка метка пустая", [r["
|
||||
|
||||
print("== метки: тип, раскладка, строки из «Аудио», веса классов ==")
|
||||
import harvest_core as _hc2 # noqa: E402
|
||||
_ps = _hc2.nnm_part_studio
|
||||
check("nnm «Перевод:»: студия из скобок и после тире",
|
||||
_ps("Дублированный (Невафильм)") == "Невафильм" and _ps("Многоголосый профессиональный - Jaskier") == "Jaskier"
|
||||
and _ps("Авторский (Живов") == "Юрий Живов")
|
||||
check("nnm «Перевод:»: тип, кратность, лицензия, соседнее поле — не студия",
|
||||
_ps("Двуголосый профессиональный") == "" and _ps("Одноголосый x2") == ""
|
||||
and _ps("Дублированный (Лицензия BD CEE)") == ""
|
||||
and _ps("одноголосый закадровый Дата мировой премьеры: 4 февраля 1983 (USA)") == "")
|
||||
_kzr = _hc2.kz_title_rows(
|
||||
{"id": "kz-1", "h1": "Что, если...? / What If...? / 2023 / ПМ (LostFilm, HDrezka Studio), СТ / WEB-DL"},
|
||||
"Аудио Rus: AC3, 48 kHz, 2 ch, 384 Кбит/сек | LostFilm",
|
||||
[{"studio": "(не указана)", "raw": "Перевод: Профессиональный многоголосый", "translation_type": "проф. многоголосый"}])
|
||||
check("kinozal: студии из заголовка, строка «Аудио» — в audio_raw",
|
||||
[(r["translation_type"], r["studio"], r["studio_source"], bool(r["audio_raw"])) for r in _kzr]
|
||||
== [("проф. многоголосый", "LostFilm", "title", True), ("проф. многоголосый", "HDrezka", "title", False)])
|
||||
check("kinozal: студия, уже названная на странице, из заголовка не дублируется",
|
||||
_hc2.kz_title_rows({"id": "kz-1", "h1": "X / Y / 2023 / ПМ (LostFilm)"}, "",
|
||||
[{"studio": "LostFilm", "raw": "Перевод: … LostFilm"}]) == [])
|
||||
_tt = _hc2.translation_type
|
||||
check("тип: любительский дубляж — отдельный класс", _tt("Любительский (дублированный) Red Head Sound")[0] == "люб. дубляж")
|
||||
check("тип: псевдодубляж -> люб. дубляж", _tt("Любительский (псевдодублированный)")[0] == "люб. дубляж")
|
||||
|
||||
Reference in new issue
Block a user