Portfolio-Projekt

So funktioniert’s

Die Seite liest keine Artikel und wählt nichts von Hand aus. Sie sammelt nur die Schlagzeilen großer deutscher Medien und lässt Maschinen erkennen, welche davon dieselbe Geschichte erzählen. Je mehr Medien über eine Geschichte berichten, desto weiter oben steht sie. Alles läuft lokal und kostenlos, ohne bezahlte KI-Dienste.

  1. 1QuellenRSS-Feeds0 Medien
  2. 2SammelnPython · alle 20 Min.0 Schlagzeilen
  3. 3Verstehenbge-m3 Embeddings0 Vektoren
  4. 4GruppierenUMAP + HDBSCAN–
  5. 5BenennenLokales LLM (Ollama)–
  6. 6ZeigenNext.jsdiese Website
PostgreSQL + pgvectorJeder Schritt liest seine Eingabe aus der Datenbank und schreibt sein Ergebnis zurück.

Alle Bausteine laufen als Docker-Container und lassen sich mit einem Befehl starten.

1 · Quellen

16 Medien, nur Schlagzeilen

tagesschau, ZDFheute, SPIEGEL, ZEIT, FAZ, Süddeutsche, WELT, taz, Handelsblatt und weitere stellen ihre neuesten Meldungen als RSS-Feed bereit. Gespeichert werden ausschließlich Schlagzeile, Link und Zeitpunkt – keine Teaser, keine Artikeltexte. Jede Schlagzeile auf dieser Seite verlinkt auf das Original.

2 · Sammeln

Alle 20 Minuten ein Durchlauf

Ein kleiner Python-Dienst ruft die Feeds ab, entfernt Tracking-Parameter aus den Links und schreibt neue Schlagzeilen in die Datenbank. Taucht dieselbe Meldung wieder auf, wird sie nicht doppelt gespeichert. Fällt ein Feed aus, laufen die anderen weiter.

Schlagzeilen gesamt
0
Feed-Abrufe
0
3 · Verstehen

Aus Wörtern werden Zahlen

Das Sprachmodell bge-m3 übersetzt jede Schlagzeile in 1.024 Zahlen, einen sogenannten Vektor. Schlagzeilen mit ähnlicher Bedeutung bekommen ähnliche Vektoren – auch wenn sie ganz andere Wörter benutzen, etwa „Waffenruhe“ und „Feuerpause“. Das Modell läuft lokal auf der CPU, ohne Cloud-Dienst.

4 · Gruppieren

Dichte Gruppen werden Themen

Die Vektoren der letzten sieben Tage werden mit UMAP auf wenige Dimensionen verdichtet. HDBSCAN sucht darin Regionen, in denen viele Schlagzeilen nah beieinander liegen – jede solche Gruppe ist ein Thema. Einzelne Meldungen ohne Nachbarn bleiben bewusst ohne Thema. Typische Schlüsselwörter pro Thema liefert c-TF-IDF: Wörter, die in diesem Thema häufig und in anderen selten sind.

Thema AThema BThema Cgrau = keinem Thema zugeordnet
Schematische Darstellung
5 · Benennen

Ein lokales Sprachmodell schreibt die Titel

Schlüsselwörter allein sind schwer zu lesen. Deshalb bekommt ein Sprachmodell, das über Ollama auf demselben Rechner läuft, pro Thema die Schlüsselwörter und zehn typische Schlagzeilen. Es soll daraus einen sachlichen Titel mit höchstens acht Wörtern formulieren – ohne Fakten, die nicht in den Schlagzeilen stehen. Ist der Vorschlag zu lang oder eine Frage, wird er verworfen und neu angefragt. Aus den wichtigsten Themen schreibt es außerdem die Wochenübersicht.

6 · Zeigen

Die Website liest direkt aus der Datenbank

Diese Seite ist mit Next.js gebaut. Server-Komponenten fragen PostgreSQL direkt ab, eine eigene API gibt es nicht. Die Diagramme sind von Hand als SVG gezeichnet, ohne Chart-Bibliothek.

Grundsätze und Grenzen

Kostenlos und lokal

Alle Modelle sind offen und laufen auf eigener Hardware. Keine bezahlte API, keine Daten an Dritte.

Urheberrecht respektieren

Nur Schlagzeile, Link und Zeitpunkt werden gespeichert. Gelesen wird beim Original.

Maschinen machen Fehler

Manche Gruppen mischen zwei Geschichten, und Sprachmodelle können Titel ungenau formulieren. Die Schlüsselwörter und alle Schlagzeilen bleiben deshalb sichtbar.

Lücken in den Daten

Die Demo sammelt auf einem Laptop. Schläft er, entstehen Lücken – das sieht man in den Tagesdiagrammen.

Technik

  • Python
  • feedparser
  • PostgreSQL 18
  • pgvector
  • sentence-transformers
  • bge-m3
  • UMAP
  • HDBSCAN
  • c-TF-IDF
  • Ollama
  • Qwen 2.5
  • Next.js 16
  • React 19
  • TypeScript
  • Docker Compose