Студии из кодек-строк: 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 <noreply@anthropic.com>
This commit is contained in:
DenozordecandClaude Opus 5.5 committed 2026-11-02 20:30:52 +07:00
1 parent 63878f7874
commit e3af778068
10 files changed
+7937 -29

No files matched your search

+27
View File
@@ -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] == "люб. дубляж")