Meer dan woorden: tokenization (2)
Met het tidytext-pakket kun je tekstdata analyseren met "tidyverse"-pakketten zoals dplyr en sparklyr. Hoe je precies sentimentanalyse doet valt buiten de scope van deze cursus; meer daarover vind je in de Sentiment Analysis. Deze oefening geeft je een kort voorproefje van hoe je dit in Spark kunt doen.
Sentimentanalyse laat je in essentie een score of emotie aan elk woord toekennen. In het AFINN-lexicon heeft het woord "outstanding" bijvoorbeeld een score van +5, omdat het bijna altijd in een positieve context wordt gebruikt. "grace" is licht positief en heeft een score van +1. "fraud" wordt meestal negatief gebruikt en heeft een score van -4. De AFINN-scoreset wordt geretourneerd door get_sentiments("afinn"). Voor het gemak zijn de uit-geunneste woorddata en het sentimentlexicon naar Spark gekopieerd.
Doorgaans wil je het sentiment van meerdere groepen gegevens vergelijken. De code ziet er dan als volgt uit.
text_data %>%
inner_join(sentiments, by = "word") %>%
group_by(some_group) %>%
summarize(positivity = sum(score))
Een inner join neemt alle waarden uit de eerste tabel en zoekt naar overeenkomsten in de tweede tabel. Als er een match is, worden de gegevens uit de tweede tabel toegevoegd. In tegenstelling tot een left join worden rijen zonder match weggelaten. Dit principe zie je in dit diagram.

Net als left joins zijn inner joins een type mutating join, omdat ze kolommen aan de eerste tabel toevoegen. Kun jij raden welke functie je gebruikt voor inner joins en hoe je die toepast? (Hint: het gebruik lijkt sterk op left_join(), anti_join() en semi_join()!)
Deze oefening maakt deel uit van de cursus
Introductie tot Spark met sparklyr in R
Oefeninstructies
Er is al een Spark-verbinding voor je aangemaakt als spark_conn. Tibbles met de titelwoorden en het sentimentlexicon die in Spark zijn opgeslagen, zijn respectievelijk vooraf gedefinieerd als title_text_tbl en afinn_sentiments_tbl.
- Maak een variabele
sentimental_artistsop basis vantitle_text_tbl.- Gebruik
inner_join()omafinn_sentiments_tblte joinen mettitle_text_tblop"word". - Groepeer op
artist_name. - Vat samen in een variabele
positivity, gelijk aan de som van het veldscore.
- Gebruik
- Vind de top 5 artiesten met de meest negatieve songtitels.
- Sorteer
sentimental_artistsop oplopende positiviteit. - Gebruik
slice_maxom de top 5 resultaten te krijgen.
- Sorteer
- Vind de top 5 artiesten met de meest positieve songtitels.
- Sorteer
sentimental_artistsop aflopende positiviteit. - Haal de top 5 resultaten op.
- Sorteer
Interactieve oefening met praktijkervaring
Probeer deze oefening door deze voorbeeldcode aan te vullen.
# 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
___