Сеть совместной встречаемости существительных в тексте Цезаря

Автор

Богданович Артем Александрович

Дата публикации

8 марта 2026 г.

1 Загрузка библиотек

library(udpipe)
library(dplyr)
library(igraph)
library(ggraph)
library(tidyverse)
library(ggrepel)

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 Заключение

Полученная сеть показывает, какие существительные чаще всего встречаются вместе в тексте. Узлы графа представляют леммы, а связи отражают частоту их совместного употребления.