library(rvest)
library(tidyverse)
library(magrittr)
library(lubridate)
library(MASS)
library(stopwords)
library(udpipe)
library(tm)Проект по анализу корпуса текстов
Исследование биографий епископов Русской Православной Церкви на основе методов анализа текстов
1 Введение
Коротко о данных
1.1 Библиотеки
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 Извлечение года назначения в епископы
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 слов в каждой теме")Сноски
Епископ - священнослужитель третьей (высшей) степени священства↩︎