movie-sentiment1

textmining
imdb
schoice
Published

November 16, 2023

Aufgabe

Eine typische Aufgabe des Textminings ist die Sentimentanalyse. Betrachten wir dazu einen Datensatz des Filmbewertungsportal IMDB. Das Portal veröffentlicht Bewertungen (quantitativ und qualitativ, d.h. als Score oder Bewertung/Review) zu Filmen der Nutzerinnen und Nutzer. Der Datensatz kann über Kaggle bezogen werden.

Im Rahmen einer Fallstudie soll eine Sentimentanalyse wie folgt abgearbeitet werden:

  1. Daten in R importieren
  2. Relevante Spalten auswählen (die die Reviews der Nutzer enthalten)
  3. Daten in das “Tidytext-Format” überführen
  4. Nicht-Wörter (z.B. Zahlen) entfernen
  5. Stopwörter entfernen
  6. Sentimentanalyse durchführen zur Identifikation der Grundemotionen
  7. Visualisierung der Intensität der Emotionen der 10 häufigsten Wörter (sortierte Balken)

Hinweise:

  • Hier ist nur ein Teil des Datensatzes dargestellt (aus Gründen der Einfachheit).
  • Gehen Sie davon aus, dass die Daten unter dem Pfad verfügbar sind, der in dieser Variable gespeichert ist: path_to_data. Die relevanten Spalten sind dort schon ausgewählt.

Welcher der folgenden R-Syntaxen führt diese Analyse korrekt aus? Wählen Sie die am besten passende Antwort!

Warning in inner_join(., emo): Detected an unexpected many-to-many relationship between `x` and `y`.
ℹ Row 18 of `x` matches multiple rows in `y`.
ℹ Row 11267 of `y` matches multiple rows in `x`.
ℹ If a many-to-many relationship is expected, set `relationship =
  "many-to-many"` to silence this warning.

Option A


library(tidytext) 
library(tidyverse)

d <- read_csv(path_to_data)

stopwords <- get_stopwords()
emo <- get_sentiments('nrc')

wordcount_plot1 <- 
d %>% 
  select(review) %>% 
  unnest_tokens(word, review) %>% 
  filter(str_detect(word, '[a-z]+')) %>% 
  anti_join(stopwords) %>% 
  inner_join(emo) %>% 
  count(word, sort = TRUE) %>% 
  slice_head(n = 10) %>% 
  mutate(word = fct_reorder(word, n)) %>% 
  ggplot(aes(n, word)) +
  geom_col()

Option B


library(tidytext)
library(tidyverse)

d <- read_csv(path_to_data)

stopwords <- get_stopwords()
emo <- get_sentiments('afinn')

wordcount_plot1 <- 
d %>% 
  select(review) %>% 
  unnest_tokens(output = word, input = review) %>% 
  filter(str_detect(word, '[a-z]+')) %>% 
  left_join(stopwords) %>% 
  inner_join(emo) %>% 
  count(word, sort=TRUE) %>% 
  slice_head(n = 10) %>% 
  mutate(word = fct_reorder(word, n)) %>% 
  ggplot(aes(x = n, y = word)) +
  geom_col()

Option C


library(tidytext)
library(tidyverse)

d <- read_csv(path_to_data)

stopwords <- get_stopwords()
emo <- get_sentiments('loughran')

wordcount_plot1 <- 
d %>% 
  select(review) %>% 
  unnest_tokens(word, review) %>% 
  filter(str_detect(word, '\w.')) %>% 
  anti_join(stopwords) %>% 
  inner_join(emo) %>% 
  count(word, sort = TRUE) %>% 
  slice_head(n = 10) %>% 
  mutate(word = fct_reorder(word, n)) %>% 
  ggplot(aes(n, word)) +
  geom_col()

Option D


library(tidytext)
library(tidyverse)

d <- read_csv(path_to_data)

stopwords <- get_stopwords()
emo <- get_sentiments('nrc')

wordcount_plot1 <- 
d %>% 
  select(review) %>% 
  unnest_tokens(word, review) %>% 
  filter(str_detect(word, '[a-z]+')) %>% 
  left_join(stopwords) %>% 
  inner_join(emo) %>% 
  count(word, sort = TRUE) %>% 
  slice(n = 10) %>% 
  ggplot(aes(x = n, y = word)) +
  geom_bar()
  

Option E

keine der genannten

Answerlist

  • Syntax A
  • Syntax B
  • Syntax C
  • Syntax D
  • Syntax E











Lösung

Die richtige Syntax lautet Syntax A.


library(tidytext) 
library(tidyverse)

d <- read_csv(path_to_data)

stopwords <- get_stopwords()
emo <- get_sentiments('nrc')

wordcount_plot1 <- 
d %>% 
  select(review) %>% 
  unnest_tokens(word, review) %>% 
  filter(str_detect(word, '[a-z]+')) %>% 
  anti_join(stopwords) %>% 
  inner_join(emo) %>% 
  count(word, sort = TRUE) %>% 
  slice_head(n = 10) %>% 
  mutate(word = fct_reorder(word, n)) %>% 
  ggplot(aes(n, word)) +
  geom_col()

Das Diagramm sieht dann so aus:

Answerlist

  • Richtig
  • Falsch
  • Falsch
  • Falsch
  • Falsch

Categories:

  • textmining
  • imdb
  • schoice