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")Построение стилометрической консенсусной сети
Суть работы
Работа посвящена стилометрическому анализу текстов 11 авторов, писавших в середине XX века, в том числе М. Шолохова, А. Платонова и Н. Островского. С помощью вычисления манхэттенского расстояния строится консенсусная сеть с использованием 100 предикторов.
Код
Результаты вызуализации
Комментарии
- Все представленные тексты А. Платонова расположены близко друг к другу, что говорит об их очевидной стилистической близости.
- Два романа М. Булгакова образуют отдельный кластер. Несмотря на разницу в жанрах и времени написания, авторский «отпечаток» в обоих текстах сохранился. Произведения Н. Островского, Вс. Иванова и А. Серафимовича, также группируются в кластеры.
- «Донские рассказы» и три тома «Тихого Дона» имеют явное стилистическое сходство, однако четвертый том выделяется на фоне этой группы текстов и тяготеет больше к «Поднятой целине» и «Они сражались за Родину». Несмотря на то что стилистически эти тексты различаются, вероятность того, что написаны они одним человеков, высока, поскольку предполагаемый автор всех этих произведений — М. Шолохов.
- Тексты Ф. Крюкова, А. Фадеева, Д. Фурманова Л. Леонова, В. Севского находятся в зоне некоторой неопределенности. Они похожи между собой (авторы писали на схожие темы по, вероятно, схожему литературному стандарту), но четкой кластеризации в этом месте нет.