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.

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
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_artistsa partir detitle_text_tbl.- Use
inner_join()para unirafinn_sentiments_tblatitle_text_tblpor"word". - Faça o group by de
artist_name. - Resuma para definir a variável
positivity, igual à soma do camposcore.
- Use
- Encontre as 5 artistas com os títulos de músicas mais negativos.
- Ordene
sentimental_artistspor positividade crescente. - Use
slice_maxpara obter os 5 melhores resultados.
- Ordene
- Encontre as 5 artistas com os títulos de músicas mais positivos.
- Ordene
sentimental_artistspor positividade decrescente. - Obtenha os 5 melhores resultados.
- Ordene
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
___