From 2dd13284732092ee01130fa163b7f0d48f1cd228 Mon Sep 17 00:00:00 2001 From: Eddy de Vink Date: Thu, 10 Sep 2026 23:15:43 +0200 Subject: [PATCH] =?UTF-8?q?v1.9.4=20docs:=20classificatiebeleid=20(precisi?= =?UTF-8?q?on-first)=20vastgelegd=20boven=20MATCH=5FFILTER=5FFAMILIES=20?= =?UTF-8?q?=E2=80=94=20richtlijn=20voor=20toekomstige=20filteraanpassingen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buzzrss/bot.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/buzzrss/bot.py b/buzzrss/bot.py index 84a3e69..8933bc2 100644 --- a/buzzrss/bot.py +++ b/buzzrss/bot.py @@ -77,6 +77,43 @@ rss_change_level = EventType.find("xyz.maubot.rss", t_class=EventType.Class.STAT # "trein", "sprinter" (atleet), "vervoerder" (logistiek), "reiziger", # "inchecken"/"uitchecken" (Schiphol/hotel), "station(s)" (omroepen), "bus", # "sein" (brandweer), "overweg", "breng", "kaartje", "opwaarderen", "rails". +# ===================================================================== +# FILTERCLASSIFICATIE-BELEID (bij elke aanpassing aan het filter volgen) +# ===================================================================== +# Doel: precisie boven recall. Liever een OV-bericht te veel gefilterd dan +# een niet-OV-bericht te veel doorgelaten (gebruikersbesluit, 2026-09-10). +# +# Drie lagen, elk met een eigen regel: +# 1. WHITELIST -> ALTIJD door. Alleen termen die in élke context OV +# betekenen (merken: NS/ProRail/Arriva; onmiskenbaar jargon: spoorstoring, +# perron, bushalte, metrostation, conducteur, ovpay; multi-woord termen). +# REGEL: twijfel je of de term ook buiten het OV kan voorkomen -> NIET hier. +# 2. GEWOGEN FAMILIES -> score = 2x titel + 1x samenvatting >= drempel (3). +# - sterk (3): onmiskenbaar OV-jargon/merken/samenvoegingen (spoorlijn, +# treinstation, busverkeer, intercity, lijn 12, ...). +# - medium (2): onmiskenbaar OV maar iets algemener (tram, metro, halte, +# pont, ovpay, openbaar vervoer, ...); mag niet volledig +# ontbreken, maar telt alleen mee ter ondersteuning. +# - zwak (1): DUBBELZINNIGHEID. Woorden die (ook) buiten het OV +# voorkomen. REGEL: elk dubbelzinnig woord krijgt een EIGEN +# familie (niet samengevoegd), zodat twee verschillende +# zwakke woorden wél als combinatie tellen, maar één enkel +# woord nooit de doorslag kan geven. Bekende dubbelzinnige: +# trein, bus, station(s), sprinter, reiziger, vervoerder, +# inchecken/uitchecken, sein, overweg, breng, kaartje, +# opwaarderen, rails, dienstregeling, chipkaart, ontsporen. +# 3. BLACKLIST -> gematchte woorden zonder OV-waarde (stationsstraat, +# stationair, stationcar, ...); blokkeren de familie niet. +# +# BEOORDELEN VAN EEN NIEUW WOORD: +# a) Kan het ook buiten het OV voorkomen? ja -> zwak (1), eigen familie. +# b) Is het een samenvoeging/merk die alleen OV kan betekenen? -> sterk (3) +# of whitelist. +# c) Bij twijfel: zwak (1). Conservatief = precision-first. +# d) Ter controle: leg nieuwe woordkandidaten voor aan minimaal één extra +# taalmodel (de audit op 2026-09-10 gebruikte 3 modellen; enige stem +# 'TWIJFEL'/'NIET-OV' => behandelen als dubbelzinnig). +# ===================================================================== MATCH_FILTER_FAMILIES: list[tuple[str, int]] = [ # sterk (3) (r"\b(?:ns|arriva|qbuzz|connexxion|cxx|transdev|keolis|ret|gvb|ebs|htm|syntus|u-ov|allgo|flixbus|blauwnet|r-net|valleilijn|waterbus|eurostar|thalys|randstadrail|gvu|prorail|hermes|rrreis|qliner|ov)\b", 3), # vervoerders ('Breng' staat in de zwakke groep: botst met het werkwoord "brengen")