multimodal_parliament_explo.../README.md
2025-03-23 23:49:34 +01:00

10 KiB
Raw Blame History

Multimodal Parliament Explorer (Gruppe_05_1)

Umgebung - wichtiger Hinweis!

Docker und NLP

Damit der Zugriff auf die Docker-Treiber funktioniert, muss man in IntelliJ folgendes tun:

Edit Run Environment --> Modify Option --> Add VM options

Dann im neu erscheinenden "VM options"-Feld folgendes schreiben:

--add-opens java.base/java.util=ALL-UNNAMED

LaTex Export

Damit der LaTeX Export funktioniert, muss der LaTeX Compiler installiert sein.

Unter Ubuntu (Linux) kann das Paket mit dem folgenden Befehl installiert werden:

sudo apt install texlive-latex-extra

Unter Windows ist die Installation über MikTex möglich.

Ist kein Compiler installiert, wird beim Start des Programms eine Warnung ausgegeben:

-------------------------------------------------o
TeX SDK not installed. PDF export will not work.
-------------------------------------------------o

Aufruf

Der Nutzer führt die Main.java Datei aus. Folgende Command Line Argumente werden akzeptiert:

  • onlyRunWeb: Fährt die WebServies hoch und wartet auf Requests. Die Einstiegsseite kann im Browser geöffnet werden: http://localhost:5876 (Port 5876 ist in der Resourcendatei javalin.properties definiert). In der Regel würde man Main nur mit diesem Parameter aufrufen.
  • uploadMemberPhotos: Um Parlamentarierfotos vom Resource-Verzeichnis in die Datenbank hochzuladen.
  • forceUploadMembers: Lädt die Daten der Parlamentariern erneut in die Datenbank.
  • forceUploadSpeeches: Lädt die Reden erneut in die Datenbank, führt die NLP-Analyse auf der Reden und speichert die Analyseergebnisse in die Datenbank.
  • rebuildMetadata: Berechnet die Metadaten neu. In der Metadata-Collection stehen Daten, welche oft benötigt werden, aber nicht jedes Mal erneut berechnet werden sollen. Momentan sind es die Liste der Parteien und die Liste der möglichen NLP-Topics.
  • debugLogging: Diese Flag bestimmt, ob Debug-Ausgaben des Loggers angezeigt werden sollen.

Dokumentation

  • Use Case Diagramm
  • Package/Klassen-Diagramm
  • Die Planung
  • Das Gantt Diagramm stehen im "doku"-Verzeichnis.

Die Planung beinhaltet:

  • Die Liste der Aufgaben, nach Bereichen gruppiert. Die Bereiche sind: Planung, Domain-Entitäten, XML, Datenbank, Rest Services, Front End, NLP-Verarbeitug, Export, Dokumentation
  • Wer macht was
  • Geschätzter Aufwand (niedrig / mittel / hoch)

Classdiagram puml generator

Das Classdiagram wird durch den puml generator generiert:

python puml_generator.py

Die aktuelle Version des Klassen-/Package-Diagramms ist bei der Abgabe unter generated_class_diagram.puml zu finden. Außerdem gibt es das Diagram auch als LaTe, PDF und Bild (png) Version im /doc Ordner zu funden.

Datenbank

Die wichtigsten Collections sind "speech" und "speaker". In "pictures" stehen die Bilder der Abgeordneten. In "metadata" stehen die bereits erwähnten Metadaten. Die Collections "agendaItems" und "sessions" werden zwar initial befüllt und kurzzeitig verwendet, um die Zeitstempel der Reden sowie die Agendapunkte zu konstruieren, werden aber danach nicht weiter verwendet.

Erzeugung der NLP-Daten

Ressourcenbereitstellung:

  • Die benötigten Annotationen werden aus dem Ressourcenordner geladen
  • Es wird vorausgesetzt, dass in der "speeches"-Collection eine ZIP-Datei (20.zip) vorhanden ist, die alle erforderlichen Annotationen enthält
  • Zusätzlich muss das TypeSystem in Form der Datei TypeSystem.xml vorliegen, um die korrekte Umwandlung der Annotationen in den JCas zu ermöglichen.

Abruf der Reden:

  • Die Reden werden anhand der eindeutigen ID (speechKey) aus der Datenbank abgerufen.
  • Dabei werden die Reden, die bereits annotiert vorliegen, zur weiteren Verarbeitung selektiert

Annotationen verarbeiten:

  • Die geladenen Annotationen werden in einen JCas (Java Common Analysis Structure) umgewandelt.
  • Im JCas werden die Annotationen serialisiert, sodass sie in einem einheitlichen Format vorliegen.
  • Anschließend werden diese serialisierten Daten in der Datenbank dem entsprechenden Speech-Dokument zugeordnet und gespeichert

Remote-Verarbeitung:

  • Reden, die nicht in der 20.zip vorhanden sind also noch nicht lokal annotiert wurden werden anschließend durch den RemoteDriver verarbeitet.
  • Der RemoteDriver ruft dabei externe NLP-Komponenten (z.B. spaCy oder Vader) auf, um fehlende Annotationen zu erzeugen.
  • Auch die Ergebnisse der Remote-Verarbeitung werden serialisiert und in der Datenbank an das zugehörige Speech-Dokument angehängt.

Komponenten und Package Struktur

  • database: die Klasse MongoDBHandler kümmert sich um die Herstellung der Datenbankverbindung und um generelle CRUD-Operationen. Die Klasse MongoPprUtils kümmert sich um das Lesen der Objekte und Datenstrukturen, die für diese Übung notwendig sind.

  • domain: hier werden die Entitäten definiert. Subpackage "database" behandelt die Objekte, die aus der Datenbank kommen. Subpackage "html" behandelt die Objekte, die nicht in der Datenbank sind und lediglich angezeigt werden.

  • rest: alles, was mit den WebServices zu tun hat - die 4 Controller (für Parlamentarier, Fotos, Videos und Reden), eine Configklasse und der Handler. Im Handler wird die Javalin-Konfiguration definiert sowie die Routes für die 8 Endpoints.

  • export: alles, was mit dem Export (LaTex/PDF, XML) zu tun hat, findet hier Platz.

  • xml: für das Einlesen der Parlamentarier- und Rede-Daten.

  • util: eine kleine Sammlung von Utility-Klassen.

  • nlp: Utils für die NLP-Verarbeitung

  • exceptions: für die Exceptions

Struktur des resources-Ordner

  • config: config files für javalin und für XML (im letzteren steht die URL zum Herunterladen der Parlamentarier)

  • plenarprotokolle: enthält die DTD-Datei zum Parsen der Abgeordnetendaten

  • speeches: enthält die Datei TypeSystem.xml

  • static: enthält das Stylesheet und das Favicon

  • templates: enthält die FreeMarker-Templates

  • tex: enthält die nötigen Resourcen für Latex, etwa die preamble.tex

Ablauf / Workflow

Wir gehen hier vom Workflow des Endnutzers aus.

Wie man die Daten hochlädt, wurde bereit oben kurz erklärt.

  1. Die Klasse Main wird ausgefüht und zwar mit dem "onlyRunWeb" Parameter.
  2. Javalin fährt die Webservices hoch und wartet auf Requests.
  3. Der User lädt die Einstiegsseite im Browser, etwas http://localhost:5876 . Die Startseite wird angezeigt. Das Hauptmenü enthält im Burgermenü Links zu "Parlamentarier", "Reden", "Exportieren" sowie "Home" und "Über".

Parlamentarier-Seite

Eine Liste der Parlamentarier wird angezeigt. Man kann die Liste filtern. Man kann auf die jeweiligen Parlamentarier klicken und gelangt dann auf die Seite eines Parlamentariers.

Die Seite eines Parlamentariers beinhaltet Name, Foto, persöhnliche Daten, Mitgliedschaften und einen Link zu den Reden des Parlamentariers.

Reden-Seite

Es werden alle Reden der jetzigen Legislaturperiode angezeigt. Man kann die Liste filtern (MOMENTAN NOCH ZU IMPLEMENTIEREN). Man kann auf die jeweilige Rede klicken und gelangt dann auf die Rede-Seite.

Redeseite

Folgende Informationen werden angezeigt:

  • Informationen zum Redner (Name, Partei, Foto).
  • Informationen zur Rede (Datum, Uhrzeit, Agendapunkt).
  • Redetext. Vorstellung und Kommentare werden farblich gekennzeichnet.
  • Video bei Reden der Sitzung 187 Tagesordnungspunkt 4
  • NLP Informationen.

Der NLP-Abschnitt beinhaltet folgende Informationen:

  • Topics Information (als Bubble Chart): dabei entspricht die Größe der Bubbles der Häufigkeit/Prävalenz der Topics. Durch einen Mouse-Hover verändert sich die Schriftgröße, damit man auch die Texte der kleinen Bubbles sehen kann.
  • POS Information (als Bar Chart): Auf der X-Achse werden alle verschiedenen POS-Elemente die in der Rede erfasst wurden abgebildet, auf der Y-Achse die genaue Anzahl dieser Elemente.
  • Sentiments Information (als Radar Chart): Dieses Chart besitzt 3 Achsen, eine für den wert des positiven sentiments, eine für das negative sentiment, und die letzte für das neutrale sentiment. Die mitte des Charts steht für den Wert 0, und jede Ecke steht für den Wert 1 des zugehörigen sentiments. Es wird jeder analysierte Satz inklusive die gesamte Rede abgebildet. Ein Polygon steht hierbei für einen bestimmten analysierten Abschnitt der rede. Rechts neben dem Chart ist eine Legende aller Analysierten Objekte, von welchem das erste die Werte der gesamten Rede, und alle danach die einzelnen Satzteile darstellen.
  • Named Entities (als Sunburst Chart): der innere Kreis steht für den Typ (LOC, PER, ORG, MISC). Der äußere Kreis steht für die jeweiligen Named Entities. Die Größe der Bögen entsprechen den Häufigkeiten der Entitäten bzw. der Typen.

Ein "Zurück"-Button ist auf den Seiten implementiert. Er führt erwartungsgemäß zur vorherigen Seite.

Charts-Seite

Gleiche Struktur wie die Charts für die einzelnen reden, hier nur auf alle in der Datenbank vorhandenen Reden angewendet. Die sammlung der Daten passiert hier dynamisch ab Abruf der Seite.

Export-Seite

Wie auch auf den einzelnen Seiten, gibt es hier die Option Reden zu exportieren. Es kann zwischen PDF und XML gewählt werden. Die verschiedenen Export-Optionen sind:

  • Export einer einzelnen Rede (mit Reden-ID)
  • Export aller Reden eines Parlamentariers (mit Parlamentarier-ID)
  • Export aller Reden eines NLP-Topics (mit Topic-String)
  • Export aller Reden (ohne Parameter)

Achtung: Der Export kann je nach Anzahl der Reden und der gewählten Option einige Zeit in Anspruch nehmen. Meist wird der Nutzer darüber informiert, dass der Prozess länger dauern kann.

Verschiedenes

Nachladen neuer Reden (Thread)

Alle 10 Minuten checkt das Programm, ob auf der Bundestags.de Website neue Reden erschienen sind. Wenn neue Reden erkannt werden, werden diese heruntergeladen, mit dem RemoteDriver verarbeitert und abschließend noch in die Datenbank hochegladen. Auch wenn einfach so Reden in die Datenbank hinzugefügt werden, werden diese verarbeitet.

Upload member Images

Crawl member images (not required as already in repository)

cd src/main/resources
python member_images_crawler.py

They are stored in /src/main/resources/membersOfParliamentImages

To Force Update the images after having run the crawler, add the uploadMemberPhotos argument to the programm arguments in intellij (More Actions for run configuration -> Programm Arguments)