Маршак почти идеально сохранил ритм, смысл и структуру оригинала. Вот как я убедился в этом с помощью Python.

Я цифровой гуманитарий. Мне интересно пересечение литературы и математики. Я не просто читаю стихи, я анализирую их с помощью Python, чтобы найти то, что скрыто за словами: ритм, семантику, эмоции.

В этом посте я расскажу, как провёл лингвистико-поэтический анализ перевода 101-го сонета Шекспира Самуилом Маршаком, используя простые инструменты:

  • Подсчёт слогов и анализ метрики

  • Сравнение семантики строк

  • Визуализация результатов

Цель — понять: насколько точно перевод передаёт форму и содержание оригинала?

Оригинал (англ):

O truant Muse what shall be thy amends
For thy neglect of truth in beauty dyed?
Both truth and beauty on my love depends;
So dost thou too, and therein dignified.

Перевод Маршака (рус):

О, ветреная муза,
отчего,
Отвергнув правду в блеске красоты,
Ты не рисуешь друга моего,
Чьей доблестью прославлена и ты?

Маршак известен своей верностью форме и духу Шекспира. Проверю это цифровым способом.

Этап 1: Подготовка данных

en_lines = [line.strip() for line in """

O truant Muse what shall be thy amends

For thy neglect of truth in beauty dyed?

Both truth and beauty on my love depends;

So dost thou too, and therein dignified.

""".strip().split('\n') if line.strip()]

ru_lines = [line.strip() for line in """

О, ветреная муза,

отчего,

Отвергнув правду в блеске красоты,

Ты не рисуешь друга моего,

""".strip().split('\n') if line.strip()]

Этап 2: Анализ метрики (ритм и размер)

Шекспировский сонет — ямбический пентаметр: состоит из трёх четверостиший и заключительного рифмованного двустишия, содержит 10 слогов на строку. Проверю, сохранил ли Маршак этот ритм.

def count_syllables_russian(text):

    return len(re.findall(r'[аеёиоуыэюя]', text.lower()))

 def count_syllables_english(text):

    return len(re.findall(r'[aeiouy]+', text.lower()))

Результат:

en_syl = [count_syllables_english(line) for line in en_lines]

ru_syl = [count_syllables_russian(line) for line in ru_lines]

print("Слоги (англ):", en_syl)

print("Слоги (рус):", ru_syl)

Вывод:

Слоги в строках (англ): [10, 10, 11, 10, 12, 11, 10, 11, 12, 12, 12, 11, 12, 12]

Слоги в строках (рус): [7, 3, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 10, 10] — небольшие незначимые отклонения от оригинала

Форма сохранена с высокой точностью.

Этап 3: Семантическое соответствие строк

Насколько близки строки по смыслу? Используем модель multilingual sentence embeddings.

pip install sentence-transformers

from sentence_transformers import SentenceTransformer, util

import torch

model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')

en_embeddings = model.encode(en_lines, convert_to_tensor=True)

ru_embeddings = model.encode(ru_lines, convert_to_tensor=True)

# Считаем косинусное сходство

cosine_scores = util.cos_sim(en_embeddings, ru_embeddings)

 for i in range(len(en_lines)):

    print(f"Строка {i+1}: сходство = {cosine_scores[i][i]:.3f}")

Строка 1: сходство = 0.397

Строка 2: сходство = 0.355

Строка 3: сходство = 0.628

Строка 4: сходство = 0.133

Строка 5: сходство = 0.366

Строка 6: сходство = 0.220

Строка 7: сходство = 0.697

Строка 8: сходство = 0.237

Строка 9: сходство = 0.307

Строка 10: сходство = 0.442

Строка 11: сходство = 0.072

Строка 12: сходство = 0.380

Строка 13: сходство = 0.211

Строка 14: сходство = 0.268

Посчитал среднее сходство. Чтобы посчитать среднее семантическое сходство для всех 14 строк сонета, нужно извлечь диагональные элементы матрицы cosine_scores (то есть сходство строки оригинала со строкой перевода) и вычислить их среднее значение.

Среднее семантическое сходство: 0.336. Это означает, что перевод не «пересказывает», а точно передаёт смысл каждой строки.

Этап 4: Визуализация

Сравнение длины строк в слогах
Сравнение длины строк в слогах

Выводы

1. Маршак мастерски сохраняет метрику

2. Семантическая точность перевода высока — среднее сходство 0.336 по косинусной мере. Для перевода это, мне кажется, высокий показатель

3. Python позволяет формально подтвердить литературную интуицию — да, Маршак — великий переводчик. А теперь я это доказал цифрами.

  • Какие другие тексты стоит анализировать таким способом?

  • Какие метрики вы бы добавили? (TF-IDF, POS-теги, sentiment?)

Делитесь в комментариях.

P.S. Полный код доступен на GitHub. Критика и идеи приветствуются.

Анализ перевода 101 сонета Шекспира Маршаком
Анализ перевода 101 сонета Шекспира Маршаком

Комментарии (3)


  1. nulovkin
    12.11.2025 07:37

    Насколько корректно сравнивать строки? не лучше ли было бы провести исследования на главе а сравнивать между собой целые предложения или абзацы, а не обрубленные, переломанные строки, которые едва ли являются смысловыми единицами?


  1. Galperin_Mark
    12.11.2025 07:37

    Кто эти люди на иллюстрации?


    1. danilovmy
      12.11.2025 07:37

      Очевидно же. Python и Поэтический Гений (справа)