Студии из кодек-строк: codec_line_rows, доразметка, аудит дорожек
tools/audit_tracks.py и reports/tracks_audit.md — аудит всех дорожек техданных по data/raw с планом. Пункт 1 плана: harvest_core.codec_line_rows добавляет студии из строк «Аудио 2: AC3 … (MVO, LostFilm)», «Аудио Rus: … | TVShows» (studio_source=codec), которых нет среди строк релиза; тот же шаг в tools/relabel_studios.py (повторный запуск ничего не добавляет). labels.csv: +6 428 строк в 2 862 релизах (kinozal 3 444, nnm 1 609, rutracker 1 375), со студией 29 331 -> 35 759. tests/e2e_segmenter.py: модель через E2E_MODEL. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
1 parent
63878f7874
commit
e3af778068
10 files changed
+7937
-29
No files matched your search
@@ -4,7 +4,8 @@
|
||||
страницам, которых сегментатор не видел при обучении (is_test_release).
|
||||
Текст kinozal — из data/raw/kinozal/*.json (как у сервиса), см. segmenter.page_text.
|
||||
На трекер берётся не больше E2E_MAX страниц (по умолчанию 400, детерминированно);
|
||||
train-страницы считаются только с флагом --train-pages.
|
||||
train-страницы считаются только с флагом --train-pages. Основная модель — E2E_MODEL
|
||||
(по умолчанию models/best).
|
||||
Запуск: .venv/Scripts/python tests/e2e_segmenter.py [каталог_сегментатора] [--train-pages]
|
||||
"""
|
||||
|
||||
@@ -25,6 +26,7 @@ from src.segmenter import is_test_release, page_text # noqa: E402
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
MAX_PER_SOURCE = int(os.environ.get("E2E_MAX", "400"))
|
||||
MODEL_DIR = os.environ.get("E2E_MODEL", "models/best")
|
||||
|
||||
|
||||
def run(predictor, rows, mode: str, test_only: bool) -> dict:
|
||||
@@ -61,8 +63,8 @@ def main() -> None:
|
||||
rows = json.loads((ROOT / "data" / "processed" / "dataset.json").read_text(encoding="utf-8"))
|
||||
args = [a for a in sys.argv[1:] if not a.startswith("--")]
|
||||
seg_dir = args[0] if args else "models/segmenter"
|
||||
predictor = DubPredictor(segmenter_dir=seg_dir)
|
||||
print(f"сегментатор: {seg_dir}")
|
||||
predictor = DubPredictor(MODEL_DIR, segmenter_dir=seg_dir)
|
||||
print(f"модель: {MODEL_DIR}; сегментатор: {seg_dir}")
|
||||
if predictor.segmenter is None:
|
||||
sys.exit("нет models/segmenter: python -m src.segmenter --train")
|
||||
blocks = [(True, "тестовые страницы (не виделись сегментатору)")]
|
||||
|
||||
@@ -944,6 +944,33 @@ check("kinozal: студии из заголовка, строка «Аудио
|
||||
check("kinozal: студия, уже названная на странице, из заголовка не дублируется",
|
||||
_hc2.kz_title_rows({"id": "kz-1", "h1": "X / Y / 2023 / ПМ (LostFilm)"}, "",
|
||||
[{"studio": "LostFilm", "raw": "Перевод: … LostFilm"}]) == [])
|
||||
import re as _re # noqa: E402
|
||||
_known = _re.compile(r"(?i)(?<![\w])(LostFilm|TVShows|HDrezka Studio|HDrezka|Дубляжная|1\+1)(?![\w])")
|
||||
_kzrel = [{"source": "kinozal", "studio": "(не указана)", "raw": "Перевод: Профессиональный (многоголосый закадровый)",
|
||||
"translation_type": "проф. многоголосый"}]
|
||||
_cr = _hc2.codec_line_rows({"id": "kz-2"}, "\n".join([
|
||||
"Аудио 1: AC3, 6 ch, 448 Кбит/с - Русский дубляж (Мосфильм-Мастер) - лицензия",
|
||||
"Аудио Rus: AC3, 48,0 kHz, 6 ch, 384 Кбит/сек | TVShows",
|
||||
"Аудио 3: AC3, 2 ch, 192 Kbps - Украинский (DVO, ТК \"1+1\")",
|
||||
"Аудио 4: AC3, 2/0 (L,R) ch, 192 kbps, Delay 0 mSec Русский (MVO, LostFilm)",
|
||||
"Аудио 5: AC3, 6 ch, 448 kbps - Английский (Original)",
|
||||
"Аудио: Русский (AC3, 6 ch, 384 Кбит/с) Дубляжная, английский (AC3, 6 ch)",
|
||||
]), _kzrel, known=_known)
|
||||
check("кодек-строки: студия, тип из строки или единственный тип релиза, язык",
|
||||
[(r["studio"], r["translation_type"], r["lang"], r["studio_source"]) for r in _cr]
|
||||
== [("Мосфильм-Мастер", "проф. дубляж", "RUS", "codec"), ("TVShows", "проф. многоголосый", "RUS", "codec"),
|
||||
("1+1", "проф. двухголосый", "UKR", "codec"), ("LostFilm", "проф. многоголосый", "RUS", "codec")],
|
||||
str([(r["studio"], r["translation_type"]) for r in _cr]))
|
||||
check("кодек-строки: вход — сегмент без префикса «Аудио N:», вся строка — в audio_raw",
|
||||
_cr[0]["raw"].startswith("AC3, 6 ch") and _cr[0]["audio_raw"].startswith("Аудио 1:"))
|
||||
check("кодек-строки: студия, уже размеченная, не дублируется (в т.ч. «А. Гаврилов» = «Андрей Гаврилов»)",
|
||||
_hc2.codec_line_rows({"id": "x"}, "Аудио 2: AC3, 2 ch, 192 Kbps - Русский (AVO, А. Гаврилов)",
|
||||
[{"studio": "Андрей Гаврилов", "translation_type": "авт. одноголосый"}], known=_known) == [])
|
||||
check("кодек-строки: при нескольких типах релиза тип строки без тег-слова — «неизвестно»",
|
||||
[r["translation_type"] for r in _hc2.codec_line_rows(
|
||||
{"id": "x"}, "Аудио Rus: AC3, 2 ch, 192 Кбит/сек | HDrezka Studio",
|
||||
[{"studio": "", "translation_type": "проф. дубляж"}, {"studio": "", "translation_type": "авт. одноголосый"}],
|
||||
known=_known)] == ["неизвестно"])
|
||||
_tt = _hc2.translation_type
|
||||
check("тип: любительский дубляж — отдельный класс", _tt("Любительский (дублированный) Red Head Sound")[0] == "люб. дубляж")
|
||||
check("тип: псевдодубляж -> люб. дубляж", _tt("Любительский (псевдодублированный)")[0] == "люб. дубляж")
|
||||
|
||||
Reference in new issue
Block a user