ComeçarComece de graça

Mais que palavras: tokenização (2)

O pacote tidytext permite analisar dados de texto usando pacotes do "tidyverse", como dplyr e sparklyr. Como fazer análise de sentimento está além do escopo deste curso; você pode saber mais em Sentiment Analysis. Este exercício foi feito para dar a você um gostinho rápido de como fazer isso no Spark.

A análise de sentimento basicamente permite atribuir uma pontuação ou emoção a cada palavra. Por exemplo, no léxico AFINN, a palavra "outstanding" tem pontuação +5, já que quase sempre é usada em um contexto positivo. "grace" é uma palavra levemente positiva e tem pontuação +1. "fraud" geralmente é usada em contexto negativo e tem pontuação -4. O conjunto de dados de pontuações AFINN é retornado por get_sentiments("afinn"). Para conveniência, os dados de palavras "desaninhados" e o léxico de sentimentos foram copiados para o Spark.

Normalmente, você quer comparar o sentimento de vários grupos de dados. Para isso, o padrão de código é o seguinte.

text_data %>%
  inner_join(sentiments, by = "word") %>%
  group_by(some_group) %>%
  summarize(positivity = sum(score))

Um inner join pega todos os valores da primeira tabela e procura correspondências na segunda. Se encontrar, adiciona os dados da segunda tabela. Diferente de um left join, ele descartará as linhas em que não encontrar correspondência. O princípio é mostrado neste diagrama.

An inner join, explained using table of colors.

Assim como os left joins, os inner joins são um tipo de mutating join, pois adicionam colunas à primeira tabela. Veja se você consegue adivinhar qual função usar para inner joins e como usá-la. (Dica: o uso é bem parecido com left_join(), anti_join() e semi_join()!)

Este exercício faz parte do curso

Introdução ao Spark com sparklyr em R

Ver curso

Instruções do exercício

Uma conexão com o Spark foi criada para você como spark_conn. Os tibbles com as palavras dos títulos e o léxico de sentimentos armazenados no Spark já foram definidos, respectivamente, como title_text_tbl e afinn_sentiments_tbl.

  • Crie uma variável chamada sentimental_artists a partir de title_text_tbl.
    • Use inner_join() para unir afinn_sentiments_tbl a title_text_tbl por "word".
    • Faça o group by de artist_name.
    • Resuma para definir a variável positivity, igual à soma do campo score.
  • Encontre as 5 artistas com os títulos de músicas mais negativos.
    • Ordene sentimental_artists por positividade crescente.
    • Use slice_max para obter os 5 melhores resultados.
  • Encontre as 5 artistas com os títulos de músicas mais positivos.
    • Ordene sentimental_artists por positividade decrescente.
    • Obtenha os 5 melhores resultados.

Exercício interativo prático

Experimente este exercício completando este código de exemplo.

# 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
  ___
Editar e executar o código