Компьютерный анализ романа Ф.М Достоевского ‘Преступление и наказание’

Author

Лесниченко Михаил

Published

December 19, 2025

Цель проекта

Цель данного проекта заключается в том, чтобы провести базовый компьютерный анализ текста романа Ф.М. Достоевского “Преступление и наказание” с применением инструментов языка R.

Данные

Текст был взят из открытой электронной библиотеки “Project Gutenberg”. Роман был получен оттуда, поскольку его текст отсутствует в каталоге пакета “gutenbergr”. Данное произведение было добавлено путем URL

#Происходит подключение необходимых пакетов для работы с данными
library(rvest)
library(dplyr)

Присоединяю пакет: 'dplyr'
Следующие объекты скрыты от 'package:stats':

    filter, lag
Следующие объекты скрыты от 'package:base':

    intersect, setdiff, setequal, union
library(tidytext)
Warning: пакет 'tidytext' был собран под R версии 4.5.2
library(ggplot2)
Warning: пакет 'ggplot2' был собран под R версии 4.5.2
library(wordcloud)
Warning: пакет 'wordcloud' был собран под R версии 4.5.2
Загрузка требуемого пакета: RColorBrewer
library(RColorBrewer)
library(udpipe)
Warning: пакет 'udpipe' был собран под R версии 4.5.2
library(tidyr)

Чтение текста и очистка текста

url <- "https://www.gutenberg.org/files/2554/2554-0.txt"

crime_text <- read_html(url) |>
  html_text() |>
  strsplit("\n") |>
  unlist() |>
  (\(x) tibble(text = x, book = "Crime and Punishment"))() |>
  (\(x) filter(x, text != ""))()

# Очистка текста
texts_clean <- crime_text |>
  (\(x) mutate(x,
               text = tolower(text),
               text = gsub("[^a-z ]", "", text)))()

POS-тегирование

model <- udpipe_download_model(language = "english")
Downloading udpipe model from https://raw.githubusercontent.com/jwijffels/udpipe.models.ud.2.5/master/inst/udpipe-ud-2.5-191206/english-ewt-ud-2.5-191206.udpipe to C:/Users/mikha/Desktop/english-ewt-ud-2.5-191206.udpipe
 - This model has been trained on version 2.5 of data from https://universaldependencies.org
 - The model is distributed under the CC-BY-SA-NC license: https://creativecommons.org/licenses/by-nc-sa/4.0
 - Visit https://github.com/jwijffels/udpipe.models.ud.2.5 for model license details.
 - For a list of all models and their licenses (most models you can download with this package have either a CC-BY-SA or a CC-BY-SA-NC license) read the documentation at ?udpipe_download_model. For building your own models: visit the documentation by typing vignette('udpipe-train', package = 'udpipe')
Downloading finished, model stored at 'C:/Users/mikha/Desktop/english-ewt-ud-2.5-191206.udpipe'
ud_model <- udpipe_load_model(file = model$file_model)

annotations <- udpipe_annotate(ud_model, x = texts_clean$text) |>
  as.data.frame()

Фильтрация биграмм “прилагательное + существительное”

adj_noun_bigrams <- annotations |>
  (\(x) x |>
     select(doc_id, paragraph_id, sentence_id, token, upos) |>
     group_by(doc_id, paragraph_id, sentence_id) |>
     mutate(next_token = lead(token),
            next_upos = lead(upos)) |>
     ungroup() |>
     filter(upos == "ADJ" & next_upos == "NOUN") |>
     mutate(bigram = paste(token, next_token, sep = " ")) |>
     count(bigram, sort = TRUE) |>
     slice_max(n, n = 10)
  )()

print(adj_noun_bigrams)
# A tibble: 10 × 2
   bigram               n
   <chr>            <int>
 1 old woman           64
 2 young man           45
 3 great deal          40
 4 good heavens        24
 5 same time           24
 6 long time           22
 7 pyotr petrovitch    22
 8 first time          21
 9 last night          17
10 next day            17

Визуализация топ-10 биграмм

ggplot(adj_noun_bigrams, aes(reorder(bigram, n), n)) +
  geom_col(fill = "darkgreen") +
  coord_flip() +
  labs(
    title = "Топ-10 сочетаний прилагательное + существительное",
    x = "Биграмма",
    y = "Частота"
  )

# Облако слов
set.seed(123)
wordcloud(
  words = adj_noun_bigrams$bigram,
  freq = adj_noun_bigrams$n,
  max.words = 100,
  colors = brewer.pal(8, "Dark2")
)

Анализ полученных данных

Анализ романа “Преступление и наказание” показал наиболее часто используемые сочетания прилагательных(adjective) и существительных(noun). Топ-10 наиболее часто встречаемых сочетаний это:

1 old woman 64
2 young man 45
3 great deal 40
4 good heavens 24
5 same time 24
6 long time 22
7 pyotr petrovitch 22
8 first time 21
9 last night 17
10 next day 17

Такие сочетания как “old woman” и “yougn man” показывают внимание автора к возрасту главных персонажей. Также, в топе присутствуют имена героев “Pyotr Petrovich” и “Porfiry Pertovich”, что говорит об их важности в сюжете произведения. Среди часто используемых сочетаний присутствуют выражения типа «great deal», «good heavens», «same time», «first time» и «long time», которые отражают стиль английского перевода: автор активно использует стандартные разговорные и описательные конструкции для передачи эмоций, событий и действий персонажей.

Ссылки

Дополнительная информация