Kom igångKom igång gratis

Mer än ord: tokenisering (2)

Paketet tidytext låter dig analysera textdata med hjälp av "tidyverse"-paket som dplyr och sparklyr. Sentimentanalys är ett eget ämne som faller utanför den här kursens scope – du kan läsa mer i kursen Sentiment Analysis. Den här övningen ger dig en snabb inblick i hur det kan göras i Spark.

Sentimentanalys innebär att du tilldelar ett poäng eller en känsla till varje ord. I AFINN-lexikonet har till exempel ordet "outstanding" poängen +5, eftersom det nästan alltid används i ett positivt sammanhang. "grace" är ett svagt positivt ord med poängen +1. "fraud" används vanligtvis i ett negativt sammanhang och har poängen -4. AFINN-datamängden returneras av get_sentiments("afinn"). För att underlätta har de uppdelade orddata och sentimentlexikonet kopierats till Spark.

Vanligtvis vill du jämföra sentimentet för flera grupper av data. Kodmönstret för detta ser ut så här.

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

En inner join tar alla värden från den första tabellen och söker efter matchningar i den andra tabellen. Om en matchning hittas läggs data från den andra tabellen till. Till skillnad från en left join tas rader utan matchning bort. Principen illustreras i diagrammet nedan.

En inner join, förklarad med en tabell med färger.

Precis som left joins är inner joins en typ av muterande join, eftersom de lägger till kolumner i den första tabellen. Försök lista ut vilken funktion som används för inner joins och hur den används. (Ledtråd: syntaxen liknar mycket left_join(), anti_join() och semi_join()!)

Den här övningen är en del av kursen

Introduktion till Spark med sparklyr i R

Visa kurs

Övningsinstruktioner

En Spark-anslutning har skapats åt dig som spark_conn. Tibbles kopplade till titelord och sentimentlexikonet som lagrats i Spark är fördefinierade som title_text_tbl respektive afinn_sentiments_tbl.

  • Skapa en variabel med namnet sentimental_artists från title_text_tbl.
    • Använd inner_join() för att joina afinn_sentiments_tbl med title_text_tbl"word".
    • Gruppera efter artist_name.
    • Sammanfatta genom att definiera variabeln positivity som summan av fältet score.
  • Hitta de 5 artister vars låttitlar har mest negativt sentiment.
    • Sortera sentimental_artists i stigande ordning efter positivity.
    • Använd slice_max för att hämta de 5 översta resultaten.
  • Hitta de 5 artister vars låttitlar har mest positivt sentiment.
    • Sortera sentimental_artists i fallande ordning efter positivity.
    • Hämta de 5 översta resultaten.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

# 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
  ___
Redigera och kör kod