Więcej niż słowa: tokenizacja (2)
Pakiet tidytext pozwala analizować dane tekstowe przy użyciu pakietów z rodziny "tidyverse", takich jak dplyr czy sparklyr. Analiza sentymentu to temat wykraczający poza zakres tego kursu – więcej na ten temat znajdziesz w kursie Sentiment Analysis. To ćwiczenie ma dać ci szybki przedsmak tego, jak wykonać taką analizę w Sparku.
Analiza sentymentu polega na przypisaniu każdemu słowu oceny lub emocji. Na przykład w leksykonie AFINN słowo "outstanding" ma wynik +5, ponieważ niemal zawsze występuje w pozytywnym kontekście. "grace" to słowo lekko pozytywne z wynikiem +1, natomiast "fraud" zazwyczaj pojawia się w negatywnym kontekście i ma wynik -4. Zbiór danych z ocenami AFINN zwraca funkcja get_sentiments("afinn"). Dla wygody dane z roztokenizowanymi słowami oraz leksykon sentymentu zostały już skopiowane do Sparka.
Najczęściej chcemy porównać sentyment w kilku grupach danych. Schemat kodu jest wtedy następujący:
text_data %>%
inner_join(sentiments, by = "word") %>%
group_by(some_group) %>%
summarize(positivity = sum(score))
Złączenie wewnętrzne (inner join) pobiera wszystkie wartości z pierwszej tabeli i szuka dopasowań w drugiej. Jeśli dopasowanie zostanie znalezione, dane z drugiej tabeli są dołączane. W odróżnieniu od złączenia lewostronnego (left join), wiersze bez dopasowania są pomijane. Zasadę działania ilustruje poniższy diagram.

Podobnie jak złączenia lewostronne, złączenia wewnętrzne należą do kategorii złączeń mutujących – dodają kolumny do pierwszej tabeli. Spróbuj zgadnąć, jakiej funkcji użyć do złączeń wewnętrznych i jak jej użyć. (Podpowiedź: składnia jest bardzo podobna do left_join(), anti_join() i semi_join()!)
To ćwiczenie jest częścią kursu
Wprowadzenie do Spark z pakietem sparklyr w R
Instrukcje do ćwiczenia
Połączenie ze Sparkiem zostało już utworzone jako spark_conn. Tibble'y powiązane ze słowami z tytułów piosenek oraz z leksykonem sentymentu przechowywanymi w Sparku są wstępnie zdefiniowane odpowiednio jako title_text_tbl i afinn_sentiments_tbl.
- Utwórz zmienną
sentimental_artistsna podstawietitle_text_tbl.- Użyj
inner_join(), aby połączyćafinn_sentiments_tblztitle_text_tblwedług kolumny"word". - Pogrupuj dane według
artist_name. - Użyj
summarize, aby zdefiniować zmiennąpositivityrówną sumie wartości polascore.
- Użyj
- Znajdź 5 artystów z najbardziej negatywnymi tytułami piosenek.
- Posortuj
sentimental_artistsrosnąco wedługpositivity. - Użyj
slice_max, aby pobrać 5 najlepszych wyników.
- Posortuj
- Znajdź 5 artystów z najbardziej pozytywnymi tytułami piosenek.
- Posortuj
sentimental_artistsmalejąco wedługpositivity. - Pobierz 5 najlepszych wyników.
- Posortuj
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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
___