diff --git a/src/html_extract.py b/src/html_extract.py index 44f10c5..7f2212a 100644 --- a/src/html_extract.py +++ b/src/html_extract.py @@ -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 diff --git a/tests/run_tests.py b/tests/run_tests.py index 9ae3d43..84231f9 100644 --- a/tests/run_tests.py +++ b/tests/run_tests.py @@ -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}")