Zacznij terazZacznij za darmo

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.

Złączenie wewnętrzne wyjaśnione na przykładzie tabeli kolorów.

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

Zobacz kurs

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_artists na podstawie title_text_tbl.
    • Użyj inner_join(), aby połączyć afinn_sentiments_tbl z title_text_tbl według kolumny "word".
    • Pogrupuj dane według artist_name.
    • Użyj summarize, aby zdefiniować zmienną positivity równą sumie wartości pola score.
  • Znajdź 5 artystów z najbardziej negatywnymi tytułami piosenek.
    • Posortuj sentimental_artists rosnąco według positivity.
    • Użyj slice_max, aby pobrać 5 najlepszych wyników.
  • Znajdź 5 artystów z najbardziej pozytywnymi tytułami piosenek.
    • Posortuj sentimental_artists malejąco według positivity.
    • Pobierz 5 najlepszych wyników.

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
  ___
Edytuj i uruchom kod