library(stringr)
library(rvest)
library(tidyverse)
library(ggplot2)
library(tidytext)
library(tokenizers)
library(udpipe)
library(wordcloud)
library(RColorBrewer)
Цветовая палитра Иосифа Бродского
подзаголовок
“Я обожаю живопись. Мне больше других всю жизнь… дороже всех итальянцы; я думаю, Джованни Беллини и Пьеро делла Франческа. В двадцатом веке <…> французский художник Вюйяр(Vuillard). Боннар тоже, но Вюйяр гораздо больше”.
— Иосиф А. Бродский
Введение
Предпосылки
Историю цвета всегда интересно изучать в поэзии. Особенно, если автор намеренно использует определнный цвет только в определенных контекстах. Бродский очень редко делает что-то просто так. Приведенная выше цитата лишь одна из немногих, в которых можно увидеть трепетное отношение поэта к живописи. Для понимания того, насколько Бродский был погружен в данную область, привожу несколько предпосылок:
- отец Бродского занимался фотографией. У поэта сохранилось несколько черно-белых снимков
- отношения с Марианой Басмановой – дочери художника Павла Ивановича Басманова – наложили отпечаток на поэтическое восприятие. Сборник, посвященный девушке, содержит большую часть “цветовой гаммы”
- еще до эмиграции в 1972 г. Бродский был хорошо знаком с “левыми” художниками – мастерами авангарда
Однако, прежде чем перейти к результатам, обратимся к этапу подготовки данного мини-исследования.
Материал
Для данного исследования был аннотирован датасет, состоящий из “малых” стихотворений Бродского. “Большие” тексты (поэмы, пьесы, эссе) в данной работе не учтены.
- Количество текстов: 579
- Количество токенов (= слов, без учета пунктуации): 143,627
Использованные библиотеки
- stringr
- rvest
- tidyverse
- ggplot2
- tidytext
- tokenizers
- udpipe
- wordcloud
- RColorBrewer
Этапы работы
Собран датасет с данного сайта при помощи инструмента Selector gadget;
При помощи регулярных выражений были убраны значки переноса строки, а также двойные пробелы;
Полученные тексты аннотированы при помощи предустановленной модели
Найдены самые часто употребляемые глаголы и прилагательные. Предложена идея исследовать все упоминания цветов в выбранном корпусе текстов
Код
Далее представлены частично аннотированные части кода, который был написан для проведения этого мини-исследования
Этап №0. Загрузка библиотек
Этап №1. Сборка датасета
Текст представляет собой ссылки на все стихотоврения. Перейдя по ссылкам, мы попадаем к тексту. Таким образом, для начала нужно пройтись по первой странице и собрать: 1. Названия стихотоврений 2. Полные сслыки на стихотворения
<- "https://libverse.ru/brodskii/list.html"
url # из-за проблем с кодировкой, нужно добавить конкретный параментр encoding,
# чтобы тексты отображались на русском, а не на эльфийском
<- guess_encoding(url)
url_encoding #загружаем url в окружение. Даем системе его прочитать
<- read_html(url, encoding = "windows-1251")
html
# используя selector gadget, собираем только те элементы, которые нам нужны, то есть ссылки на стиховторения
<- html|>
toc html_elements("#verses a")
# создаем таблицу, вынимая из html нужное нам содержание
<- tibble(title = toc|>
libri html_text2(),
href = toc|>
html_attr("href")) |>
filter(!is.na(title))
# чтобы получить полноценную ссылку, которую мы можем вставить в поисковую строку,
# необходимо "приклеить" к href протокол доступа и доменное имя
<- libri |>
libri mutate(link = paste0("https://libverse.ru/brodskii/", href)) |>
select(-href)
#собираю полученные сслыки для след. этапа
<- libri |>
urls pull(link)
libri
Этап №2. Чистка текста стихотворений
После получения названий и ссылок на стихотворения необходимо добавить текст каждго них в таблицу. Для этого создается функция, проходящаяся по каждой ссылке (которые мы до этого “склеили” с протоколом и именем). Функция забираем на каждой странице текст (при помощи уже упомянутого selector gadget). Однако, тексты содержат служебные значки и двойные пробелы. Используем регулярные выражения, чтобы избавиться от шума.
#создаем функцию
<- function(url){
get_text read_html(url, encoding = "windows-1251")|>
html_element("pre")|>
html_text2()|>
#используем регулярные выражения
str_replace_all("\\\n", " ")|>
str_replace_all("\\\r", " ")|>
str_replace_all(" {2,}", " ")|>
#убираем двойные пробелы
trimws()
}
#при помощи map проходимся функцией по всем ссылкам, которые собрали на прошлом этапе
<- map(urls, get_text)
libri_text
#превращаем полученное в таблицу
<- libri_text |>
libri_text flatten_chr() |>
as_tibble()
#объединяем две таблицы
<- libri |>
brodsky bind_cols(libri_text)
#сохраняем полученный датасет
save(brodsky, file = "brodsky.Rdata")
brodsky
#save(brodsky, file = "brodsky.Rdata")
Этап №3. Аннотирование
После создания таблицы, текст внутри был аннотирован при помощи предустановленной модели syntagrus (была еще опробована модель taiga, обученная на русской поэзии. Однако данная модель возвращала большое количество ошибочных лемм.)
udpipe_download_model(language = "russian-syntagrus")
<- udpipe_load_model(file = "russian-syntagrus-ud-2.5-191206.udpipe")
syntagrus
<- udpipe_annotate(syntagrus, brodsky$value, doc_id = brodsky$title)
brodsky_annotate
<- as_tibble(brodsky_annotate)
brodsky_annotate_tbl
brodsky_annotate_tbl
Разведывательный анализ
Для начала было принято решение составить список самых частотных глаголов и прилагательных, поскольку не было идеи, с чего можно начать анализ. После составления частотных таблиц были созданы два облака слов. Параллельно было отмечено, что одними из самых частых прилагательных являются две категории цвета: “черный” и “белый”. И здесь было принято решение опираться на книгу Валентины Полухиной “Словарь цвета поэзии Иосифа Бродского” (Полухина 2017). Книга посвящена исследованию категории цвета в поэзии И. Бродского.
<- brodsky_annotate_tbl|>
brodsky_verb filter(upos == "VERB")|>
count(lemma, sort = TRUE)
<- brodsky_annotate_tbl|>
brodsky_adj filter(upos == "ADJ")|>
count(lemma, sort = TRUE)
#создаем два облака слов: с глаголами и прилагательными
<- RColorBrewer::brewer.pal(8, "Dark2")
pal wordcloud(brodsky_verb$lemma, brodsky_verb$n, colors = pal, max.words = 130)
wordcloud(brodsky_adj$lemma, brodsky_adj$n, colors = pal, max.words = 130)
Таблицы с самыми часто появляющимися в стихах Бродского глаголами и прилагательными
Облако слов для визуализации(обращем внимание на “черный” и “белый”):
Сбор информации о цветах
Выбраны несколько основных цветов и оттенков (“черный”, “белый”, “темный”, “светлый”, “красный”, “желтый”, “серый”, “зеленый”, “синий”). Остальные цвета имею около одного вхождения и в данной работе не учитываются. Посчитано количество каждого цвета (лемма) в аннотированном тексте.
Однако прежде чем перейти к результату, предположите, какие цвета (помимо черного и белого, которые мы уже видели) встречаются у Бродского чаще всего?
А теперь читайте дальше, чтобы подтвердить или опровергнуть свои предположения:3
<- brodsky_annotate_tbl|>
brodsky_colors filter(lemma %in% c("черный", "белый", "темный", "светлый", "красный", "желтый", "серый", "зеленый", "синий"))|>
count(lemma, sort = TRUE)
#график - иллюстрация таблицы с частотой цветов
<- ggplot(brodsky_colors, aes(x = n, y = reorder(lemma, n), fill = "blue")) +
g geom_bar(stat = "identity", show.legend = FALSE) +
labs(
title = "Распределение цветов у Бродского",
subtitle = "1961-1989",
y = NULL
+
) theme_bw()
g
На данном этапе мы получаем данные, которые не совпадают с уже упомянутой книги Валентины Полухиной. По ее данным распределение цветов у Бродского такое:
Цвет | % вхождений |
---|---|
Светлый | 62 |
Темный | 38 |
Белый | 22 |
Синий (голубой) | 22.5 |
Черный | 22.5 |
Красный | 9 |
Серый | 9 |
Зеленый | 8 |
Желтый | 8 |
Из-за чего происходит такое насовпадение? Все достаточно просто. Можно представить несколько гипотез:
- разное количество текстов в двух корпусах: у В. Полухиной 184 стихотворений, здесь же 579 (а цветовые обозначения точно неравномерно распределены по стихам)
- исследование Полухиной построено на английских переводах Бродского, поэтому распределение цветовых обозначений отличается
Однако скорее всего здесь имеют место быть оба предположения.
Самое “цветное” стихотворение
Попробуем определить, в каком тексте цветовые обозначение встречаются чаще всего.
<- brodsky_annotate_tbl|>
colors_in_poems select(doc_id, lemma)|>
filter(lemma %in% c("черный", "белый", "темный", "светлый", "красный", "желтый", "серый", "зеленый", "синий", "голубой"))|>
count(doc_id, sort = TRUE)
colors_in_poems
Получаем такие результаты. Однако теперь возникает вопрос, а не является ли первое стихотворение самый длинным.
Для ответа на вопрос выше нам нужно посчитать количество токенов в каждом стихотоворении(без учета пунктуации)
<- brodsky_annotate_tbl|>
count_tokens filter(upos != "PUNCT")|>
select(doc_id, token)|>
count(doc_id, sort = TRUE)
count_tokens
В таком случае нам необъходимо посчитать не количество цветов, а их долю в тексте одного стиха
<- count_tokens|>
final left_join(colors_in_poems)|>
mutate(perc = n*100/tokens)|>
arrange(-perc)
final
Таким образом, мы получаем результат - самое “цветное” стихотворение у Бродского - это текст под названием “Был черный небосвод белей тех ног…”. Не совсем подходит понятие “цветное”, но так как “черный” и “белый” мы установили как цвета, получилось, что получилось
По-настоящему цветное стихотворение
Все-таки давайте узнаем самый по-настоящему цветной текст. Для этого уберем из списка цветов “черный” и “белый”,“темный” и “светлый”, а также добавим несколько “цветных” цветов: оранжевый и розовый.
<- brodsky_annotate_tbl|>
count_tokens filter(upos != "PUNCT")|>
select(doc_id, token)|>
count(doc_id, sort = TRUE)|>
rename(tokens = n)
<- brodsky_annotate_tbl|>
colors_in_poems select(doc_id, lemma)|>
filter(lemma %in% c("красный", "желтый", "серый", "зеленый", "синий", "голубой", "оранжевый", "розовый"))|>
count(doc_id, sort = TRUE)
<- count_tokens|>
final left_join(colors_in_poems)|>
mutate(perc = n*100/tokens)|>
arrange(-perc)
final
Получаем результат, что самое цветное стихотворение – это “Остров Прочида”. Однако тут важно задать вопрос о том, что мы считаем “самым” цветным текстом. Ведь если посмотреть на вышеуказанное стихотворение, из цветного там только слова “синий” и “синева”(2 токена). Делает ли это его “цветнее” текста “Был черный небосвод белей тех ног…”, где токенов, обозначающих цвета гораздо больше(хоть и само стихотворение длиннее).
Выводы
Важно задать вопрос о том, что мы считаем “самым” цветным текстом. Ведь если посмотреть на вышеуказанное стихотворение, из цветного там только слова “синий” и “синева”(2 токена). Делает ли это его “цветнее” текста “Был черный небосвод белей тех ног…”, где токенов, обозначающих цвета гораздо больше(хоть и само стихотворение длиннее)? Ответом на данном этапе будет: “Каким образом конкретный исследователь будет понимать”цвет”, таким и будет результат”. Мы не придем к абсолютной истине, однако можем получить любопытную статистику и вступить в диалог с уже проведенными исследованиями.
Для прочитавший есть подарок: