v1.9.4 docs: classificatiebeleid (precision-first) vastgelegd boven MATCH_FILTER_FAMILIES — richtlijn voor toekomstige filteraanpassingen

This commit is contained in:
Eddy de Vink 2026-09-10 23:15:43 +02:00
commit 2dd1328473

View file

@ -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")