twitter05

textmining
twitter
Published

October 28, 2022

Exercise

Laden Sie \(n=10^k\) Tweets von Twitter herunter (mit \(k=2\)) via der Twitter API; Suchterm soll sein “@karl_lauterbach”. Bereiten Sie die Textdaten mit grundlegenden Methoden des Textminings auf (Tokenisieren, Stopwörter entfernen, Zahlen entfernen, …).

Nutzen Sie die Daten, um eine Sentimentanalyse zu erstellen.











Solution

Nutzen Sie die Daten der letzten Aufgabe, um eine Sentimentanalyse zu erstellen.

Zuerst muss man sich anmelden und die Tweets herunterladen; dieser Teil ist hier nicht aufgeführt (s. andere Aufgaben).

library(rtweet)
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.3     ✔ readr     2.1.4
✔ forcats   1.0.0     ✔ stringr   1.5.0
✔ ggplot2   3.4.4     ✔ tibble    3.2.1
✔ lubridate 1.9.3     ✔ tidyr     1.3.0
✔ purrr     1.0.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter()  masks stats::filter()
✖ purrr::flatten() masks rtweet::flatten()
✖ dplyr::lag()     masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(tidytext)
library(lsa)  # Stopwörter
Loading required package: SnowballC
library(SnowballC)  # Stemming

Beachten Sie, dass die Spalten je nach Funktion, die Sie zum Herunterladen der Tweets verwenden, unterschiedlich heißen können.

karl2 <- 
  karl1 %>% 
  select(contains("text"))
karl3 <- 
  karl2 %>% 
  unnest_tokens(output = word, input = text)
karl4 <- 
karl3 %>% 
  anti_join(tibble(word = lsa::stopwords_de)) 
Joining with `by = join_by(word)`
karl5 <- 
  karl4 %>% 
  mutate(word = str_replace_na(word, "^[:digit:]+$")) %>% 
  mutate(word = str_replace_na(word, "hptts?://\\w+")) %>% 
  mutate(word = str_replace_na(word, " +")) %>% 
  drop_na()
data(sentiws, package = "pradadata")
karl7 <-
  karl5 %>% 
  inner_join(sentiws)
Joining with `by = join_by(word)`
karl7 %>% 
  group_by(neg_pos) %>% 
  summarise(senti_avg = mean(value, na.rm = TRUE),
            senti_sd = sd(value, na.rm = TRUE),
            senti_n = n())
# A tibble: 2 × 4
  neg_pos senti_avg senti_sd senti_n
  <chr>       <dbl>    <dbl>   <int>
1 neg        -0.347    0.186       2
2 pos         0.167    0.283       3

Achtung, Sentimentanalyse sollte vor dem Stemming kommen.


Categories:

  • textmining
  • twitter