library(tidyverse)
library(tidytext)
library(purrr)
library(stylo)
library(ggraph)
library(igraph)Консенсусная сеть для стилеметрического анализа «Тихого Дона» и современной ему прозы
В данном гайде рассматривается способ построения консенсусной сети для стилеметрического анализа «Тихого Дона» и современной ему прозы (на основе данных, подготовленных Б. В. Ореховым).
Загрузка библиотек
Получение узлов и ребер для будущей консенсусной сети
С помощью stylo и network = True получим две .csv таблицы с информаией об узлах и ребрах сети, которую мы планируем построить.
Количеству соседей присваиваем значение 2. Это в дальнейшем сделает наш график более читаемым.
Ниже вывод дендрограммы намеренно скрыт через параметры блока кода.
tbl <- read.table("table_with_frequencies.txt", sep = " ", header = TRUE) %>%
t()
stylo(network = TRUE,
frequencies = tbl,
network.type="undirected",
network.tables="both",
linked.neighbors=2,
edge.weights="linear",
gui=FALSE)Переходим к мясу
Теперь мы можем приступить к самому интересному - начинаем строить нашу сеть. В этом блоке нам нужно соеденить таблицы с узлами и ребрами, добавить имя автора как атрибут, нормализовать веса.
my_csv <- list.files(pattern = "csv")
tbl_edges <- read_csv(my_csv[1])
tbl_nodes <- read_csv(my_csv[2])
net_data <- tbl_edges |>
left_join(tbl_nodes,
by = join_by(Source == Id)) |>
select(-Source) |>
rename(Source = Label) |>
relocate(Source, .before = Target) |>
left_join(tbl_nodes,
by = join_by(Target == Id)) |>
select(-Target) |>
rename(Target = Label) |>
relocate(Target, .after = Source) |>
select(Source, Target, Weight)
tbl_graph <- graph_from_data_frame(net_data, directed = FALSE)
weights <- (E(tbl_graph)$Weight - min(E(tbl_graph)$Weight)) / (max(E(tbl_graph)$Weight) - min(E(tbl_graph)$Weight))
E(tbl_graph)$Weight <- weights
labels = str_remove(V(tbl_graph)$name, "_.+$")
V(tbl_graph)$label <- labelsА теперь десерт
Наконец мы можем строить сеть!
ggraph(tbl_graph, layout = "stress") +
geom_edge_link(aes(alpha = Weight),
linewidth = 1.1,
show.legend = T,
color = "grey70") +
geom_node_point(aes(color = label),
size = 3, shape = 21,
fill = "white",
show.legend = T) +
geom_node_label(aes(label = name, color = label),
size = 3,
vjust = -1, cex = 2,
show.legend = F) +
labs(x = NULL, y = NULL) +
labs(title = "Консенсусная сеть",
subtitle = "Связи между текстами на основе частотности слов",
color = "Author",
alpha = "Вес связи") +
theme_void() +
theme(
plot.title = element_text(hjust = 0.5, size = 30, face = "bold"),
plot.subtitle = element_text(hjust = 0.5, size = 20, color = "gray30"),
aspect.ratio = 0.5,
text = element_text(size = 12),
legend.position = "bottom",
legend.direction = "horizontal",
legend.box = "vertical",
legend.margin = margin(10, 10, 10, 10),
legend.text = element_text(size = 14),
legend.title = element_text(size = 16)
)Выделю изменения в параметрах ggraph, которые я внесла:
Параметру
layoutприсвоено значениеstress. В документации указано, что он быстрее, качественне и стабильнее алгоритмаКамада-Каваи.Добавлены заголовок и подзаголовок, увеличен текст лейблов, добавлена легенда для лучшей читаемости графика.
Так же еще на этапе построения таблиц с узлами и ребрами я указала
linked.neighbors = 2, что тоже повлияло на красоту и читаемость сети.
Анализ графика и размышления
В построенной консенсусной сети все элементы друг с другом связаны, нет изолированных подсетей. Большинство связей находятся в диапазоне 0.25–0.75. Это говорит о умеренном сходстве между большинством текстов и, в свою очередь, усложняет проведение четких границ между авторскими стилями.
Мы видим достаточно обособленный «Шолоховский кластер», состоящий из произведений «Судьба человека», «Они сражались за родину» и обеих частей «Поднятой целины». «Тихий дон-4» расположен к этим произведениям ближе остальных томов, вероятно, из-за более позднего времени написания (тома 1–3 написаны с 1925 по 1932 год, том 4 написан в 1932 году, а опубликован аж в 1937–1940 годах).
От этого кластера отделились «Донские рассказы» (предположительно из-за того, что это более раняя проза Шолохова), однако их разделил подкластер «Тихого дона» (1-3), что дает нам возможность сделать вывод о стилистической близости всех этих произведений и высокой вероятности одного авторства.
Рядом с подсетью «Тихого дона» также расположились подсети Островского и Иванова, но связи с ними находятся в диапазоне 0.25–0.50и соединяются только с «Тихим доном-2», поэтому сделать заключение о не-Шолоховском авторстве всего произведения мы не можем. Вероятно, второй том по какому-то другому параметру близок к «Как закалялась сталь», «Голубым пескам» и «Бронепоезду 14-69».
Таким образом, на основе анализа построенной консенсусной сети мы можем сделать вывод, что «Тихий дон» наш! То есть Шолохова.