AFINN: я готов к делу
Теперь перейдём к лексикону AFINN. В отличие от лексикона Bing, где словам присваивается просто положительная или отрицательная метка, лексикон AFINN использует числовые значения от -5 до 5. Кроме того, столбец с оценкой тональности в AFINN называется value, а не sentiment.
Как и раньше, мы применяем inner_join(), а затем count(). Чтобы суммировать оценки по каждой строке, используем функции dplyr: group_by() и summarize(). Функция group_by() принимает существующий фрейм данных и преобразует его в сгруппированный, в котором все операции выполняются «по группам». Затем функция summarize() позволяет вычислить значение для каждой группы с помощью агрегирующей функции — например, sum() или mean(). В нашем случае это выглядит так:
data_frame %>%
group_by(book_line) %>%
summarize(total_value = sum(book_line))
В версии «Приключений Гекльберри Финна» в формате tidy строка 9703 содержит слова «best», «ever», «fun», «life» и «spirit». Слова «best» и «fun» имеют оценки AFINN 3 и 4 соответственно. После агрегации общая оценка строки 9703 составит 7.
В экосистеме tidyverse функция filter() предпочтительнее subset(): она сочетает возможности subset() с более простым синтаксисом. Вот пример фильтрации data_frame по условию, при котором значение в column1 равно 24. Обратите внимание: имя столбца не берётся в кавычки.
filter(data_frame, column1 == 24)
Объект afinn содержит лексикон AFINN. Объект huck — версия романа Марка Твена «Приключения Гекльберри Финна» в формате tidy, подготовленная для анализа.
Строка 5400 соответствует тексту: All the loafers looked glad; I reckoned they was used to having fun out of Boggs. Стоп-слова и знаки препинания в наборе данных уже удалены.
Это упражнение является частью курса
Анализ тональности в R
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
# See abbreviated line 5400
huck %>% filter(line == 5400)
# What are the scores of the sentiment words?
afinn %>% filter(word %in% c("fun", "glad"))
huck_afinn <- huck %>%
# Inner Join to AFINN lexicon
inner_join(___, by = c("___" = "___")) %>%
# Count by value and line
___(___, ___)