library(rvest)
library(tidyverse)
#Функция для создания таблицы
<- function(html_file) {
scrape_poems tibble(
"link" = html_file |>
html_elements("a.ICocV") |> #Селектор для ссылок
html_attr("href")
)
}
#Функция для извлечения текста стихотворения
<- function(url) {
get_text read_html(url) |>
html_elements(".qPf9A .xZmPc") |> # Селектор для текста стихотворения
html_text2() |>
paste(collapse = " ")
}
ТютчевФет
Векторные модели и стихотворения о природе (Word2Vec)
О природе писал… ТютчевФет.
- Ф.И. Тютчев. Стихотворения
- А.А. Фет. Стихотворения
— кодификатор ЕГЭ по литературе
Школьная программа не пощадила двух поэтов. На уроках литературы творчество А.А. Фета и Ф.И. Тютчева традиционно изучается параллельно, а в представлении учеников они часто сливаются в некое единое целое, как два неотделимых столпа русской лирики о природе.
Зачастую говорят именно о сходствах, а не о различиях. С помощью модели Word2Vec мы попытаемся взглянуть на поэтический мир А.А. Фета и Ф.И. Тютчева с новой, количественной точки зрения, выявляя тонкие отличия их языка.
Использованные данные
Данными для анализа стали тексты стихотворений с сайта Культура.рф с тегом «о природе» Ф.И. Тютчева и А.А. Фета. Тексты стихотворений были собраны с помощью функций, которые обработали ссылки и создали таблицы с текстами стихотворений.
Ссылки:
- Подготовленный для Word2Vec датасет со стихотворениями о природе Ф.И. Тютчева
- Подготовленный для Word2Vec датасет со стихотворениями о природе А.А. Фета
- Модель Word2Vec, созданная на корпусе стихотворений о природе Ф.И. Тютчева
- Модель Word2Vec, созданная на корпусе стихотворений о природе А.А. Фета
Сбор данных
Общие функции
Ф.И. Тютчев
<- c(
urls_Tut "https://www.culture.ru/literature/poems/author-fedor-tyutchev/tag-o-prirode",
"https://www.culture.ru/literature/poems/author-fedor-tyutchev/tag-o-prirode?page=2",
"https://www.culture.ru/literature/poems/author-fedor-tyutchev/tag-o-prirode?page=3",
"https://www.culture.ru/literature/poems/author-fedor-tyutchev/tag-o-prirode?page=4",
"https://www.culture.ru/literature/poems/author-fedor-tyutchev/tag-o-prirode?page=5",
"https://www.culture.ru/literature/poems/author-fedor-tyutchev/tag-o-prirode?page=6"
)
#Собираем данные со всех страниц со стихотворениями Тютчева
<- map_df(urls_Tut, ~ {
Tut_tbl <- read_html(.x)
html scrape_poems(html)
})
#Добавляем текст стихотворений в таблицу
<- Tut_tbl |>
Tut_tbl mutate(link = paste0("https://www.culture.ru", link))|>
mutate("text" = map_chr(link, get_text)) |>
select(-link) |>
mutate(text = str_remove(text, "\\d{4} г\\.$")) |>
mutate(id = paste0("doc", row_number()))
А.А. Фет
<- c(
urls_Fet "https://www.culture.ru/literature/poems/author-afanasii-fet/tag-o-prirode",
"https://www.culture.ru/literature/poems/author-afanasii-fet/tag-o-prirode?page=2",
"https://www.culture.ru/literature/poems/author-afanasii-fet/tag-o-prirode?page=3"
)
#Собираем данные со всех страниц со стихотворениями Тютчева
<- map_df(urls_Fet, ~ {
Fet_tbl <- read_html(.x)
html scrape_poems(html)
})
#Добавляем текст стихотворений в таблицу
<- Fet_tbl |>
Fet_tbl mutate(link = paste0("https://www.culture.ru", link))|>
mutate("text" = map_chr(link, get_text)) |>
select(-link) |>
mutate(text = str_remove(text, "\\d{4} г\\.$")) |>
mutate(id = paste0("doc", row_number()))
Обработка данных
На этапе сбора данных с помощью регулярных выражений были удалены даты из текста. Теперь необходимо удалить стоп-слова, привести всё к нижнему регистру и лемматизировать слова, чтобы получить более аккуратные данные для модели Word2Vec. Первые эксперименты показали, что на этом этапе релеватно избавиться от всех частей речи кроме существительных, глаголов и прилагательных.
library(udpipe)
library(stopwords)
library(tidytext)
<- stopwords("ru")
stop_words <- udpipe_load_model(file = "russian-syntagrus-ud-2.5-191206.udpipe")
russian_syntagrus
<- udpipe_annotate(
Tut_annotate
russian_syntagrus, x = Tut_tbl$text,
doc_id = Tut_tbl$id
)
<- as_tibble(Tut_annotate) |>
Tut filter(upos %in% c("NOUN", "ADJ", "VERB")) |>
filter(!lemma %in% stop_words) |>
select(doc_id, lemma) |>
mutate(lemma = tolower(lemma))
<- udpipe_annotate(
Fet_annotate
russian_syntagrus, x = Fet_tbl$text,
doc_id = Fet_tbl$id
)
<- as_tibble(Fet_annotate) |>
Fet filter(upos %in% c("NOUN", "ADJ", "VERB")) |>
filter(!lemma %in% stop_words) |>
select(doc_id, lemma) |>
mutate(lemma = tolower(lemma))
Таблицы готовы, можно приступать к созданию модели!
Построение модели
Для построения модели был выбран алгоритм Word2Vec, который позволяет обучить векторные представления слов на основе их контекста.
library(word2vec)
<- Tut |>
corpus_Tut group_by(doc_id) |>
mutate(text = str_c(lemma, collapse = " ")) |>
distinct(doc_id, text)
<- Fet |>
corpus_Fet group_by(doc_id) |>
mutate(text = str_c(lemma, collapse = " ")) |>
distinct(doc_id, text)
Изначальные настройки моделей:
word2vec(x = corpus$text,
type = "skip-gram",
dim = 50,
window = 5,
iter = 20,
hs = TRUE,
min_count = 5,
threads = 6)
Итоговые настройки моделей:
set.seed(02062024)
<- word2vec(x = corpus_Fet$text,
model_Fet2 type = "skip-gram",
dim = 80,
window = 3,
iter = 20,
hs = TRUE,
min_count = 4,
threads = 6)
set.seed(02062024)
<- word2vec(x = corpus_Tut$text,
model_Tut2 type = "skip-gram",
dim = 80,
window = 3,
iter = 20,
hs = TRUE,
min_count = 4,
threads = 6)
Причины изменения настроек:
Повторение похожих слов в списках ближайших соседей. Например, для слов “день” и “ночь” в обоих случаях появлялись примерно 70% одинаковых слов у А.А. Фета, что указывало на недостаточную дифференциацию контекстов.
Слишком абстрактные результаты. Некоторые ближайшие соседи были слишком далеки от исходных понятий, что снижало интерпретируемость модели. В итоге параметры были изменены, чтобы добиться баланса между конкретностью и разнообразием.
Работа с моделью
Для работы с моделью были отобраны слова, который подходили по 2 критериям:
- Связаны с природой.
- Есть в корпусах обоих писателей.
Восьмёркой таких слов стали: день, ночь, солнце, река, лес, поле, земля, небо.
Прикрепляем несколько примеров:
ДЕНЬ
Ф.И. Тютчев
term1 term2 similarity rank
1 день ночь 0.8387068 1
2 день незримый 0.8260767 2
3 день месяц 0.8232250 3
4 день великий 0.8088239 4
5 день гром 0.7936309 5
6 день сердце 0.7861557 6
7 день бог 0.7782006 7
8 день шум 0.7697908 8
9 день покров 0.7687005 9
10 день покой 0.7632086 10
А.А. Фет
term1 term2 similarity rank
1 день прийти 0.8708296 1
2 день полный 0.8397148 2
3 день душистый 0.8349433 3
4 день молодой 0.8324080 4
5 день куст 0.8206415 5
6 день весенний 0.8170022 6
7 день глядеть 0.8132442 7
8 день простор 0.7842297 8
9 день вешний 0.7726672 9
10 день ветвь 0.7697400 10
РЕКА
Ф.И. Тютчев
term1 term2 similarity rank
1 река поле 0.8787194 1
2 река дышать 0.8729707 2
3 река радужный 0.8384898 3
4 река стать 0.7969312 4
5 река облако 0.7950984 5
6 река конец 0.7934392 6
7 река ветр 0.7822608 7
8 река лазурный 0.7667030 8
9 река уйти 0.7577703 9
10 река стройный 0.7425197 10
А.А. Фет
term1 term2 similarity rank
1 река видный 0.9320121 1
2 река звезда 0.9312753 2
3 река поле 0.9299210 3
4 река береза 0.9235251 4
5 река идти 0.9174878 5
6 река грудь 0.9166219 6
7 река глубина 0.9163690 7
8 река небо 0.9129853 8
9 река слеза 0.9118869 9
10 река тучка 0.9110249 10
Все таблицы, созданные при работе с моделью, можно найти по ссылке.
Выводы после работы с моделью
Ф.И. Тютчев
В текстах Ф.И. Тютчева доминируют образы, связанные с духовной рефлексией и философскими исканиями. Часто встречаются слова, отражающие внутренний мир человека: покой, молчание, страх, нега, вера. Некоднократно встречаются слова, связанные со светом и тенью: блеск, молния, сумрак, пламенный, луч, луна. Обращение к стихиям в текстах часто происходит через прилагательные: пламенный, воздушный. Цветовая палитра для Ф.И. Тютчева не так важна, но она есть: чёрный, лазурный, радужный, белеть. Интересно, что появляются и упоминания частей тела – сердце, глаз, рука.
А.А. Фет
Фет, напротив, акцентирует внимание на конкретике. Важное место занимают конкретные элементы природы и места: лес, поле, сад, куст, лист, ветка, звезда, берёза. Обращение к стихиям происходит напрямую через существительные: вода, земля, снег, мороз, буря. Описание цвета и света для А.А. Фета не так важно, однократно встречаются лишь свет, мгла. Более значимым оказывается сенсорный аспект восприятия – дрожать, тёплый, слеза, тишина.
Главные различия
Поэзия Тютчева ближе к духовному, незримому и невыразимому, в то время как творчество Фета раскрывает красоту природы через конкретику и её непосредственное восприятие через органы чувств.
Выводы после проведения исследования
Выводы, полученные с помощью моделей Word2Vec, примерно совпадают с литературоведческими представлением о различиях в лирике Ф.И. Тютчева и А.А. Фета, поэтому результат можно считать успешным. Мы исследовали расхождения поэтического языка, однако в ходе работы обнаруживали и некоторые сходства, например, совпадения в ближайших словах. Поэтому было бы интересно продолжить сопоставление творчества Ф.И. Тютчева и А.А. Фета, используя LSA, ведь этот метод может раскрыть глубинные тематические связи, которые не всегда очевидны при работе с Word2Vec.