LSA: VOLL-Hit-Parser für PortalaAdapter (WEV01/WEV03 + Antrag-Filter) #14

Closed
opened 2026-04-08 16:38:35 +02:00 by tobias · 1 comment
Owner

Sub-Issue von #13. Reverse-Engineering des Tag-Schemas ist abgeschlossen, der Code-Patch für _build_fulltext_body funktioniert lokal — nur das Hit-Parsing hängt am unterschiedlichen Format zwischen Standard-Browse und Volltext-Mode.

Hit-Format-Diff

Feld Standard-Browse VOLL-Mode
Titel WEV06.main WEV01.main
Doc-Art (nicht in der Hit-list, server-gefiltert) WEV03.main (z.B. "Antrag", "Unterrichtung", "Kleine Anfrage")
WEV32.main Layout "Antrag <Urheber> <DD.MM.YYYY> Drucksache <b>X/Y</b> ..." "<Doc-Art> <Urheber> <DD.MM.YYYY> Drucksache <b>X/Y</b> (<S>)"
PDF-Pfad WEV32.5 dito

Was zu tun ist

In app/parlamente.py PortalaAdapter._parse_hit_list_dump:

  1. Title-Regex als Alternation: WEV06|WEV01 (Standard hat Vorrang).
  2. Neuer Doc-Art-Regex auf WEV03.main — wenn vorhanden und gleich Antrag, behalten; sonst überspringen. Damit funktioniert der Antrag-Filter client-side für den VOLL-Mode.
  3. _RE_URHEBER_DATUM flexibler: aktuell hardcoded Antrag\s+(.+?)\s+(\d{1,2}\.\d{1,2}\.\d{4})\s+Drucksache. Stattdessen (?:Antrag|Unterrichtung|Anfrage|Gesetzentwurf|Beschlussempfehlung|...)\s+(.+?)\s+(\d{1,2}\.\d{1,2}\.\d{4})\s+Drucksache.

Akzeptanzkriterien

  • ADAPTERS["LSA"].search("Schule", limit=10) liefert ≥10 echte Anträge mit nicht-leerem datum und nicht-leeren fraktionen
  • Anträge im Result haben tatsächlich Schule im Titel oder im Volltext
  • Anderer Doc-Arten (Unterrichtung, Kleine Anfrage) tauchen NICHT auf
  • Lokaler + Live-Smoke-Test grün

Der Patch für _build_fulltext_body selbst (~50 Zeilen) liegt im lokalen Working-Tree der 2026-04-08-Adapter-Session — bei Wiederaufnahme einfach reaktivieren.

Sub-Issue von #13. Reverse-Engineering des Tag-Schemas ist abgeschlossen, der Code-Patch für `_build_fulltext_body` funktioniert lokal — nur das Hit-Parsing hängt am unterschiedlichen Format zwischen Standard-Browse und Volltext-Mode. ## Hit-Format-Diff | Feld | Standard-Browse | VOLL-Mode | |---|---|---| | Titel | `WEV06.main` | `WEV01.main` | | Doc-Art | (nicht in der Hit-list, server-gefiltert) | `WEV03.main` (z.B. `"Antrag"`, `"Unterrichtung"`, `"Kleine Anfrage"`) | | `WEV32.main` Layout | `"Antrag <Urheber> <DD.MM.YYYY> Drucksache <b>X/Y</b> ..."` | `"<Doc-Art> <Urheber> <DD.MM.YYYY> Drucksache <b>X/Y</b> (<S>)"` | | PDF-Pfad | `WEV32.5` | dito | ## Was zu tun ist In `app/parlamente.py` `PortalaAdapter._parse_hit_list_dump`: 1. **Title-Regex** als Alternation: `WEV06|WEV01` (Standard hat Vorrang). 2. **Neuer Doc-Art-Regex** auf `WEV03.main` — wenn vorhanden und gleich `Antrag`, behalten; sonst überspringen. Damit funktioniert der Antrag-Filter client-side für den VOLL-Mode. 3. **`_RE_URHEBER_DATUM` flexibler**: aktuell hardcoded `Antrag\s+(.+?)\s+(\d{1,2}\.\d{1,2}\.\d{4})\s+Drucksache`. Stattdessen `(?:Antrag|Unterrichtung|Anfrage|Gesetzentwurf|Beschlussempfehlung|...)\s+(.+?)\s+(\d{1,2}\.\d{1,2}\.\d{4})\s+Drucksache`. ## Akzeptanzkriterien - [ ] `ADAPTERS["LSA"].search("Schule", limit=10)` liefert ≥10 echte Anträge mit nicht-leerem `datum` und nicht-leeren `fraktionen` - [ ] Anträge im Result haben tatsächlich `Schule` im Titel oder im Volltext - [ ] Anderer Doc-Arten (Unterrichtung, Kleine Anfrage) tauchen NICHT auf - [ ] Lokaler + Live-Smoke-Test grün Der Patch für `_build_fulltext_body` selbst (~50 Zeilen) liegt im lokalen Working-Tree der 2026-04-08-Adapter-Session — bei Wiederaufnahme einfach reaktivieren.
Author
Owner

Verworfen — der Use-Case "echte Server-side Volltextsuche" wird zurückgestellt, weil das Schema zwischen LSA und BE nicht uniform ist (LSA akzeptiert /VOLL, BE lehnt es mit Unable to generate query ab) und ein gemischtes Verhalten der Adapter (NRW+MV mit Volltext, BE+LSA ohne) verwirrender ist als ein einheitlicher Title-Filter überall.

Stattdessen wird die Suche in allen vier Adaptern auf Title + Urheber + Schlagwort über den gesamten Datenbestand der laufenden WP umgestellt, sortiert newest-first. Tracking dafür: #18.

Wenn die Volltextsuche später wieder gewünscht wird (sobald sie für alle vier Adapter gleich umsetzbar ist), kann dieses Issue reopened werden — die HAR-Findings im vorigen Kommentar sind wertvoll und sollten erhalten bleiben.

Verworfen — der Use-Case "echte Server-side Volltextsuche" wird zurückgestellt, weil das Schema zwischen LSA und BE nicht uniform ist (LSA akzeptiert `/VOLL`, BE lehnt es mit `Unable to generate query` ab) und ein gemischtes Verhalten der Adapter (NRW+MV mit Volltext, BE+LSA ohne) verwirrender ist als ein einheitlicher Title-Filter überall. Stattdessen wird die Suche in allen vier Adaptern auf **Title + Urheber + Schlagwort über den gesamten Datenbestand der laufenden WP** umgestellt, sortiert newest-first. Tracking dafür: #18. Wenn die Volltextsuche später wieder gewünscht wird (sobald sie für alle vier Adapter gleich umsetzbar ist), kann dieses Issue reopened werden — die HAR-Findings im vorigen Kommentar sind wertvoll und sollten erhalten bleiben.
Sign in to join this conversation.
No description provided.