Case Study / 2026

Conflict Sentiment Analysis

Eine vergleichende Methodikstudie, die quantifiziert, wie 8.158 englischsprachige Nachrichtenartikel den Russland-Ukraine-Konflikt über 68 Publisher und 18 Länder hinweg gerahmt haben. Drei Sentiment-Engines, ein Topic-Modell, deskriptiv für Media Framing.

4 min Lesezeit

Thumbnail Conflict Sentiment Analysis mit Sentiment-Polaritätswelle

Problem.

Wie sich Media Framing zwischen Publishern, Ländern und Themen unterscheidet, ist eine methodisch interessante Frage mit aktiver akademischer Literatur dahinter. Die schwierigere Variante der Frage ist, ob eine einzige Sentiment-Engine ausreicht, oder ob die Antwort davon abhängt, welcher Engine man vertraut.

Dieses Projekt quantifiziert, wie 8.158 englischsprachige Nachrichtenartikel den Russland-Ukraine-Konflikt über 68 Publisher und 18 Länder hinweg gerahmt haben, und prüft drei Sentiment-Engines plus ein Topic-Modell auf demselben Korpus, um sichtbar zu machen, wo sie übereinstimmen und wo sie auseinanderlaufen. Die Arbeit ist deskriptiv für Media Framing, nicht für die zugrundeliegenden Ereignisse.

Mein Beitrag.

Eigenständig, end-to-end:

  • Die Pipeline für Korpus-Ingestion und Cleaning gebaut. URL-Stripping, Normalisierung auf reine Buchstaben, Lowercase, Regex-Tokenisierung, Stopword-Removal, WordNet-Lemmatisierung über Verb- und Nomen-Wortarten hinweg.
  • Drei komplementäre Sentiment-Engines auf demselben Korpus verdrahtet, hinter einer abstrakten SentimentEngine-Basisklasse mit Registry-Pattern. Eine vierte Engine hinzuzufügen ist eine Klasse plus ein Registry-Eintrag.
  • Ein gensim-LDA-Modell mit fünf Topics über dem bereinigten Korpus aufgebaut, um sichtbar zu machen, worüber jeder Artikel spricht, nicht nur wie er darüber spricht. random_state für Reproduzierbarkeit fixiert.
  • Sentiment nach Publisher, Land und Topic kreuztabelliert. Der vorzeichenbehaftete Sentiment-Score des Transformers ist die primäre Cross-Publisher-Metrik. Die Lexikon-Engines liefern eine interpretierbare Gegenprobe.
  • Die pytest-Suite geschrieben, mit der Transformer-Engine vollständig gemockt, damit die CI nicht bei jedem Run gigabyteweise Weights herunterlädt. Lazy Load im Echtbetrieb, gemockter Load in Tests.
  • Die GitHub-Actions-Matrix-CI auf Python 3.10, 3.11 und 3.12 aufgesetzt, mit NLTK-Resource-Caching sowie ruff- und black-Gating.

Methodik und die Multi-Engine-Frage.

Der Grund, warum das Projekt drei Engines fährt, ist, dass lexikonbasiertes Sentiment (TextBlob, VADER) und transformerbasiertes Sentiment (RoBERTa) sich manchmal widersprechen, und gerade dieser Widerspruch informativ ist.

  • TextBlob (lexikalische Baseline). Naive-Bayes-Pattern-Polarität auf Basis eines Movie-Review-Priors. Günstig, interpretierbar, aber fehlausgerichtet zur Konfliktsprache.
  • VADER (Social- und News-Lexikon). Behandelt Verstärker, Negation und die Interpunktionsmuster, die in Headlines üblich sind.
  • CardiffNLP RoBERTa (cardiffnlp/twitter-roberta-base-sentiment-latest). Kontextueller Transformer, fine-tuned auf rund 124M Tweets. Erfasst Interaktionen, die Lexika übersehen, und ist die einzige Engine, die kalibrierte Drei-Klassen-Wahrscheinlichkeiten liefert. Vorzeichenbehaftete Konfidenz (positiv = +conf, negativ = -conf, neutral = 0) wird für die Cross-Publisher-Aggregation genutzt.

Wenn alle drei übereinstimmen, ist das Signal stark. Wenn der Transformer negativ und das Lexikon neutral sagt, hat man typischerweise verklausulierte oder sarkastische Sprache, die das Lexikon nicht erfasst. Wenn das Lexikon stark positiv und der Transformer leicht negativ sagt, hat man typischerweise stilistische Positivität, die das Lexikon hochscort, der Transformer aber im Kontext liest.

Das fünf-Topic-LDA liefert die zweite Achse. Sentiment zum selben Konflikt variiert scharf nach Topic, auf eine Weise, die die Headline-Zahl verdeckt.

Architektur.

                         configs/default.yaml
                                  |
                                  v
data/raw/*.xls -> loader -> cleaner -> preprocessor (URL strip, lowercase, tokenize, stopword, lemmatize)
                                                    |
                       +----------------------------+----------------------------+
                       |                            |                            |
                       v                            v                            v
                 TextBlobEngine             VaderEngine              TransformerEngine (RoBERTa)
                       \                           |                           /
                        \                          v                          /
                         +------------> sentiment_results.csv <-------------+
                                                  |
                              +-------------------+--------------------+
                              v                                        v
                    LDATopicModel (gensim)                     analysis (publisher,
                              |                                country, temporal,
                              v                                wordfreq)
                    topic_assignments.csv                              |
                    topic_summaries.json                               v
                                                              reports/figures

Ethische Erwägungen.

Dies ist methodische Forschung, kein Kommentar. Die Framing-Frage (wie Publisher einen Konflikt abdecken) ist in den Medienwissenschaften gut etabliert. Der Beitrag ist die Multi-Engine-Triangulation. Es werden keine Schlüsse darüber gezogen, welcher Publisher Recht hat, sondern nur darüber, wie sich ihre Framings unterscheiden.

Der ausschließlich englischsprachige Korpus schließt russische, ukrainische, arabische und chinesische Berichterstattung aus, und die Trainingsverteilung des Transformers neigt sich westlich, sodass nicht-westliche Stimmen systematisch fehlklassifiziert werden können. Aggregate sind relative Vergleiche, keine Ground-Truth-Schwere. Vor politischen oder operativen Schlüssen mit unabhängigen Quellen abgleichen.

Stack.

Python · HuggingFace Transformers · PyTorch · NLTK · gensim · pandas · pytest · ruff · black · GitHub Actions

Auf GitHub ansehen