Прочел
с начала
буквы он,
выходит:
«Куафер Симон».
С конца прочел
знаток наук, —
«Номис» выходит
«рефаук».
Этот отрывок из стихотворения Владимира Маяковского "История Власа, лентяя и лоботряса" хорошо иллюстрирует, как можно в поэтическом тексте использовать палиндромы. В этой статье я покажу, как с помощью Python можно найти эти палиндромы — слова и фразы, которые читаются одинаково в обе стороны. С помощью этого анализа будет видно, как и зачем поэт использовал такие конструкции.
В реальном исследовании нужно было бы взять полный корпус стихов Маяковского, но для моего исследования подойдёт одна поэма. Маяковский написал "Хорошо" в 1927 году по заказу Управления ленинградских академических театров, которое готовило юбилейный спектакль к десятилетию Октябрьской революции. Первоначально поэма называлась "Октябрь", окончательное название было дано автором уже после завершения произведения.
Идейный смысл поэмы понятен, он заключается в возвышении социалистического отечества, в восхвалении героического подвига советского народа и поэтизации коммунизма. А вот какими художественными приемами воспользовался Маяковский, это интересно установить с помощью Python.
Создам функцию, которая будет проверять, является ли строка палиндромом. Но в начале очищу текст от знаков препинания и удостоверюсь, что буквы кирилиcтические.
def is_palindrome(s):
s_clean = re.sub(r'\s+', '', s.lower())
return s_clean == s_clean[::-1]
В моем коде s_clean == s_clean[::-1]`: сравнивает очищенную строку с её обратной версией.
Теперь найду слова, которые являются палиндромами. Поиск буду производить среди слов длиннее 1 буквы.
def find_palindromic_words(text):
words = re.findall(r'[а-яё]+', text.lower())
palindromic_words = set()
for word in words:
if len(word) > 1 and is_palindrome(word):
palindromic_words.add(word)
return palindromic_words
if text.strip():
palindromic_words = find_palindromic_words(text)
Аналогично найду палиндромные фразы (последовательности слов). Для этого переберу фразы длиной от 2 до 5 букв, извлеку срез и объединю в множество.
def find_palindromic_phrases(text, max_phrase_length=5):
words = re.findall(r'[а-яё]+', text.lower())
palindromic_phrases = set()
for length in range(2, max_phrase_length + 1):
for i in range(len(words) - length + 1):
phrase_words = words[i:i + length]
phrase_joined = ' '.join(phrase_words)
if is_palindrome(phrase_joined):
palindromic_phrases.add(phrase_joined)
return palindromic_phrases
if text.strip():
palindromic_phrases = find_palindromic_phrases(text, max_phrase_length=5)
Найдены палиндромы – "поверхностные", то есть просто слова, перевернутые назад: иди, или, как, топот, мадам, шиш, хах, тит, тят, ото, тот, тут, ее, еле, еще.
Код нашел еще и повторяющиеся фразы, которые только формально являются палиндромами, но при этом не являются словами: и и, у у, у у у, же ж, а на.
Палиндромы у Маяковского выступают как средства усложнения текста поэмы "Хорошо". Благодаря этим приемам содержание поэмы становится богаче и труднее для восприятия. Этим автор подчеркивает многоплановость и многогранность событий революции и следует традициям авангардной комбинаторной поэзии. Мы видим здесь Маяковского как поэта-новатора и экспериментатора, который снимает табу и борется с затертыми метафорами и при этом может с иронией относится к самому себе.
В такие ночи,
в такие дни,
в часы
такой поры
на улицах
разве что
одни
поэты
и воры́.
Python позволяет автоматизировать поиск поверхностных палиндромов в тексте. Это может быть полезно для поэтического анализа, например, для выявления ритмических узоров, фонетических повторов или семантических акцентов, которые автор мог вложить в симметричные конструкции. В творчестве Маяковского, где ритм и интонация играют ключевую роль, даже такие простые метрики, как поиск палиндромов, могут стать отправной точкой для более глубокого исследования поэтической формы и содержания.
Комментарии (2)

Diacut
11.12.2025 09:19Вам статьи этой серии следовало называть как-то иначе.
s/Python/regular expressions/Как-то так.
afanasyev-av
Так, а какие палиндромы нашли? И какой в них сакральный смысл?