Проект по анализу корпуса текстов

Исследование биографий епископов Русской Православной Церкви на основе методов анализа текстов

Авторы
принадлежность

Е.С. Молчан

Университет ИТМО

М.С. Николаев

Университет ИТМО

Е.А. Такташев

Университет ИТМО

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

1 ноября 2025 г.

1 Введение

Коротко о данных

Датасет включает в себя тексты биографий ныне здравствующих епископов Русской Православной Церкви 1. Данные собраны с помощью скрейпинга сайта, что незапрещено в robots.txt

1.1 Библиотеки

library(rvest)
library(tidyverse)
library(magrittr)
library(lubridate)
library(MASS)
library(stopwords)
library(udpipe)
library(tm)

2 Сбор и обработка данных

2.1 Извлечение списка епископов и ссылок на их биографии

url_address <- "https://drevo-info.ru/articles/12420.html"
1raw_strings <- url_address |>
  read_html() |>
  html_nodes(css = "li .existlink")

2names <- raw_strings |>
  html_text()

3links <- raw_strings |>
  html_attr("href")|>
  str_c("https://drevo-info.ru", ... = _)

4df <- data.frame(name = names, link = links, stringsAsFactors = F) |>
  distinct(name, .keep_all = T)
1
Извлекаем HTML-код страницы, находим все элементы списка li с классом .existlink
2
Получаем имёна епископов из найденных элементов
3
Получаем ссылки на персональные страницы епископов
4
Представляем данные в виде датафрема

2.2 Получение полного текста строк с датами

names_full <- url_address |> 
  read_html() |>
1  html_nodes(css = "#article li") |>
  html_text() |> 
  trimws()
1
Извлекаем текст внутри элементов списка li

2.2.1 Фильтрация строк с датами, которые относятся к найденным именам

cat("1-е имя:", names[1], "\n")
1-е имя: Кирилл (Гундяев) 
cat("1-я строка:", names_full[1], "\n")
1-я строка: Кирилл (Гундяев), патриарх Московский и всея Руси (14.03.1976) 
cat("Совпадение 1-го имени с именем в 1-й строке:", grepl(names[1], names_full[1], fixed = T), "\n")
Совпадение 1-го имени с именем в 1-й строке: TRUE 
cat("Совпадение 1-го имени с именем в 40-й строке:", grepl(names[1], names_full[40], fixed = T), "\n")
Совпадение 1-го имени с именем в 40-й строке: FALSE 
df$name_full <- df$name |> 
1  map(~ names_full[grepl(.x, names_full, fixed = TRUE)])
1
Находим все строки, содержащие имена

2.2.2 Извлечение года назначения в епископы

1df$episkop_date <- as.Date(str_extract(as.character(df$name_full), "\\d{2}\\.\\d{2}\\.\\d{4}"), "%d.%m.%Y")

2df$episkop_year <- year(df$episkop_date)
1
Находим дату рукоположения во епископа по всем строкам в датафрейме
2
Извлекаем только год из даты для построения диаграммы

2.2.3 Современная синодальная раздробленность в РПЦ

2.2.4 Скачивание полных биографий по ссылкам

1pattern <- "Награды.*|Сочинения.*|Труды.*|Научные труды.*|Использованные материалы.*|Публикации.*|Видео.|\"Владыка Ефрем поздравил.*"

df$link[33] |> 
2  read_html() |>
  html_nodes(css = ".ltr") |>
  html_text() |>
3  str_replace_all("[\r\n\t]", " ") |>
  str_remove_all("\\[\\d+\\]") |>
  str_remove(pattern)
1
Разделы биографий, которые не рассматриваются в анализе
2
Извлекаем биографию епископа
3
Чистим текст
[1] "   Архиепископ Иоанн (Тимофеев)Иоанн (Тимофеев) (род. 1958), митрополит Йошкар-Олинский и Марийский, глава Марийской митрополии  В миру Тимофеев Иван Иванович, родился 20 января 1958 года в Казани.  После окончания средней школы принят послушником в Псково-Печерский монастырь.  В 1978 году поступил в Московскую духовную семинарию, в 1981 году — в Московскую духовную академию, которую окончил в 1985 году со степенью кандидата богословия и направлен в Казанскую епархию.  4 ноября 1987 года рукоположен во диакона.  23 апреля 1989 года пострижен в монашество. 15 февраля 1990 года рукоположен во иеромонаха, назначен секретарем Казанского епархиального управления. В 1991 году возведен в сан игумена, 28 июня 1993 года — в сан архимандрита.  25 июля 1993 года хиротонисан во епископа Йошкар-Олинского и Марийского.   29 февраля 2004 года возведен в сан архиепископа.  С 5 января по 22 марта 2011 года также временно управлял Вятской епархией.  6 октября 2017 года был назначен главой новообразованной Марийской митрополии . С того же дня по 18 ноября 2017 года временно управлял вновь учреждённой Волжской епархией.  4 ноября 2017 года был возведён в сан митрополита патриархом Московским и всея Руси Кириллом .  С 1 июня по 25 августа 2020 года временно управлял Чебоксарской епархией , с 20 ноября  по 8 декабря того же года временно управлял Казанской епархией.  "

2.2.5 Парсинг биографий епископов

df$biographies <- map_chr(df$link, ~read_html(.x) |>
    html_nodes(".ltr") |>
    html_text() |>
    str_replace_all("[\r\n\t]", " ") |>
    str_remove_all("\\[\\d+\\]") |> 
    str_remove(pattern))
# Загружаем предобученную модель русского языка
ud_model <- udpipe_download_model("russian") |> 
  pluck("file_model") |> 
  udpipe_load_model()
# Лемматизация текста
lemmatized_biographies <- map_chr(df$biographies, ~ .x |> 
    udpipe_annotate(object = ud_model, x = .) |> 
    as.data.frame() |> 
    filter(!upos %in% c("PUNCT", "SYM")) |> 
    pull(lemma) |> 
    paste(collapse = " "))
lemmatized_biographies[33]
[1] "архиепископ Иоанн Тимофеев Иоанн Тимофеев родиться 1958 митрополит Йошкар-Олинский и Марийский глава Марийский митрополия в мир Тимофеев Иван Иванович родиться 20 январь 1958 год в Казань после окончание средний школа принять послушник в Псково-Печерский монастырь в 1978 год поступить в московский духовный семинария в 1981 год в московский духовный академия который окончить в 1985 год со степень кандидат богословие и направить в Казанской епархия 4 ноябрь 1987 год рукоположить во диакон 23 апрель 1989 год пострижить в монашество 15 февраль 1990 год рукоположить во иеромонах назначить секретарь казанский епархиальный управление в 1991 год возвести в сан игумен 28 июнь 1993 год в сан архимандрит 25 июль 1993 год хиротонисать во епископ Йошкар-Олинский и Марийский 29 февраль 2004 год возвести в сан архиепископ с 5 январь по 22 март 2011 год также временно управлять вятский епархия 6 октябрь 2017 год быть назначить глава новообразованный Марийский митрополия с тот же день по 18 ноябрь 2017 год временно управлять вновь учреждёть Волжский епархия 4 ноябрь 2017 год быть возвести в сан митрополит патриарх московский и весь Русь Кирилл с 1 июнь по 25 август 2020 год временно управлять Чебоксарский епархия с 20 ноябрь по 8 декабрь тот же год временно управлять казанский епархия"
project_stopwords <- c("сан", "епископ", "архиепископ", "митрополит", "епархия", "храм", "церковь", "год", "январь", "февраль", "март", "апрель", "май", "июнь", "июль", "август", "сентябрь", "октябрь", "ноябрь", "декабрь", "который", "назначить", "возвести", "рукоположить", "родиться", "окончить", "духовный","православный", "весь")

custom_stopwords <- c(stopwords("russian"), project_stopwords)

# Создаем корпус уже из лемматизированного текста
corpus <- Corpus(VectorSource(lemmatized_biographies))

corpus <- corpus %>%
  tm_map(content_transformer(tolower)) %>%
  tm_map(removeNumbers) %>%
  tm_map(removeWords, custom_stopwords) %>%
  tm_map(stripWhitespace)
dtm <- DocumentTermMatrix(corpus)
dtm <- removeSparseTerms(dtm, 0.9)  # уберём редкие слова
library(topicmodels)
Warning: пакет 'topicmodels' был собран под R версии 4.5.1
library(tidytext)
Warning: пакет 'tidytext' был собран под R версии 4.5.1
lda_model <- LDA(dtm, k = 6, control = list(alpha = 0.01, seed = 239)) # более разреженное распределение слов
topics <- tidy(lda_model, matrix = "beta")

# топ-10 слов по каждой теме

top_terms <- topics %>%
  group_by(topic) %>%
  slice_max(beta, n = 10) %>%
  ungroup() %>%
  arrange(topic, -beta)

ggplot(top_terms, aes(term, beta, fill = factor(topic))) +
  geom_col(show.legend = FALSE) +
  facet_wrap(~ topic, scales = "free") +
  coord_flip() +
  theme_minimal() +
  ggtitle("Топ-10 слов в каждой теме")

Сноски

  1. Епископ - священнослужитель третьей (высшей) степени священства↩︎