From ecaba7e8bbcd3088b9d3570abcc8141eb16bd273 Mon Sep 17 00:00:00 2001 From: vvzvlad Date: Thu, 17 Apr 2025 19:43:10 +0300 Subject: [PATCH] new truncate_title logic --- post_parser.py | 9 ++++++++- tests/test_postparser_gen_title.py | 9 +++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/post_parser.py b/post_parser.py index 2f6157f..4e920f1 100644 --- a/post_parser.py +++ b/post_parser.py @@ -142,7 +142,14 @@ class PostParser: return "Unknown author" def truncate_title(self, first_line: str) -> str: - """Truncate the title according to the rules from _generate_title.""" + """Truncate the title """ + # Step 1: Cut at the first period followed by a space, if present + period_match = re.search(r'\.(?=\s)', first_line) + if period_match: + first_line = first_line[:period_match.start()] + first_line = first_line.rstrip() # Remove trailing spaces after cut + + # Step 2: Apply the old logic cut_at = 37 max_extra_chars = 15 limit_index = cut_at + max_extra_chars # 52 diff --git a/tests/test_postparser_gen_title.py b/tests/test_postparser_gen_title.py index bfa8f1f..762d43e 100644 --- a/tests/test_postparser_gen_title.py +++ b/tests/test_postparser_gen_title.py @@ -377,7 +377,6 @@ class TestPostParserGenerateTitle(unittest.TestCase): title = self.parser._generate_title(message) self.assertEqual(title, expected_output, f"Ошибка при обработке '{input_text}': получено '{title}', ожидалось '{expected_output}'") - # --- New tests for text length logic --- def test_generate_title_media_with_short_caption(self): """Media title should be used if caption is short (< 10 chars).""" @@ -433,7 +432,13 @@ class TestPostParserGenerateTitle(unittest.TestCase): message = self._create_mock_message(web_page=web_page_mock, text="Short txt") self.assertEqual(self.parser._generate_title(message), "Short txt") -# --- End new tests --- + def test_generate_title_truncate_at_first_period(self): + """Title should be truncated at the first period if present.""" + text = "⚡️ OpenAI сегодня представила o3/o4-mini. кажется, они сделали очень сильную ставку на \"агентскость\"." + message = self._create_mock_message(text=text) + expected_title = "⚡️ OpenAI сегодня представила o3/o4-mini" + self.assertEqual(self.parser._generate_title(message), expected_title) + if __name__ == '__main__': unittest.main()