На rutracker дорожки бывают перечислены по одной на строку под «Перевод:» без значения; правила брали только первую строку и теряли остальные (t=6919056: 1 из 4, t=6927571: 1 из 7). Теперь берутся подряд идущие строки, начинающиеся со слова типа озвучки. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
3c42d2d4e2
commit
e185c73714
2 files changed
+22
No files matched your search
@@ -47,6 +47,10 @@ RE_SEP = re.compile(
|
||||
r"\s*(?:\+|;|/)\s*(?=Проф|Люб|Авт|Дубл|Многоголос|Двухголос|Одноголос)",
|
||||
re.I)
|
||||
|
||||
# строка, начинающаяся со слова типа озвучки (продолжение списка под «Перевод:»)
|
||||
RE_TYPE_START = re.compile(
|
||||
r"^\s*(?:Проф|Люб|Авт|Дубл|Многоголос|Двухголос|Одноголос)", re.I)
|
||||
|
||||
SELECTORS = ("div.post_body", "div[id^=post-text-]", ".postbody", "#tabs")
|
||||
|
||||
|
||||
@@ -122,6 +126,11 @@ def extract_segments(text: str) -> list[str]:
|
||||
if j >= len(lines):
|
||||
break
|
||||
body, i = lines[j].strip(), j + 1
|
||||
# rutracker: «Перевод:» и под ним по строке на дорожку — берём
|
||||
# подряд идущие строки, начинающиеся со слова типа
|
||||
while i < len(lines) and RE_TYPE_START.match(lines[i]):
|
||||
body += " ; " + lines[i].strip()
|
||||
i += 1
|
||||
else:
|
||||
i += 1
|
||||
continue
|
||||
|
||||
@@ -102,6 +102,19 @@ segs = extract_segments("Перевод:\nПрофессиональный (ду
|
||||
check("значение на следующей строке",
|
||||
segs == ["Профессиональный (дублированный) Невафильм"], f"got {segs}")
|
||||
|
||||
segs = extract_segments(
|
||||
"Перевод: \n"
|
||||
"Профессиональный (дублированный) | Cinema Tone Production\n"
|
||||
"Профессиональный (псевдодублированный) | HDRezka Studio\n"
|
||||
"Профессиональный (многоголосый закадровый) | HDRezka Studio\n"
|
||||
"Профессиональный (многоголосый закадровый) | TVShows\n"
|
||||
"\nОригинальная аудиодорожка: Английская\n")
|
||||
check("список строк под «Перевод:» (rt 6919056)", segs == [
|
||||
"Профессиональный (дублированный) | Cinema Tone Production",
|
||||
"Профессиональный (псевдодублированный) | HDRezka Studio",
|
||||
"Профессиональный (многоголосый закадровый) | HDRezka Studio",
|
||||
"Профессиональный (многоголосый закадровый) | TVShows"], f"got {segs}")
|
||||
|
||||
segs = extract_segments("Перевод: Профессиональный (двухголосый закадровый) + Любительский (одноголосый закадровый)")
|
||||
check("разделитель +", len(segs) == 2, f"got {segs}")
|
||||
|
||||
|
||||
Reference in new issue
Block a user