PPR Gruppenabgabe WS2425
Find a file
2025-03-23 19:50:10 +01:00
doc updated puml and added different versions of it to /doc 2025-03-23 19:49:49 +01:00
src Merge remote-tracking branch 'origin/main' 2025-03-23 19:28:26 +01:00
.DS_Store Modified Bubble Chart, Added Images to Speech, Added Speeches Tab, modified filter, loading of speeches for individual politicians is quicker 2025-03-19 22:46:58 +01:00
.gitignore pushing some non-functional code 2025-03-23 02:41:33 +01:00
generated_class_diagram.puml updated puml and added different versions of it to /doc 2025-03-23 19:49:49 +01:00
pom.xml removed left-over lombok 2025-03-12 20:58:23 +01:00
PPR_WiSe24_Project_5_1.txt DB-Zugang 2025-02-19 13:50:30 +00:00
puml_generator.py fixed is_line_method_declaration for interfaces 2025-03-05 15:16:50 +01:00
README.md updated readme with export doc 2025-03-23 19:50:10 +01:00

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

TODO HENRY

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.
  • 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.
  • 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) - TODO

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)