Анализ английского перевода Евгения Онегина

Author

Egor Voronchikhin

Published

December 20, 2025

Аннотация

В данной работе анализируется английский перевод романа в стихах “Евгений Онегин” [1], выполненный Henry Spalding

Загрузка

Загрузим нужные библиотеки

library(tibble)
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ purrr     1.1.0
✔ forcats   1.0.0     ✔ readr     2.1.5
✔ ggplot2   4.0.0     ✔ stringr   1.5.1
✔ lubridate 1.9.4     ✔ tidyr     1.3.1
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(tidytext)
library(wordcloud)
Loading required package: RColorBrewer
library(RColorBrewer)
library(udpipe)
Warning: package 'udpipe' was built under R version 4.5.2

Скачиваем текст из gutenberg

download.file("https://www.gutenberg.org/files/23997/23997-0.txt", "onegin.txt")

Загружаем текст, превратим в тиббл

onegin_text <- readLines("onegin.txt", encoding = "UTF-8")
onegin_tbl <- tibble(line = 1:length(onegin_text), text = onegin_text)

Выделение оригинального текста перевода

В начале текста много дополнительной информации, выделим сам текст Евгения Онегина

За начало для точности примем французский разговор из первого эпиграфа, за конец - строчку ‘The End’

actual_beginning_text <- "Pétri de vanité"
actual_ending_text <- "The End"

start_idx <- which(str_detect(onegin_tbl$text, actual_beginning_text))[1]
end_idx <- which(str_detect(onegin_tbl$text, actual_ending_text))[1] - 1
onegin_text_clean <- onegin_tbl |>
  slice(start_idx:end_idx)

Анализ частотных слов

Получим слова, очистим их от стоп-слов. В стандартном списке стоп-слов нет устаревших английских выражений, которые часто встречаются в тексте данного перевода, поэтому добавим вручную составленный список таких слов

onegin_words <- onegin_text_clean |> unnest_tokens(word, text)
old_stopwords <- c(
  "ye", "hath", "tis", "thou", "hast", "doth", "thy", 
  "thee", "thou", "thy", "thine", "ye", "hast", "hath", "dost", "doth",
  "shalt", "art", "wert", "wilt", "aught", "naught", "ere", "o’er",
  "tis", "'tis", "alack", "alas", "oft"
)
extended_stopwords <- c(stop_words$word, old_stopwords)

word_counts <- onegin_words |>
  filter(!word %in% extended_stopwords) |>
  count(word, sort = TRUE)

Посмотрим на топ-10 популярных

head(word_counts, 10)
# A tibble: 10 × 2
   word         n
   <chr>    <int>
 1 note       112
 2 tattiana    96
 3 love        87
 4 time        72
 5 heart       62
 6 eugene      60
 7 onéguine    54
 8 life        52
 9 day         47
10 friends     47

Видим ‘note’ - это обозначение примечаний. Список выглядит реалистично, но мало о чем говорит, поэтому составим облако слов:

pal <- RColorBrewer::brewer.pal(8, "Dark2")
wordcloud(words = word_counts$word, freq = word_counts$n, max.words = 50, colors = pal)

За исключением служебных слов note (“примечание”) и canto (“глава”) заметны имена главных героев - Татьяны, Евгения, Ольги, Ленского, также слова, связанные со временем событий (day, days, night, time, winter) - вспомним одно из примечаний, в оригинале звучащее как

Смеем уверить, что в нашем романе время расчислено по календарю.

Заметны также слова, связанные с любовными отношениями (love, heart, dear).

Посмотрим теперь на имена собственные. Для этого проведем разметку частей речи с помощью udpipe.

Разметка частей речи

Скачаем модель

eng_model <- udpipe_download_model(language = "english")
Downloading udpipe model from https://raw.githubusercontent.com/jwijffels/udpipe.models.ud.2.5/master/inst/udpipe-ud-2.5-191206/english-ewt-ud-2.5-191206.udpipe to /Users/ekvoron/Programming/R/HSE/Text Analysis/onegin_project/english-ewt-ud-2.5-191206.udpipe
 - This model has been trained on version 2.5 of data from https://universaldependencies.org
 - The model is distributed under the CC-BY-SA-NC license: https://creativecommons.org/licenses/by-nc-sa/4.0
 - Visit https://github.com/jwijffels/udpipe.models.ud.2.5 for model license details.
 - For a list of all models and their licenses (most models you can download with this package have either a CC-BY-SA or a CC-BY-SA-NC license) read the documentation at ?udpipe_download_model. For building your own models: visit the documentation by typing vignette('udpipe-train', package = 'udpipe')
Downloading finished, model stored at '/Users/ekvoron/Programming/R/HSE/Text Analysis/onegin_project/english-ewt-ud-2.5-191206.udpipe'

Загрузим модель

eng_model <- udpipe_load_model("english-ewt-ud-2.5-191206.udpipe")

Проведем аннотацию

onegin_ann <- udpipe_annotate(eng_model, onegin_text_clean$text,
                             trace = TRUE)
onegin_ann_tbl <- onegin_ann |> as_tibble()

Анализ частотных имен собственных

Посчитаем частотность лемм имен собственных. К ним относятся и названия разделов, обозначенные римскими цифрами, поэтому уберем их с помощью регулярного выражения.

onegin_propn_tbl <- onegin_ann_tbl |>
  filter(upos == "PROPN")
onegin_propn_lemmas <- onegin_propn_tbl |>
  filter(!grepl("^[IVXLCDM]+$", lemma, ignore.case = TRUE))
propn_counts <- onegin_propn_lemmas |>
  count(lemma, sort = TRUE)
head(propn_counts, 20)
# A tibble: 20 × 2
   lemma          n
   <chr>      <int>
 1 Tattiana      91
 2 Eugene        54
 3 Olga          34
 4 Lenski        30
 5 nor           28
 6 Onéguine      26
 7 God           21
 8 Tania         21
 9 Pushkin       17
10 Alas          16
11 Russia        15
12 Canto         14
13 Moscow        14
14 Neva          11
15 Petersburg    11
16 Zaretski      10
17 Napoleon       9
18 Byron          8
19 St.            8
20 Winter         8

Тут сразу видны имена главных героев - Татьяны (включая уменьшительно-ласкательную версию Таня), Евгения, Ольги, Ленского, а так же имя самого Пушкина (оно часто встречается в примечаниях). Также присутствует некоторое кол-во ошибок лемматизации. Посмотрим на облако слов.

wordcloud(words = propn_counts$lemma, freq = propn_counts$n, max.words = 50, colors = pal)

Тут заметны еще и географические названия мест, где происходят действия поэмы - Петербург, Москва, Россия. Кроме того, встречается Mikhailovskoe (село Михайловское), как указание на место, где были написаны некоторые главы.

Обратим внимание, что имя Ленского (Vladimir) едва заметно, в то время как имя Онегина (Eugene) - топ-2 по частотности. Я не проводил анализ оригинала произведения, но насколько я помню, в нем эта закономерность тоже была.

В заключение построим barplot для сравнения частотности упоминания имен (не персонажей - мы не ставили соответсвие имен и фамилий)

top_propn_counts <- propn_counts |>
  arrange(desc(n)) |>
  slice_head(n=4)
ggplot(top_propn_counts, aes(x = lemma, y = n, fill=lemma)) +
  geom_bar(stat = "identity") +
  scale_fill_viridis_d(option = "D") +
  labs(title = "Топ-4 упоминаемых имени", x = "Имя", y = "Кол-во упоминаний")

References

1.
Пушкин А. С. Евгеній онѣгинъ. 1825.