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, die Media Framing beschreiben.

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 beschreibt Media Framing, nicht 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 und die Transformer-Engine dabei 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 schlecht auf Konfliktsprache abgestimmt.
  • 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 124 Mio. 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 hoch bewertet, der Transformer aber im Kontext liest.

Das Fünf-Topic-LDA liefert die zweite Achse. Sentiment zum selben Konflikt variiert stark nach Topic, auf eine Weise, die von der Headline-Zahl verdeckt wird.

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 über einen Konflikt berichten) 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.

Das ausschließlich englischsprachige Korpus schließt russische, ukrainische, arabische und chinesische Berichterstattung aus, und die Trainingsverteilung des Transformers ist westlich geprägt, 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