9 Работа с текстами: gutenbergr, tidytext, stopwords, udpipe

library(tidyverse)

9.1 Загрузка текста в R

В пакете readr (входит в tidyverse) для чтения текста есть функция read_lines(). В качестве первой переменной может выступать путь к файлу на компьютере или интернет ссылка:

t <- read_lines("https://raw.githubusercontent.com/agricolamz/2020_HSE_DPO/master/data/Chang.txt")
head(t)
[1] "Тед Чан"                                                                                 
[2] "История твоей жизни"                                                                     
[3] "Твой отец собирается задать мне вопрос. Это самый важный момент в нашей жизни, и я хочу" 
[4] "запомнить все до малейшей детали. Уже за полночь, но мы только что вернулись домой после"
[5] "ужина в ресторане и веселого шоу и сразу выходим в патио полюбоваться полной луной. Хочу"
[6] "танцевать! — объявляю я, и твой отец подтрунивает надо мной, но мы начинаем скользить в" 

Тексты хранятся в интернете по разному. Часто бывает так, что текст дигитализировали так, как он напечатан, так что в результате каждая строка в печатной книжке соответствует строке в текстовом файле (так, например, в нашем примере). Такой файл следует склеить воедино, используя пробел в качестве разделителя:

t2 <- str_c(t, collapse = " ")
length(t2)
[1] 1
str_length(t2)
[1] 117398

При таком слиянии, стоит проверить, не было ли в анализируемом тексте знаков переноса, иначе они сольются неправильно:

str_c(c("... она запо-", "лучила ..."), collapse = " ")
[1] "... она запо- лучила ..."

9.2 Пакет gutenbergr

Пакет gutenbergr является API для очень старого проекта Gutenberg.

library(gutenbergr)

Все самое важное в этом пакете хранится в датасете gutenberg_metadata

str(gutenberg_metadata)
tibble [51,997 × 8] (S3: tbl_df/tbl/data.frame)
 $ gutenberg_id       : int [1:51997] 0 1 2 3 4 5 6 7 8 9 ...
 $ title              : chr [1:51997] NA "The Declaration of Independence of the United States of America" "The United States Bill of Rights\r\nThe Ten Original Amendments to the Constitution of the United States" "John F. Kennedy's Inaugural Address" ...
 $ author             : chr [1:51997] NA "Jefferson, Thomas" "United States" "Kennedy, John F. (John Fitzgerald)" ...
 $ gutenberg_author_id: int [1:51997] NA 1638 1 1666 3 1 4 NA 3 3 ...
 $ language           : chr [1:51997] "en" "en" "en" "en" ...
 $ gutenberg_bookshelf: chr [1:51997] NA "United States Law/American Revolutionary War/Politics" "American Revolutionary War/Politics/United States Law" NA ...
 $ rights             : chr [1:51997] "Public domain in the USA." "Public domain in the USA." "Public domain in the USA." "Public domain in the USA." ...
 $ has_text           : logi [1:51997] TRUE TRUE TRUE TRUE TRUE TRUE ...
 - attr(*, "date_updated")= Date[1:1], format: "2016-05-05"

Например, сейчас мы можем понять, сколько книг на разных языках можно скачать из проекта:

gutenberg_metadata %>% 
  count(language, sort = TRUE)

Как видно, в основном это тексты на английском. Сколько авторов в датасете?

gutenberg_metadata %>% 
  count(author, sort = TRUE)

Сколько произведений Джейн Остин (не перепутайте с другими Остин) есть в датасете?

gutenberg_metadata %>% 
  filter(author == "Austen, Jane") %>% 
  distinct(gutenberg_id, title)

Давайте скачаем “Эмму”:

emma <- gutenberg_download(158)
Determining mirror for Project Gutenberg from http://www.gutenberg.org/robot/harvest
Using mirror http://aleph.gutenberg.org
emma