Commit graph buzz-rss/validate_filter.py
Author SHA1 Message Date
Eddy de Vink
ac30575660 v1.15.0: filter vereenvoudigd naar drie regels — 30 semantische groepen i.p.v. families+whitelist+blacklist
- Strip de filter terug tot: (1) sterk signaal in de titel -> door;
  (2) score van unieke semantische groepen >= 3 met titel-signaal -> door;
  (3) anders weg. Geen whitelist (82 termen), geen blacklist, geen span-merge,
  geen dienststoring-titelanker meer; woordgrenzen/lookbehinds weren de
  bekende botsingen structureel (schoolbus/VW-bus/stationsstraat/stationair/
  treinstraat/treinweg).
- Lijsten 49 families + 82 whitelist + 2 blacklist = 133 -> 16 sterk + 14
  ambigu = 30 groepen; filterzone 524 -> ~292 regels; match-methodes 4 -> 2.
- Vijf historische uitzonderings-families geschrapt (busongeluk, sein, breng,
  hermes, inchecken, kaartje, rails, staking, e.d.) — die woorden leveren nu
  0 signalen op en de bekende false positives blijven geweerd.
- Completheids-audit ving de Maaslijn/Nedersaksenlijn/Kamperlijn/waterbus-
  regressie op (hersteld); resterende zero-hit-kandidaten geen wijziging.
- validate_filter.py: invarianten 1-3 + 113 regressie-cases (90 onveranderd
  groen + 23 nieuw); prompt-matrix 27/27.
- Gedragswijziging op 45 productiedagen: uitsluitend false positives extra
  geweerd (buitenlandse veerboot-rampen, Zwitsers busongeluk, delftopzondag
  tram+halte, Cox/RET, tram-blokkade); 0 recalls verloren.
- README/AGENTS.md/vault bijgewerkt.
2026-09-13 09:28:28 +02:00
Eddy de Vink
91d0c3d7fe v1.14.0: refactor OV-filter naar driestapsmodel — één regel i.p.v. drie uitzonderingstakken
- _filter_passes: 'zwak-alleen in samenvatting' en 'sterk+zwak uitsluitend in
  samenvatting' reduceren tot één regel: zonder enig titel-signaal (familie-hit,
  whitelist-term of storingszin) mag de score geen zwak woord bevatten.
  Equivalentie bewezen over de volledige beslissing-ruimte (420 configuraties).
- Nieuwe dienststoring-context 'vervoerswoord rijdt/rijden niet' (gedeeld
  patroon): sterk titel-signaal (+2) en familie (2) — 'sprinters rijden niet
  tussen Utrecht en Amsterdam', 'metro rijdt niet tussen Rotterdam en
  Schiedam' passeren nu; bus/tram/metro/sprinter zelf blijven zwak/medium.
- Overlappende regexes opgeruimd: busbaan/bushokje uit de halte-familie.
- Blacklist 29 -> 2 woorden: restant (stationsstraat, stationair, stationcar,
  stationeren ...) was inert sinds de woordgrens-familie; vastgelegd in tests.
- validate_filter.py: 56 -> 90 regressie-cases + invariant 4 (whitelist-term
  in familie, blacklist-term door familie gematcht).
- _filter_summary/beleidsdocumentatie geactualiseerd.
2026-09-13 08:57:49 +02:00
Eddy de Vink
1346cbb549 v1.13.0: één term = één signaal — overlappende familie-treffers wegen 1×
'busbaan' stond in de bus-samenstelling-familie (fam 4) én de
halte/busbaan-familie (fam 13): één woord scoorde 2+2=4 en liet zo
een niet-OV-bericht door (Omroep Brabant politie-achtervolging 'via
de busbaan', 13-09-2026). Latente dubbeltellingen: 'ov-chipkaart'
bevat 'chipkaart', 'openbaar vervoer' bevat 'vervoer'.

_fam_hits voegt nu overlappende span van verschillende families samen
met het hoogste gewicht (retour blijft (familie-index, gewicht), dus
de familie-één-signaal-regel over titel+samenvatting is intact).
Beleidscommentaar + regressie (56 cases) bijgewerkt; 45-dagen-replay
(90 geposte entries): precies 1 gedragsverschil — het fatbikers-
bericht wordt nu geweerd, delftopzondag (tram+halte, twee termen)
blijft door (besluit 2026-09-13).
2026-09-13 08:37:17 +02:00
Eddy de Vink
7997d7572a v1.12.0: max-2-stelsel — enkele familie-hit kan nooit solo doorlaten
- Gewicht-3-tier vervallen: alle families wegen max 2; drempel blijft 3,
  dus elke echte OV-bericht combineert met een tweede signaal (besluit
  2026-09-12, gevalideerd op 205 productie-artikelen).
- 'hermes' uit vervoerders + whitelist -> eigen zwakke familie (achternaam
  Ton Hermes, Margraten false positive 2026-09-12).
- Whitelist geen auto-pass meer: titel-hit = +2 titel-anker (onmiskenbare
  termen behouden hun recall; samenvatting blijft inert).
- Completheids-audit (2026-09-12): +20 termen/frasen —
  sterk: spoorsector, spoorbeheerder, spoornet, spoorvervoerder,
  treinvertraging/hinder/uitval/verstoring, ertms, teso, rangeer/rangeren,
  ice-<stad>/ice-trein, maaslijn/nedersaksenlijn/kamperlijn, ns international,
  deutsche bahn, european sleeper, italo, nightjet;
  zwak: busongeluk, busvervoer, spoor, staking, passagier(+reizigers),
  vervoer, vervoersbedrijf, vervoerregio, ritten, bovenleiding, abonnement.
- validate_filter.py: invariant gewicht in {1,2}, 46 dubbelzinnige + 39
  onmiskenbare termen, 52 regressie-cases groen.
2026-09-12 19:53:41 +02:00
Eddy de Vink
717e51eb1a v1.10.1: spoorbrug medium i.p.v. sterk/whitelist — locatie-referentie is geen OV-nieuws (Stuifmail 2026-09-12) 2026-09-12 10:36:37 +02:00
Eddy de Vink
f5dec54165 v1.10.0: whitelist alleen titel-anker; medium+zwak uitsluitend in samenvatting geweerd 2026-09-12 09:11:45 +02:00
Eddy de Vink
ff7e7ac81c v1.9.9: één OV-familie telt 1x per artikel — herhaling en beide velden wegen niet dubbel
Gebruikersbesluit 2026-09-11: 'busstation' 60x in een artikel is één signaal, niet
60x de score. _filter_passes combineert titel- en samenvattingshits nu per familie
(dict over beide teksten). Gevolg (regressie-pinned): 'Pand naast busstation'
(titel+samenvatting) en 'Busstation wordt verbouwd' (zonder andere OV-term) zijn
nu geweerd; combinaties over 2 families (metro+halte, metrostation+metro) blijven
door.
2026-09-11 09:28:09 +02:00
Eddy de Vink
341036cd16 v1.9.8: titel weegt niet meer 2x — score = titel + samenvatting >= 3
Gebruikersbesluit 2026-09-11: een medium-hit in de TITEL haalt het filter te
makkelijk ('restaurant naast busstation' = 2x2=4 was door). Formule gelijkgemaakt:
score = titelscore + samenvattingscore >= 3. Gevolg (regressie-pinned):
- enkel-woord-medium in titel is nu onvoldoende (fietsenstalling/restaurant-case
  geweerd); zware/sterke woorden en combinaties over 2 families blijven door.
- zwak-alleen-regel (titel-anker + >=2 families) ongewijzigd.
2026-09-11 09:17:08 +02:00
Eddy de Vink
086d808dc7 v1.9.7: station-samenstellingen medium i.p.v. sterk/whitelist; geen dubbeltelling bus-/metrostation
Gebruikersbesluit 2026-09-11 n.a.v. Omroep West-artikel 'Restaurant weg, pand
staat te verloederen': één 'busstation'-hit in de samenvatting ('pand naast
busstation') is geen OV-nieuws en mocht niet doorgelaten worden.

- Familie station-samenstellingen (trein/bus/metro-station): gewicht 3 -> 2
  (medium). In de samenvatting moet nu een tweede OV-woord bijkomen; in de
  titel volstaat het anker nog (2x2=4).
- 'busstation'/'metrostation' van de whitelist af (whitelist = altijd door).
- 'station' uit de voertuig-samenstelling-familie verwijderd: 'busstation'
  telde dubbel mee (via 'bus' én 'station', 2x3=6).
- validate_filter.py: 6 nieuwe regressie-cases + invariant 2-aanpassing.
2026-09-11 09:07:43 +02:00
Eddy de Vink
1f168b2f54 v1.9.6: pendelbus/shuttlebus naar zwak + zwak-alleen moet titel-anker hebben
Aanleiding: Omroep Brabant-golfbericht (Solheim Cup Cromvoirt, 11-09-2026) kwam door
het filter. 'pendelbus' stond op de whitelist (evenementpendel vanaf station Den Bosch),
en 'station'+'bus'+'pendelbus' in de samenvatting was samen al drempel 3.

- pendelbus/shuttlebus: whitelist + medium -> zwak (1), één familie (synoniemen tellen
  niet als twee onafhankelijke signalen).
- _filter_passes: bij uitsluitend zwakke hits moet minstens één zwak woord in de TITEL
  staan; zwakke woorden alleen in de samenvatting zijn geen bewijs.
- validate_filter.py: invariant 1 uitgebreid + 3 regressiecases (golfbericht, zwak-alleen
  samenvatting, positieve controle met titel-anker).
- _filter_summary()/docstrings gelijkgetrokken met de werkelijke gewichten.
2026-09-11 07:49:05 +02:00
Eddy de Vink
3cdc02aebe v1.9.5: fix chipkaart/reisproduct zwakke familie (chipkaart(?:en)?), plus blijvend validate_filter.py + AGENTS.md (beleid wordt automatisch geladen en afdwingbaar) 2026-09-10 23:17:21 +02:00