gwoe-wahlpruefsteine/DOKUMENTATION.md

172 lines
4.9 KiB
Markdown
Raw Normal View History

# 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 (MinMax 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*