# Wahlprüfsteine-Auswertung — Technische Dokumentation ## Übersicht CLI-Tool zur automatisierten GWÖ-Analyse von Wahlprüfstein-Antworten mit Partei-Aggregation und Kandidat:innen-Ranking. ## Komponenten ### 1. Scraper (`scraper.py`) **Funktion:** Extrahiert Kandidat:innen und Antworten aus der ECOnGOOD-Webseite. **Ablauf:** 1. HTML von URL laden (oder lokale Datei) 2. Tabellen parsen mit BeautifulSoup 3. Parteinamen normalisieren (Fuzzy-Matching) 4. In SQLite speichern **Partei-Normalisierung:** ```python PARTEI_MAPPING = { r'bündnis\s*90\s*/?\s*die\s*grünen?': 'Grüne', r'freie\s*wähler': 'Freie Wähler', r'^csu$': 'CSU', # ... } ``` ### 2. Analyzer (`analyzer.py`) **Funktion:** Bewertet jede Antwort mit Qwen LLM nach GWÖ-Kriterien. **Prompt-Struktur:** - System: GWÖ-Matrix 2.0 Kontext + Bewertungsskalen - User: Frage + Antwort + Kandidat:in-Info - Output: Strukturiertes JSON **Bewertungsdimensionen:** - `substanz_score` (0-3): Konkretheit der Antwort - `umfang`: keine/kurz/mittel/ausführlich - `gwoe_score` (0-10): Übereinstimmung mit Matrix - `matrix_felder`: Berührte GWÖ-Felder (z.B. ["D5", "C2"]) - `staerken/schwaechen`: Qualitative Analyse **API-Konfiguration:** ```python client = OpenAI( api_key=keychain["qwen-api"], base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1" ) model = "qwen-plus" # oder qwen-max für höhere Qualität ``` ### 3. Aggregator (`aggregator.py`) **Funktion:** Erstellt Partei-Statistiken und Markdown-Reports. **Reports:** 1. `partei-auswertung.md` — Detailreport mit Zitaten + Bandbreiten + Substanz-Problem 2. `parteienlandschaft.md` — Komprimierte Übersicht 3. `kandidaten-ranking.md` — Alle 27 Kandidat:innen im Einzelranking mit Kategorisierung 4. `wahlempfehlung.md` — Begründete Empfehlung + Substanz-Problem + Verweis auf Kandidat:innen **Aggregations-Logik:** - Durchschnittswerte pro Partei (GWÖ, Substanz, Wortanzahl) - Bandbreiten pro Partei (Min–Max der Kandidat:innen) - Ja-Quote berechnen - Matrix-Felder aggregieren (häufigste pro Partei) - Top-3-Zitate pro Partei extrahieren - Kandidat:innen-Ranking mit Kategorisierung (Vorreiter / Solide / Schwach) - Übergreifende Beobachtungen (Substanz-Problem, Bandbreiten-Analyse) ### 4. CLI (`cli.py`) **Befehle:** ``` scrape Daten von URL laden analyze LLM-Bewertung durchführen aggregate Reports generieren status Datenbankstatus anzeigen export JSON-Export run Vollständiger Workflow ``` ## Datenbankschema ### Tabellen ```sql kandidaten (id, vorname, nachname, plz, kommune, landkreis, partei_raw, partei_normalisiert, ist_waehlergemeinschaft, pdf_url) fragen (id, nummer, kurztext, volltext) antworten_raw (id, kandidat_id, frage_id, antwort_kurz, antwort_erlaeuterung) bewertungen (id, antwort_id, substanz_score, umfang, wortanzahl, gwoe_score, gwoe_begruendung, matrix_felder, staerken, schwaechen, model, bewertet_am) ``` ### Views ```sql v_partei_statistik -- Aggregierte Statistiken pro Partei v_fragen_statistik -- Statistiken pro Frage v_top_antworten -- Beste Antworten sortiert nach GWÖ-Score ``` ## GWÖ-Matrix 2.0 Referenz ### Werte (Spalten) 1. Menschenwürde 2. Solidarität 3. Ökologische Nachhaltigkeit 4. Soziale Gerechtigkeit 5. Transparenz & Mitbestimmung ### Berührungsgruppen (Zeilen) - A: Lieferant:innen, Dienstleister:innen - B: Finanzpartner:innen, Steuerzahler:innen - C: Politische Führung, Verwaltung - D: Bürger:innen und Wirtschaft - E: Staat, Gesellschaft, Natur ### Relevante Felder für Kommunalpolitik - **D5**: Demokratische Einbindung (Bürgerbeteiligung) - **D2**: Gesamtwohl der Gemeinde - **C2**: Gemeinwohlorientierte Zielvereinbarung - **A3/A4**: Nachhaltige/soziale Beschaffung - **B5**: Partizipation in Finanzpolitik ## Reproduzierbarkeit Das Tool ist vollständig reproduzierbar ohne Dotty-Beteiligung: ```bash # Einmalige Einrichtung cd ~/Nextcloud/dotty/projekte/2026-03-29\ Wahlprüfsteine\ _WIP_/wahlpruefsteine python3 -m venv .venv source .venv/bin/activate pip install beautifulsoup4 requests openai # Ausführung python3 cli.py run ``` **Voraussetzungen:** - Python 3.11+ - Qwen API-Key in Keychain (`security find-generic-password -s qwen-api -w`) - Alternativ: `DASHSCOPE_API_KEY` Umgebungsvariable ## Kosten - **Qwen Plus:** ~$0.0006 pro Bewertung - **162 Bewertungen:** ~$0.10 gesamt - **Modell-Alternativen:** - `qwen-turbo`: günstiger, schneller, etwas weniger präzise - `qwen-max`: teurer, höhere Qualität ## Erweiterungsmöglichkeiten 1. **Andere Datenquellen:** Scraper für andere Wahlprüfstein-Formate anpassen 2. **PDF-Reports:** WeasyPrint oder Quarto für ECOnGOOD-Design 3. **Zeitreihen:** Vergleich über mehrere Wahlen 4. **Interaktives Dashboard:** Streamlit oder FastAPI + SvelteKit 5. **Andere Bundesländer:** Partei-Mapping anpassen (CDU statt CSU etc.) --- *Dokumentation erstellt: 29.03.2026*