Больше чем слова: токенизация (2)
Пакет tidytext позволяет анализировать текстовые данные с помощью пакетов экосистемы «tidyverse», таких как dplyr и sparklyr. Подробный разбор анализа тональности выходит за рамки этого курса; подробнее вы можете узнать в курсе Sentiment Analysis. Это упражнение даст вам первое представление о том, как проводить такой анализ в Spark.
Анализ тональности позволяет присваивать каждому слову оценку или эмоциональную окраску. Например, в лексиконе AFINN слово "outstanding" получает оценку +5, так как оно почти всегда используется в положительном контексте. "grace" — слово с умеренно положительной окраской, его оценка равна +1. "fraud" обычно используется в негативном контексте и имеет оценку -4. Набор данных с оценками AFINN возвращает функция get_sentiments("afinn"). Для удобства данные с разбитыми по словам текстами и словарь тональности уже загружены в Spark.
Как правило, нужно сравнить тональность нескольких групп данных. Для этого используется следующий шаблон кода.
text_data %>%
inner_join(sentiments, by = "word") %>%
group_by(some_group) %>%
summarize(positivity = sum(score))
Внутреннее соединение (inner join) берёт все строки из первой таблицы и ищет совпадения во второй. При нахождении совпадения данные из второй таблицы добавляются к результату. В отличие от левого соединения, строки без совпадений отбрасываются. Принцип работы показан на схеме ниже.

Как и левые соединения, внутренние соединения относятся к типу мутирующих (mutating join), поскольку они добавляют столбцы к первой таблице. Попробуйте угадать, какую функцию следует использовать для внутреннего соединения и как именно её применять. (Подсказка: синтаксис очень похож на left_join(), anti_join() и semi_join()!)
Это упражнение является частью курса
Введение в Spark с sparklyr на R
Инструкции к упражнению
Подключение к Spark уже создано и доступно как spark_conn. Тибблы, привязанные к данным о словах в названиях треков и словарю тональности, хранящемуся в Spark, предварительно определены как title_text_tbl и afinn_sentiments_tbl соответственно.
- Создайте переменную
sentimental_artistsна основеtitle_text_tbl.- С помощью
inner_join()присоединитеafinn_sentiments_tblкtitle_text_tblпо полю"word". - Сгруппируйте данные по
artist_name. - Вычислите итоговую статистику, определив переменную
positivityкак сумму значений поляscore.
- С помощью
- Найдите топ 5 исполнителей с наиболее негативными названиями песен.
- Отсортируйте
sentimental_artistsпо возрастаниюpositivity. - Используйте
slice_max, чтобы получить 5 верхних результатов.
- Отсортируйте
- Найдите топ 5 исполнителей с наиболее позитивными названиями песен.
- Отсортируйте
sentimental_artistsпо убываниюpositivity. - Получите 5 верхних результатов.
- Отсортируйте
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
# title_text_tbl, afinn_sentiments_tbl have been pre-defined
title_text_tbl
afinn_sentiments_tbl
sentimental_artists <- title_text_tbl %>%
# Inner join with sentiments on word field
___ %>%
# Group by artist
___ %>%
# Summarize to get positivity
___
sentimental_artists %>%
# Arrange by ascending positivity
___ %>%
# Get top 5
___
sentimental_artists %>%
# Arrange by descending positivity
___ %>%
# Get top 5
___