НачатьНачать бесплатно

Больше чем слова: токенизация (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) берёт все строки из первой таблицы и ищет совпадения во второй. При нахождении совпадения данные из второй таблицы добавляются к результату. В отличие от левого соединения, строки без совпадений отбрасываются. Принцип работы показан на схеме ниже.

An inner join, explained using table of colors.

Как и левые соединения, внутренние соединения относятся к типу мутирующих (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
  ___
Редактировать и запускать код