Построение стилометрической консенсусной сети

Author

Владимир Кретов

Суть работы

Работа посвящена стилометрическому анализу текстов 11 авторов, писавших в середине XX века, в том числе М. Шолохова, А. Платонова и Н. Островского. С помощью вычисления манхэттенского расстояния строится консенсусная сеть с использованием 100 предикторов.

Код

library(ape)
library(phangorn)
library(tidyverse)
library(RColorBrewer)
library(phangorn)

# Считываем таблицу
df <- read.table(
  "table_with_frequencies.txt",
  header = TRUE,
  sep = "",
  quote = "\"",
  stringsAsFactors = FALSE,
  check.names = FALSE
)

# Теперь строки — тексты, столбцы — слова.
df_t <- t(df)

# Отбираем предикторы.
n_predictors <- min(100, ncol(df_t))
df_subset <- df_t[, 1:n_predictors]

# Делаем из таблицы матрицу для выполнения математических операций.
df_matr <- as.matrix(df_subset)

# Принимаем данные, считаем манхэттенское расстояние, строим дерево.
get_nj_tree <- function(x) {
  (method = "manhattan")
  d <- dist(x, method = "manhattan")
  nj(d)
}

set.seed(14)

# Строим одно базовое дерево.
tree_base <- get_nj_tree(df_subset)

# Генерируем 100 деревьев.
bs_analysis <- boot.phylo(phy = tree_base, 
                          x = df_subset, 
                          FUN = get_nj_tree, 
                          B = 100, 
                          trees = TRUE, 
                          quiet = TRUE)

# Извлекаем список деревьев.
tree_list <- bs_analysis$trees

# Строим сеть.
net <- consensusNet(tree_list, prob = 0.3, rooted = FALSE)

# Извлекаем имена авторов.
labels <- net$tip.label
authors <- gsub("_.*", "", labels)

# Генерируем палитру.
unique_authors <- unique(authors)
my_colors <- c(
  "navy",
  "darkmagenta",
  "darkgreen",
  "black"
)
colors <- colorRampPalette(my_colors)(length(unique_authors))
texts_colors <- colors[as.numeric(factor(authors))]
tip_colors <- colors[match(authors, unique_authors)]

# Создаем график.
par(bg = "white", mar = c(4, 1, 5, 5))
plot(net, 
     type = "2D",
     show.edge.label = FALSE,
     show.tip.label = TRUE,
     tip.color = tip_colors,
     edge.color = "gray20",
     edge.width = 1.5,
     cex = 0.7,
     label.offset = 0.5,
     font = 2)

title(main = "Стилометрическая консенсусная сеть\n(100 MFW, Manhattan Dist, Prob 0.3)", 
      cex.main = 1.5, col.main = "gray20")

Результаты вызуализации

Комментарии

  1. Все представленные тексты А. Платонова расположены близко друг к другу, что говорит об их очевидной стилистической близости.
  2. Два романа М. Булгакова образуют отдельный кластер. Несмотря на разницу в жанрах и времени написания, авторский «отпечаток» в обоих текстах сохранился. Произведения Н. Островского, Вс. Иванова и А. Серафимовича, также группируются в кластеры.
  3. «Донские рассказы» и три тома «Тихого Дона» имеют явное стилистическое сходство, однако четвертый том выделяется на фоне этой группы текстов и тяготеет больше к «Поднятой целине» и «Они сражались за Родину». Несмотря на то что стилистически эти тексты различаются, вероятность того, что написаны они одним человеков, высока, поскольку предполагаемый автор всех этих произведений — М. Шолохов.
  4. Тексты Ф. Крюкова, А. Фадеева, Д. Фурманова Л. Леонова, В. Севского находятся в зоне некоторой неопределенности. Они похожи между собой (авторы писали на схожие темы по, вероятно, схожему литературному стандарту), но четкой кластеризации в этом месте нет.