Diktionärbasierte Ansätze

Author

Jule Madita Engelmann & Alina Rump

1. Einführung

Diktionärbasierte Ansätze verfolgen das Ziel, latente Konstrukte in Texten messbar zu machen.

Latente Konstrukte sind theoretische Konzepte wie Sentiment, Populismus oder Emotionalität, die nicht direkt beobachtbar sind, sondern nur über sprachliche Indikatoren erschlossen werden können.

Die Grundannahme lautet:

Bestimmte Wörter sind systematisch mit bestimmten Konstrukten verbunden.

Je häufiger diese Wörter in einem Text auftreten, desto stärker ist das Konstrukt ausgeprägt.


Diktionärbasierte Ansätze gehören zu den klassischen, regelbasierten Verfahren der quantitativen Textanalyse und werden insbesondere bei großen Textkorpora eingesetzt.


1.1 Funktionsprinzip diktionärbasierter Ansätze

Ein Diktionär (Lexikon) ist eine vordefinierte Liste von Begriffen, die einem oder mehreren Konstrukten zugeordnet sind.

Typische Konstrukte sind beispielsweise:

  • positives vs. negatives Sentiment

  • populistische Rhetorik

  • emotionale oder aggressive Sprache

Die Analyse erfolgt in mehreren Schritten:

  1. Texte werden tokenisiert, also in einzelne Wörter zerlegt.

  2. Wörter werden mit dem Diktionär abgeglichen.

  3. Treffer werden gezählt oder – je nach Methode – gewichtet.

Alle Wörter, die nicht im Diktionär enthalten sind, werden ignoriert.


1.2 Einfache Diktionäre und ihre Einschränkungen

In den einfachsten Fällen bestehen Diktionäre aus Unigrammen, also einzelnen Wörtern, die jeweils genau einem Konstrukt zugeordnet sind. Alle enthaltenen Wörter werden gleich gewichtet.

Diese Vorgehensweise ist einfach und effizient, bringt jedoch Einschränkungen mit sich:

  • Kontext wird nicht berücksichtigt

  • grammatikalische Strukturen werden ignoriert

  • Negationen werden häufig nicht erkannt

Ein klassisches Beispiel ist die Negation:

  • „Ich bin glücklich“

  • „Ich bin nicht glücklich“

Beide Sätze enthalten das Wort „glücklich“ und können daher denselben positiven Wert erhalten, obwohl ihre Bedeutung gegensätzlich ist.

Trotz dieser Einschränkungen liefern gut etablierte Lexika insbesondere bei großen Textmengen häufig zufriedenstellende Ergebnisse.

2. Grundlagen

2.1 Technische Grundlage: Vorbereitung des Korpus (quanteda)

Zur praktischen Umsetzung diktionärbasierter Ansätze wird im Folgenden das R-Paket quanteda verwendet.

Zunächst werden die benötigten Pakete geladen und der Datensatz eingelesen:

library(tidyverse)
library(tidytext)
library(quanteda)

tweets <- read_csv("Data/trump_biden_tweets_2020.csv") %>% 
  mutate(day = str_sub(date, 1, 10)) #ersten 10 Zeichen des Datensatzen als Tag-Varibale

Da wir für jeden Tweet das exakte Erscheinungsdatum in der Form YYYY/MM/DD hh::mm::ss in der Variable date vorliegen haben, können wir hierzu einfach die ersten zehn Zeichen dieser Variable extrahieren. Diese neue Variable erleichtert uns im Folgenden die Auswertung auf Tagesebene.


Anschließend wird ein Korpus erzeugt:

tweets_corpus <- corpus(
  tweets,
  docid_field = "id",
  text_field = "content"
)

Das Korpus stellt die zentrale Datenstruktur dar und enthält sowohl die Texte als auch zugehörige Metadaten wie Account und Datum.


2.2 Beispiel: Konstruktion eines eigenen Diktionärs („Trumpisms“)

Zur Illustration wird ein eigenes Diktionär erstellt, das typische Begriffe aus dem Sprachstil Donald Trumps enthält. Die Daten entnehmen wir diesem Artikel in The Atlantic.

Solche Diktionäre dienen häufig dazu, stilistische oder rhetorische Muster sichtbar zu machen.

trump_words <- str_split(
  "amazing / great / tremendous / sad / fake / huge / disaster",
  pattern = " / ",
  simplify = TRUE
) 
#Character-Vektor mit Trennzeichenkette ("/")


Um die Begriffsliste in quanteda zu nutzen, erstellen wir mit der Funktion dictionary() ein Dictionary-Objekt. Dabei übergeben wir eine Liste, deren Einträge Konstrukte repräsentieren und die zugehörigen Begriffe enthalten. In unserem Fall gibt es nur ein Konstrukt: trumpisms.

trumpisms_dictionary <- dictionary(
  list(trumpisms = trump_words)
)


Ausgabe:

## Dictionary object with 1 key entry.
## - [trumpisms]:
## - amazing, beautiful, best, big league, brilliant, elegant, fabulous, fantastic, fine, good, great, happy, honest, incredible, nice, outstanding, phenomenal, powerful, sophisticated, special [ ... and 70 more ]


2.3 Anwendung des Diktionärs auf das Textkorpus

Die eigentliche Auszählung erfolgt mit der Funktion dfm():

dfm(
  tweets_corpus,
  dictionary = trumpisms_dictionary,
  groups = "account"
)

quanteda übernimmt dabei automatisch:

  • die Tokenisierung der Texte

  • die Umwandlung in Kleinbuchstaben

  • das Ignorieren nicht im Diktionär enthaltener Wörter

## Document-feature matrix of: 2 documents, 1 feature (0.0% sparse) and 1 docvar.
##                  features
## docs              trumpisms
##   JoeBiden              442
##   realDonaldTrump      2233

Das Ergebnis ist eine Dokument-Feature-Matrix, in der jede Spalte einer Diktionärkategorie entspricht und jede Zeile ein aggregiertes Dokument darstellt.


2.4 Gewichtung und Vergleichbarkeit

Absolute Häufigkeiten sind für Vergleiche nur bedingt geeignet, da Texte unterschiedlich lang sind. Da Donald Trump deutlich mehr Tweets verfasst als Joe Biden, würden reine Zählungen sein Sprachverhalten verzerren. Deshalb werden die Werte proportional gewichtet.

Zunächst fassen wir alle Tweets eines Accounts zu einem Dokument zusammen, gewichten die DFM mit dfm_weight(scheme = "prop") und wenden anschließend erneut unser Dictionary an:

dfm(tweets_corpus, groups = "account") %>% 
  dfm_weight(scheme = "prop") %>% 
  dfm(dictionary = trumpisms_dictionary)


Ausgabe:

## Document-feature matrix of: 2 documents, 1 feature (0.0% sparse) and 1 docvar.
##                  features
## docs                trumpisms
##   JoeBiden        0.007872052
##   realDonaldTrump 0.028331451

Die Ergebnisse lassen sich direkt interpretieren: Rund 2,8 % aller Wörter in Trumps Tweets sind Trumpisms, bei Joe Biden lediglich etwa 0,8 %. Auch relativ zur Textlänge verwendet Trump diese Begriffe somit deutlich häufiger als Biden.