From 6e9f9b1b0fb0828fabe1588f2fc584518c8d814a Mon Sep 17 00:00:00 2001 From: Eddy de Vink Date: Thu, 10 Sep 2026 20:43:13 +0200 Subject: [PATCH] v1.9.2: whitelist-laag (onmiskenbare OV-termen als altijd-door-signaal) + inchecken/uitchecken naar zwak (Schiphol-inchecken is geen OV) --- buzzrss/bot.py | 59 +++++++++++++++++++++++++++++++++++++++++++++++++- maubot.yaml | 2 +- 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/buzzrss/bot.py b/buzzrss/bot.py index ca66204..f0333eb 100644 --- a/buzzrss/bot.py +++ b/buzzrss/bot.py @@ -88,13 +88,14 @@ MATCH_FILTER_FAMILIES: list[tuple[str, int]] = [ # medium (2) (r"\btrams?\b", 2), (r"\bmetro(?:'?s)?\b", 2), - (r"\b(?:openbaar vervoer|dienstregeling|inchecken|uitchecken|lightrail|pendelbus|shuttlebus|halte|bushokje|busbaan|vervoerder|reiziger)\w*\b", 2), + (r"\b(?:openbaar vervoer|dienstregeling|lightrail|pendelbus|shuttlebus|halte|bushokje|busbaan|vervoerder|reiziger)\w*\b", 2), (r"\b(?:ov-chipkaart|chipkaart|ovpay|ov-pay|reisproduct|studentenreisproduct|vervoersbewijs|vervoerbewijs)\w*\b", 2), (r"\b(?:ov-staking|conducteursstaking)\w*\b", 2), (r"\bconduct(?:eur|eurs)\b", 2), # trein-/buspersoneel: onmiskenbaar OV-jargon (r"\b(?:pont|ponten)\b", 2), # waterbus/veerdienst # zwak (1) — dubbelzinnig, moet combineren (r"(? None: @@ -258,6 +297,18 @@ class RSSBot(Plugin): als tekst houden — inclusief URL's en attributen, die dan vals scoren.""" return re.sub(r"<[^>]+>", "", html.unescape(raw)) + @staticmethod + def _whitelist_hit(text: str) -> bool: + """True als een onmiskenbare OV-term uit MATCH_FILTER_WHITELIST in text zit. + + Enkele-woord termen matchen op woordgrens ('ns' telt NIET binnen 'kunstenaar'), + multi-woord termen ('nederlandse spoorwegen') als exacte frase, beide + case-insensitive.""" + if _WHITELIST_RE.search(text): + return True + low = text.lower() + return any(ph in low for ph in _WHITELIST_PHRASES) + @staticmethod def _fam_hits(text: str) -> list[tuple[int, int]]: """(familie-index, gewicht) voor elke OV-familie die in text voorkomt (1× per familie). @@ -289,6 +340,9 @@ class RSSBot(Plugin): 'sein brandmeester' en figuratief 'weer op de rails'. Bewust doorgelaten: krant 'De Metro'/café 'De Tram' (medium), film-'treinramp' en atleet-'sprinter' (sterk).""" + # Whitelist: één onmiskenbare OV-term (titel óf samenvatting) laat altijd door. + if RSSBot._whitelist_hit(title) or RSSBot._whitelist_hit(summary): + return True t_hits = RSSBot._fam_hits(title) s_hits = RSSBot._fam_hits(summary) score = 2 * sum(w for _, w in t_hits) + sum(w for _, w in s_hits) @@ -309,6 +363,9 @@ class RSSBot(Plugin): "- Medium (2): tram, metro, openbaar vervoer/dienstregeling/inchecken, halte, bushokje, busbaan, vervoerder, reiziger, " "ov-chipkaart/ovpay/reisproduct, ov-staking, pont\n" "- Zwak (1): losse 'bus' (niet ná een koppelteken), 'trein', 'breng', 'overweg', 'overwegen', 'sein', 'kaartje', 'opwaarderen', 'rails' — moet combineren met een ander OV-woord\n\n" + "**Whitelist (altijd door):** één onmiskenbare OV-term in titel óf samenvatting is genoeg " + "(NS, ProRail, Nederlandse Spoorwegen, spoorstoring, perron, bushalte, metrostation, conducteur, " + "ov-chipkaart, ovpay, openbaar vervoer, dienstregeling, ...)\n\n" "Uitgesloten (blacklist): woorden die wél matchen maar geen OV-waarde hebben, " "o.a. straatnamen rond stations ('stationsstraat', 'stationsweg', ...) en niet-OV-vormen als 'stationcar' en 'stationair'\n\n" "Doorlaten: `2×(titel-score) + 1×(samenvatting-score) ≥ 3`" diff --git a/maubot.yaml b/maubot.yaml index f2fc400..8cd6e42 100644 --- a/maubot.yaml +++ b/maubot.yaml @@ -1,5 +1,5 @@ id: nl.eddydevink.rss -version: 1.9.1 +version: 1.9.2 modules: - buzzrss main_class: RSSBot