Refactor title generation to remove punctuation
This commit is contained in:
+4
-2
@@ -163,7 +163,7 @@ class PostParser:
|
||||
|
||||
# Process line breaks - take only the first line
|
||||
first_line = clean_text.split('\n', 1)[0]
|
||||
first_line = re.sub(r'\.$', '', first_line) #Remove dot
|
||||
first_line = re.sub(r'[.,;:]+$', '', first_line) #Remove dot
|
||||
first_line = first_line.strip()
|
||||
|
||||
# Handle uppercase text - convert to title case if the text is all uppercase
|
||||
@@ -180,7 +180,9 @@ class PostParser:
|
||||
extended_cut = i
|
||||
if first_line[i] == ' ':
|
||||
break
|
||||
return f"{first_line[:extended_cut]}..."
|
||||
title = f"{first_line[:extended_cut]}"
|
||||
title = re.sub(r'[.,;:]+$', '', title)
|
||||
return f"{title}..."
|
||||
|
||||
return first_line
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@ class TestPostParserGenerateTitle(unittest.TestCase):
|
||||
|
||||
def test_generate_title_text_with_url_and_text(self):
|
||||
message = self._create_mock_message(text="Check out this link: https://example.com")
|
||||
self.assertEqual(self.parser._generate_title(message), "Check out this link:") # URL is stripped
|
||||
self.assertEqual(self.parser._generate_title(message), "Check out this link") # URL is stripped
|
||||
|
||||
def test_generate_title_text_only_url(self):
|
||||
message = self._create_mock_message(text="https://example.com")
|
||||
@@ -191,5 +191,81 @@ class TestPostParserGenerateTitle(unittest.TestCase):
|
||||
message = self._create_mock_message(web_page=web_page_mock) # Text is whitespace only
|
||||
self.assertEqual(self.parser._generate_title(message), "🔗 Web page title")
|
||||
|
||||
def test_generate_title_punctuation_removal(self):
|
||||
"""Test removing punctuation marks from the end of titles."""
|
||||
test_cases = {
|
||||
# Одиночные символы
|
||||
"Привет.": "Привет",
|
||||
"Привет,": "Привет",
|
||||
"Привет;": "Привет",
|
||||
"Привет:": "Привет",
|
||||
"Привет!": "Привет!",
|
||||
|
||||
# Комбинация символов
|
||||
"Привет...": "Привет",
|
||||
"Привет.,;:": "Привет",
|
||||
"Привет.!": "Привет.!",
|
||||
"Строка.....": "Строка",
|
||||
|
||||
# Символы не в конце не должны удаляться
|
||||
"При.вет": "При.вет",
|
||||
"При,вет": "При,вет",
|
||||
"При;вет": "При;вет",
|
||||
"При:вет": "При:вет",
|
||||
"При!вет": "При!вет",
|
||||
"При\"вет": "При\"вет",
|
||||
"При'вет": "При'вет",
|
||||
"Привет": "Привет",
|
||||
|
||||
# Строки с пробелами после пунктуации
|
||||
"Привет. ": "Привет",
|
||||
"Привет, ": "Привет",
|
||||
|
||||
# Языки
|
||||
"Привет на русском.": "Привет на русском",
|
||||
"Hello.": "Hello",
|
||||
"Hello,": "Hello",
|
||||
"Привіт українською.": "Привіт українською",
|
||||
"Hola en español.": "Hola en español",
|
||||
|
||||
# Цифры
|
||||
"Число 123.": "Число 123",
|
||||
|
||||
# Многострочный текст
|
||||
"Привет.\nКак дела?": "Привет",
|
||||
|
||||
# Сложные случаи с кавычками
|
||||
"Текст с \"кавычками внутри\".": "Текст с \"кавычками внутри\"",
|
||||
"Текст с 'одинарными' кавычками.": "Текст с 'одинарными' кавычками",
|
||||
"Текст с \"вложенными 'кавычками'\".": "Текст с \"вложенными 'кавычками'\"",
|
||||
"Цитата: \"Это цитата.\".": "Цитата: \"Это цитата.\"",
|
||||
|
||||
# Специальные случаи
|
||||
"Предложение с восклицанием!": "Предложение с восклицанием!",
|
||||
"Предложение с вопросом?": "Предложение с вопросом?",
|
||||
"Эллипсис...": "Эллипсис",
|
||||
|
||||
"Конец текста.,;:": "Конец текста",
|
||||
"Много точек....": "Много точек",
|
||||
"Разные знаки.,;": "Разные знаки",
|
||||
|
||||
# Реальные примеры
|
||||
"Анонс конференции:": "Анонс конференции",
|
||||
"Новый релиз v1.0!": "Новый релиз v1.0!",
|
||||
"Важная информация!!!": "Важная информация!!!",
|
||||
"Автор сказал: \"Это важно\".": "Автор сказал: \"Это важно\"",
|
||||
"Код программы: function() { return true; }": "Код программы: function() { return true...",
|
||||
|
||||
# Проверяем краевые случаи
|
||||
"Статья...": "Статья",
|
||||
"Вопросы и ответы.": "Вопросы и ответы",
|
||||
"Конец,": "Конец",
|
||||
}
|
||||
|
||||
for input_text, expected_output in test_cases.items():
|
||||
message = self._create_mock_message(text=input_text)
|
||||
title = self.parser._generate_title(message)
|
||||
self.assertEqual(title, expected_output, f"Ошибка при обработке '{input_text}': получено '{title}', ожидалось '{expected_output}'")
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user