library(udpipe)
library(dplyr)
library(igraph)
library(ggraph)
library(tidyverse)
library(ggrepel)Сеть совместной встречаемости существительных в тексте Цезаря
1 Загрузка библиотек
2 Загрузка данных
В качестве корпуса используется текст Юлия Цезаря.
data_caesar <- udpipe_read_conllu(
"https://github.com/locusclassicus/text_analysis_2024/raw/main/files/bg_latinpipe.conllu"
)3 Подготовка данных
Отберём только существительные.
nouns <- data_caesar %>%
filter(upos == "NOUN")4 Расчёт совместной встречаемости
noun_links <- cooccurrence(
nouns,
term = "lemma",
group = c("doc_id", "sentence_id")
) %>%
as_tibble() %>%
filter(cooc >= 35)5 Построение графа
Создадим сеть совместной встречаемости.
network_graph <- graph_from_data_frame(noun_links, directed = FALSE)6 Визуализация сети
ggraph(network_graph, layout = "kk") +
geom_edge_link(
aes(width = cooc, alpha = cooc),
color = "#6C7A89"
) +
geom_node_point(
aes(size = degree(network_graph)),
color = "#2E86C1",
alpha = 0.75
) +
geom_node_text(
aes(label = name),
repel = TRUE,
size = 4.5,
fontface = "bold"
) +
scale_edge_width(range = c(0.3, 2.2), name = "Частота") +
scale_size(range = c(3, 9), name = "Degree") +
labs(
title = "Сеть совместной встречаемости латинских существительных"
) +
theme_void() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
legend.position = "right"
)7 Заключение
Полученная сеть показывает, какие существительные чаще всего встречаются вместе в тексте. Узлы графа представляют леммы, а связи отражают частоту их совместного употребления.