Homework №9

Автор

Arina Morozova

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

1.12.2024

Дуглас Адамс “Автостопом по галактике” Книга 1

Библиография (Адамс 1997, 1)

Начало работы

Для начала подгружаю библиотеки, которые мне понадобятся

library(rvest)
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.5.1     ✔ tibble    3.2.1
✔ lubridate 1.9.3     ✔ tidyr     1.3.1
✔ purrr     1.0.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter()         masks stats::filter()
✖ readr::guess_encoding() masks rvest::guess_encoding()
✖ dplyr::lag()            masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(tidytext)
library(tokenizers)
library(stopwords)
library(udpipe)
library(ggplot2)
library(dplyr)
library(wordcloud)
Загрузка требуемого пакета: RColorBrewer

Затем сайт с текстом книги, которую я буду изучать. Достаю сам текст и преобразовываю его в tibble

text <- read_html ("https://www.booksite.ru/fulltext/0/001/005/082/004.htm") |>
  html_elements("pre") |>
  html_text2()

my_text <- text |>
  as_tibble()

my_text <- my_text |> 
  rename(text = value)

Я выбрала модель SynTagRus, так как произведение переведено на современный русский язык, но при этом в нем довольно много слов, которые не требуются в обычной жизни, а следовательно модель может их не знать. Однако, это наиболее полный пакет из представеных.

udpipe_download_model(language = "russian-syntagrus")

syntagrus <- udpipe_load_model(file = "russian-syntagrus-ud-2.5-191206.udpipe")

Анализ

Аннотирую текст и преобразовываю его в таблицу

best_text <- udpipe_annotate(syntagrus, my_text$text)

text_lemma <- as_tibble(best_text) |> 
  select(-paragraph_id) |>
  select(-doc_id)

Создаю новую таблицу с именами собственными

characters <- text_lemma |> 
  filter(upos == "PROPN") |> 
  select(token, lemma, upos)

Ранжирую таблицу по количеству упоминаний слов в тексте и удаляю лишние строки, так как я хочу создать график основных персонажей в книге

characters_counts <- characters |> 
  group_by(lemma) |> 
  count() |> 
  arrange(-n)

for (val in 5:6)
{characters_counts <- characters_counts [-5,]}

characters_counts <- characters_counts[-c(6:230), ]

characters_counts |>
  ggplot(aes(reorder(lemma, n), n, fill = lemma)) +
  geom_col(show.legend = F) +
  ylab(NULL) + 
  xlab(NULL) +
coord_flip() 

Теперь отбираю все прилагательные и создаю новую таблицу. Чищу ее от лишних прилагательнвх, которые мне не требуются, а также от ошибок лемматизации

adjective <- text_lemma |> 
  filter(upos == "ADJ") |> 
  select(token, lemma, upos)|>
  group_by(lemma) |> 
  count() |> 
  arrange(-n)

other <- c ("самый", "другой", "сам", "должен", "второй", "общий", "всеобщий", "полицейский", "прочий", "следующий", "умный", "Форд", "рад", "третий", "9-множественный", "каков", "М-м-", "остальной", "данный")

clean_adjective <- adjective |>
  filter(!lemma %in% other) |>
  as_tibble()

Добавляю палитру и создаю облако слов из отобранных мною прилагательных

pal <- c("#f1c40f", "#34495e", 
         "#8e44ad", "#3498db",
         "#2ecc71")
wordcloud(clean_adjective$lemma, 
          clean_adjective$n,
          min.freq = 3,
          max.words = 50, 
          scale = c(3, 0.8),
          colors = pal, 
          random.color = TRUE, 
          rot.per = 0.2)

Результат

Я смогла выяснить имена основных персонажей в книге и кто из них чаще всего фигурирует в тексте (Артур), подтвердив таким образом, что именно он является главным героем произведения. А также я создала облако прилагательных для того, чтобы проследить, как описываются герои и пейзажи в жанре научной фантастики. В итоге можно отметить, что большая часть прилагательных довольно будничная и не сильно отличается от других жанров, за исключением нескольких не самых часто используемых терминов, например, “галактический”, “звездный”, “космический”.

использованная литература

Адамс, Дуглас. 1997. Автостопом по Галактике. АСТ.