Сова стала объяснять, что такое Необходимая или Соответствующая Спинная Мускулатура. Она уже объясняла это когда-то Пуху и Кристоферу Робину и с тех пор ожидала удобного случая, чтобы повторить объяснения, потому что это такая штука, которую вы спокойно можете объяснять два раза, не опасаясь, что кто-нибудь поймёт, о чём вы говорите.
(А. Милн)

1. CSS-селекторы

Можно долго и нудно бороться с тегами скаченной веб-страницы, однако можно использовать CSS-селекторы.

2. Краулер

library(tidyverse); library(rvest); library(tidytext)
  • во-первых нужно ввести ссылку
source <- read_html("https://ling.hse.ru/news/")
  • потом нужно узнать CSS-селектор
  • потом пройтись функциями пакета rvest
source %>% 
  html_nodes("div.post:nth-child(2) > div:nth-child(2) > h2:nth-child(1)") %>%
  html_text() -> 
  titles
titles
## [1] "«Проблема сохранения языка актуальна для многих народов, в том числе и в России»"
  • посмотреть внимательнее и пройтись функциями пакета rvest
source %>% 
  html_nodes("h2") %>%
  html_text() -> 
  titles
titles
##  [1] "«Студенты в России не догадываются, как хорошо выглядят их дипломы за границей»"    
##  [2] "«Проблема сохранения языка актуальна для многих народов, в том числе и в России»"   
##  [3] "«Взглянуть на историю литературы с нового нестандартного угла»"                     
##  [4] "Анастасия Лопухина на конференции Linguistic Evidence в Германии"                   
##  [5] "«Отделить собаку от супа»: отчет о горномарийской экспедиции"                       
##  [6] "Разработка Центра цифровых гуманитарных исследований номинирована на DH Awards 2017"
##  [7] "ЕВРика: сборник и база данных «поисков» и «находок»"                                
##  [8] "Поздравляем Любовь Нестеренко с рождением дочери"                                   
##  [9] "«Акка Кнебекайзе школы лингвистики»"                                                
## [10] "Георгий Мороз рассказал о лингвистике в Лектории ВДНХ"

Давайте сделаем аналогичное для текстов

source %>% 
  html_nodes("div.post__text") %>%
  html_text() ->
  texts
head(texts)
## [1] "\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t.fa-islider_box .fotorama__img { max-width: 100% !important;}\n\t\t\t\t\n\t\t\t\tВыпускница бакалавриата «Фундаментальная и прикладная лингвистика» Мария Медведева — об аспирантуре в Голландии, автоматическом предсказании решений судов и особой атмосфере Гронингена.\n\t\t\t"                                                                                                     
## [2] "\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t.fa-islider_box .fotorama__img { max-width: 100% !important;}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tДоцент школы лингвистики НИУ ВШЭ Борис Орехов выступил на радио в программе, посвященной Международному дню родного языка и сохранению малых языков.\n\t\t\t"
## [3] "\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t.fa-islider_box .fotorama__img { max-width: 100% !important;}\n\t\t\t\t\n\t\t\t\t\n\t\t\t"                                                                                                                                                                                                                                                                                              
## [4] "\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t.fa-islider_box .fotorama__img { max-width: 100% !important;}\n\t\t\t\t\n\t\t\t\tНаучный сотрудник Лаборатории нейролингвистики НИУ ВШЭ Анастасия Лопухина на конференции Linguistic Evidence в Германии\n\t\t\t"                                                                                                                                                                       
## [5] "\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t.fa-islider_box .fotorama__img { max-width: 100% !important;}\n\t\t\t\t\n\t\t\t\tВ Москву вернулась очередная марийская экспедиция Школы лингвистики НИУ ВШЭ (совместная с МГУ им. Ломоносова). Шестой состав привез домой новое знание об архитектуре горномарийского языка – и поучительную историю о глупой собаке.\n\t\t\t"                                                         
## [6] "\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t.fa-islider_box .fotorama__img { max-width: 100% !important;}\n\t\t\t\t\n\t\t\t\tВеб-сервис Easy Linavis позволяет максимально быстро превратить текст или иные данные в граф и исследовать его методами сетевого анализа. Навыки программирования при этом не требуются.\n\t\t\t"

3. Нобелевские лауреаты

Скачайте список нобелевских лауреатов по литературе.

## [1] "List of Nobel laureates in Literature"
## [2] "Shmuel Yosef Agnon"                   
## [3] "Vicente Aleixandre"                   
## [4] "Svetlana Alexievich"                  
## [5] "Ivo Andrić"                           
## [6] "Miguel Ángel Asturias"
  • создайте вектор ссылок на каждого автора (вот последние 6)
## [1] "https://en.wikipedia.org/wiki/Wisława_Szymborska" 
## [2] "https://en.wikipedia.org/wiki/Rabindranath_Tagore"
## [3] "https://en.wikipedia.org/wiki/Tomas_Tranströmer"  
## [4] "https://en.wikipedia.org/wiki/Sigrid_Undset"      
## [5] "https://en.wikipedia.org/wiki/Mario_Vargas_Llosa" 
## [6] "https://en.wikipedia.org/wiki/Derek_Walcott"
  • Скачайте тексты всех статей (напишите функцию, но запускайте на четырех статьях). Когда получится, возьмите с флешки или отсюда все данные.

  • создайте тиббл (data_frame) с двумя переменными name и text, со списком авторов и текстами о них

nobel_laureates <- data_frame(name = eng_list, texts)
str(nobel_laureates)
## Classes 'tbl_df', 'tbl' and 'data.frame':    113 obs. of  2 variables:
##  $ name : chr  "List of Nobel laureates in Literature" "Shmuel Yosef Agnon" "Vicente Aleixandre" "Svetlana Alexievich" ...
##  $ texts: chr  "Shmuel Yosef Agnon (Hebrew: שמואל יוסף עגנון‎‎) (July 17, 1888 – February 17, 1970)[1] was a Nobel Prize laureate"| __truncated__ "Vicente Pío Marcelino Cirilo Aleixandre y Merlo (26 April 1898 – 14 December 1984) was a Spanish poet who was b"| __truncated__ "Svetlana Alexandrovna Alexievich[1] (born 31 May 1948) is a Belarusian investigative journalist and non-fiction"| __truncated__ "Ivo Andrić (Serbian Cyrillic: Иво Андрић, pronounced [ǐːʋɔ ǎːndritɕ]; born Ivan Andrić; 9 October 1892 – 13 Mar"| __truncated__ ...

4. tidytext опять!

Давайте посчитаем слова!
Уберем стопслова. Это английский, для него есть встроенный датасет data(stop_words).

Давайте нарисуем картинку!

А как это устроено по авторам? Выведите слова встретившиеся больше 10 раз.

5. Какие бывают проблемы?

  • In R everything that exists is an object and everything that happens is a function call1. In Java, everything is an object. In Javascript, everything is a terrible mistake.
    merged from Antoine Sabot-Durand and John Chambers

  • Сайт, который открывается по частям (например, после обращения к базе данных). В таком случае надо будет создавать сессию, передовать куки. Это можно делать при помощи пакета httr.
  • Авторы сайта не такие глупые, так что нужно чуть лучше притворяться браузером.
  • Блокировка обкачки. Например, обкачать всю Википедию не получится.

  1. Вы наверняка знаете, про это `+`(2, 3) `[`(letters, 7)