Skip to content

Skizze Sentiment-Analyse #21

@ablaette

Description

@ablaette

Startpunkt ist das AfD-Wahlprogramm im btw2021-Paket:

remotes::install_github("PolMine/btw2021")
library(btw2021)
length(afd2021)

Wir definieren einen Suchterm ...

query <- "multikult.*"

tokenisieren das Wahlprogramm ...

w <- tokenizers::tokenize_words(afd2021, strip_punct = FALSE)

und bringen das in ein tabellarisches Datenformat

df <- data.frame(word = unlist(w))
df[["pos_id"]] <- 1:nrow(df)

Wir suchen die Treffer für unseren Suchterm

matches <- grep(query, df$word)

und ziehen die Wortkontexte aus der Tabelle

contexts <- list()
for (i in 1:length(matches)){
  contexts[[i]] <- df[(matches[i] - 10):(matches[i] + 10),]
  contexts[[i]][["match_no"]] <- i
}
df_sub <- do.call(rbind, contexts)

Nun weisen wir den Worten im Wortkontext die SentiWS-Gewichte zu. Dafür nutzen wir einen Ausschnitt aus der SentiWS-Tabelle.

senti_ws_min <- senti_ws[, c("word", "weight")]
senti_ws_min$word <- tolower(senti_ws_min$word)

Das verbinden wir jetzt.

pimped <- left_join(df_sub, senti_ws_min, by = "word")

Der einfachste Ansatz ist nun, die Wortgewichte aufzusummieren und das Ergebnis durch Division der Worte in der Tabelle zu normalisieren.

sum(pimped$weight, na.rm = TRUE) / nrow(pimped)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions