На 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*(?=Проф|Люб|Авт|Дубл|Многоголос|Двухголос|Одноголос)",
|
r"\s*(?:\+|;|/)\s*(?=Проф|Люб|Авт|Дубл|Многоголос|Двухголос|Одноголос)",
|
||||||
re.I)
|
re.I)
|
||||||
|
|
||||||
|
# строка, начинающаяся со слова типа озвучки (продолжение списка под «Перевод:»)
|
||||||
|
RE_TYPE_START = re.compile(
|
||||||
|
r"^\s*(?:Проф|Люб|Авт|Дубл|Многоголос|Двухголос|Одноголос)", re.I)
|
||||||
|
|
||||||
SELECTORS = ("div.post_body", "div[id^=post-text-]", ".postbody", "#tabs")
|
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):
|
if j >= len(lines):
|
||||||
break
|
break
|
||||||
body, i = lines[j].strip(), j + 1
|
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:
|
else:
|
||||||
i += 1
|
i += 1
|
||||||
continue
|
continue
|
||||||
|
|||||||
@@ -102,6 +102,19 @@ segs = extract_segments("Перевод:\nПрофессиональный (ду
|
|||||||
check("значение на следующей строке",
|
check("значение на следующей строке",
|
||||||
segs == ["Профессиональный (дублированный) Невафильм"], f"got {segs}")
|
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("Перевод: Профессиональный (двухголосый закадровый) + Любительский (одноголосый закадровый)")
|
segs = extract_segments("Перевод: Профессиональный (двухголосый закадровый) + Любительский (одноголосый закадровый)")
|
||||||
check("разделитель +", len(segs) == 2, f"got {segs}")
|
check("разделитель +", len(segs) == 2, f"got {segs}")
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user