Определение авторства романа Тихий Дон

Author

Гурьева Владлена

Начнем

Мы рады вас приветствовать, Ольга Валерьевна и София, единственные наши читатели! Спасибо! Сегодня мы будем строить консенснусное дерево, ведь нам необходимо определить (еще разок, для уверенности), действительно ли перу М. Шолохова принадлежит роман “Тихий Дон”. (Великанова and Орехов 2019)

Как это будет выглядеть в коде…

Для начала подгружаем нужные библиотеки:

library(tidyverse)
library(ape)
library(viridis)# пригодится красоту наводить

Прочитаем таблицу из файла:

data <- read.delim("table_with_frequencies.txt", sep = "")

Проведем некоторое преобразование, поменяем местами слова и авторов с текстами:

data <- t(data)

Считаем консенсус. Ищем устойчивые кластеры методом простого большинства:

get_tree <- function(df) {
  X <- df[ , sample(2500, replace = F, size = 100)]
  distmx <- dist(scale(X))
  tr <- as.phylo(hclust(distmx))
  tr
}

trees_result <- map(1:10, ~get_tree(data))

cons <- consensus(trees_result, p = 0.5, rooted = FALSE)

Выбираем палитру и назначаем авторам цвета:

pal <- viridis(n = 12)
cols <- tibble(author = str_remove(cons$tip.label, "_.+")) |> 
  mutate(color = case_when(author == "Островский"  ~ pal[1],
                           author == "Платонов" ~ pal[2],
                           author == "Севский"  ~ pal[3],
                           author == "Серафимович" ~ pal[4],
                           author == "Фадеев"  ~ pal[5],
                           author == "Фурманов" ~ pal[6],
                           author == "Шолохов" ~ pal[7],
                           author == "Dubia" ~ pal[8],
                           author == "Булгаков" ~ pal[9],
                           author == "Леонов" ~ pal[10],
                           author == "Крюков" ~ pal[11],
                           author == "Иванов" ~ pal[12]))
cols
# A tibble: 30 × 2
   author   color    
   <chr>    <chr>    
 1 Булгаков #51C56AFF
 2 Булгаков #51C56AFF
 3 Иванов   #FDE725FF
 4 Иванов   #FDE725FF
 5 Крюков   #C2DF23FF
 6 Крюков   #C2DF23FF
 7 Крюков   #C2DF23FF
 8 Крюков   #C2DF23FF
 9 Крюков   #C2DF23FF
10 Леонов   #85D54AFF
# ℹ 20 more rows

Визуализируем наше, как кажется, красивое консенснусное дерево:

par(mar = c(0,0,0,0))
plot.phylo(cons, 
           type = "unrooted", 
           use.edge.length = FALSE,
           edge.width = 1.5, 
           node.color = "grey",
           font = 3, 
           no.margin = TRUE, 
           direction = "rightwards", 
           plot = TRUE, 
           lab4ut = "a",
           node.depth = 1, 
           tip.color = cols$color)

nodelabels(text=sprintf("%.2f", cons$node.label),
           node=1:cons$Nnode+Ntip(cons),
           frame="circle",
           bg = "skyblue",
           cex = 0.5, 
)

Небольшой вывод

4 книги Тихого Дона действительно находятся очень близко к произведениям М. Шолохова, особенно к Донским рассказам. Это значит, что результат подтверждается с высокой долей вероятности. Автор Тихого Дона - М. Шолохов.

References

Великанова, Наталья Павловна, and Борис Валерьевич Орехов. 2019. “Цифровая Текстология: Атрибуция Текста На Примере Романа МА Шолохова" Тихий Дон".” Мир Шолохова, no. 1: 70–82.