v1.9.4: precision-first audit — dubbelzinnige termen (dienstregeling, chipkaart, reisproduct, vervoer(s)bewijs, ontsporen, sprinter, vervoerder, reiziger) naar zwak + whitelist-verkleining; triage met drie externe taalmodellen

This commit is contained in:
Eddy de Vink 2026-09-10 23:12:22 +02:00
commit 8e9f450d46
2 changed files with 22 additions and 12 deletions

View file

@ -72,31 +72,41 @@ rss_change_level = EventType.find("xyz.maubot.rss", t_class=EventType.Class.STAT
# straatnamen rond stations — "de Stationsstraat afsluiten voor een festival" # straatnamen rond stations — "de Stationsstraat afsluiten voor een festival"
# is geen OV-nieuws). Zwartgelijste woorden leveren geen score op, maar # is geen OV-nieuws). Zwartgelijste woorden leveren geen score op, maar
# blokkeren de familie niet: een écht "station"-woord ernaast scoort gewoon. # blokkeren de familie niet: een écht "station"-woord ernaast scoort gewoon.
# Bewust geaccepteerde botsingen: krant "De Metro"/café "De Tram" (medium), # Bewust geaccepteerde botsingen: krant "De Metro"/café "De Tram" (medium).
# atleet-"sprinter" (sterk). Los "trein" is zwak (geen OV-jargon): moet # Losse algemene woorden zijn zwak (moeten combineren met een andere familie):
# combineren met een andere familie. # "trein", "sprinter" (atleet), "vervoerder" (logistiek), "reiziger",
# "inchecken"/"uitchecken" (Schiphol/hotel), "station(s)" (omroepen), "bus",
# "sein" (brandweer), "overweg", "breng", "kaartje", "opwaarderen", "rails".
MATCH_FILTER_FAMILIES: list[tuple[str, int]] = [ MATCH_FILTER_FAMILIES: list[tuple[str, int]] = [
# sterk (3) # 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") (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")
(r"\b(?:spoorweg|spoorba(?:an|nen)|spoorlijn|spoorverkeer|spoorwegovergang|spoorbrug|spoorstoring|perron|seinstoring|wisselstoring|ontspor|ontspoor|spoorstaking)\w*\b", 3), # spoorinfra; let op de klinkerwisseling: 'ontsporing' (open lettergreep, één o) vs 'ontspoord'/'ontspoorde' (dicht, dubbel o) — vandaar beide stammen (r"\b(?:spoorweg|spoorba(?:an|nen)|spoorlijn|spoorverkeer|spoorwegovergang|spoorbrug|spoorstoring|perron|seinstoring|wisselstoring|spoorstaking)\w*\b", 3), # spoorinfra; let op de klinkerwisseling: 'ontsporing' (open lettergreep, één o) vs 'ontspoord'/'ontspoorde' (dicht, dubbel o) — vandaar beide stammen
(r"\b(?:treinstation|treinstations|metrostation|metrostations|busstation|busstations)\b", 3), # station-samenstellingen: onmiskenbaar OV-jargon (r"\b(?:treinstation|treinstations|metrostation|metrostations|busstation|busstations)\b", 3), # station-samenstellingen: onmiskenbaar OV-jargon
(r"(?<![\w-])\bstations?\b", 1), # los 'station(s)' is ZWAK: ook tv-/radio-/regionale omroepstations ('de lokale stations'), moet combineren met een andere OV-familie (r"(?<![\w-])\bstations?\b", 1), # los 'station(s)' is ZWAK: ook tv-/radio-/regionale omroepstations ('de lokale stations'), moet combineren met een andere OV-familie
(r"\b(?:bus|tram|metro)-?(?:halte|haltes|lijn|lijnen|station|stations|verkeer|net|staking|ba(?:an|nen)|hok(?:je|jes)|chauffeur)\w*\b", 3), # voertuig-samenstelling (busstation/metrostation/bushokje/busbanen/…) (r"\b(?:bus|tram|metro)-?(?:halte|haltes|lijn|lijnen|station|stations|verkeer|net|staking|ba(?:an|nen)|hok(?:je|jes)|chauffeur)\w*\b", 3), # voertuig-samenstelling (busstation/metrostation/bushokje/busbanen/…)
(r"\b(?:treinstoring|treinverkeer|treinstaking|treinongeval|treinbotsing|treinongeluk)\w*\b", 3), # trein-jargon-samenstellingen: onmiskenbaar OV (r"\b(?:treinstoring|treinverkeer|treinstaking|treinongeval|treinbotsing|treinongeluk)\w*\b", 3), # trein-jargon-samenstellingen: onmiskenbaar OV
(r"\b\w*trein\w*\b", 1), # losse 'trein' en algemene samenstellingen (stoptrein, goederentrein, treinverkeer al in bovenstaande familie) — ZWAK: 'de trein naar mijn nieuwe huis' is geen OV-jargon, moet combineren met een andere familie (r"\b\w*trein\w*\b", 1), # losse 'trein' en algemene samenstellingen (stoptrein, goederentrein, treinverkeer al in bovenstaande familie) — ZWAK: 'de trein naar mijn nieuwe huis' is geen OV-jargon, moet combineren met een andere familie
(r"\b(?:intercity|sprinter|streekvervoer|stadsvervoer|veerdienst|veerboot|veerboten|veerpont|voetveer|veerverbinding|buurtbus|belbus)\w*\b", 3), # treintypes, vervoerssectoren en veren ('sprinter' is ook een atleet: geaccepteerde botsing) (r"\b(?:intercity|streekvervoer|stadsvervoer|veerdienst|veerboot|veerboten|veerpont|voetveer|veerverbinding|buurtbus|belbus)\w*\b", 3), # treintypes, vervoerssectoren en veren ('sprinter' staat in de zwakke groep: atleet-botsing)
(r"\blijn\s?\d{1,3}\b", 3), # 'lijn 12' — vervoerslijn met nummer (r"\blijn\s?\d{1,3}\b", 3), # 'lijn 12' — vervoerslijn met nummer
# medium (2) # medium (2)
(r"\btrams?\b", 2), (r"\btrams?\b", 2),
(r"\bmetro(?:'?s)?\b", 2), (r"\bmetro(?:'?s)?\b", 2),
(r"\b(?:openbaar vervoer|dienstregeling|lightrail|pendelbus|shuttlebus|halte|bushokje|busbaan|vervoerder|reiziger)\w*\b", 2), (r"\b(?:openbaar vervoer|lightrail|pendelbus|shuttlebus|halte|bushokje|busbaan)\w*\b", 2),
(r"\b(?:ov-chipkaart|chipkaart|ovpay|ov-pay|reisproduct|studentenreisproduct|vervoersbewijs|vervoerbewijs)\w*\b", 2), (r"\b(?:ov-chipkaart|ovpay|ov-pay|studentenreisproduct)\w*\b", 2),
(r"\b(?:ov-staking|conducteursstaking)\w*\b", 2), (r"\b(?:ov-staking|conducteursstaking)\w*\b", 2),
(r"\bconduct(?:eur|eurs)\b", 2), # trein-/buspersoneel: onmiskenbaar OV-jargon (r"\bconduct(?:eur|eurs)\b", 2), # trein-/buspersoneel: onmiskenbaar OV-jargon
(r"\b(?:pont|ponten)\b", 2), # waterbus/veerdienst (r"\b(?:pont|ponten)\b", 2), # waterbus/veerdienst
# zwak (1) — dubbelzinnig, moet combineren # zwak (1) — dubbelzinnig, moet combineren
(r"(?<!-)\bbus(?:sen)?\b", 1), # ná een koppelteken geen OV: 'VW-bus', 'school-bus' (r"(?<!-)\bbus(?:sen)?\b", 1), # ná een koppelteken geen OV: 'VW-bus', 'school-bus'
(r"\b(?:inchecken|uitchecken)\w*\b", 1), # ook op luchthavens/hotels — geen OV-jargon, moet combineren (r"\b(?:inchecken|uitchecken)\w*\b", 1), # ook op luchthavens/hotels — geen OV-jargon, moet combineren
(r"\bsprinters?\b", 1), # ook atleet ('sprinter verpulvert record') — aparte familie, moet combineren
(r"\bvervoerders?\b", 1), # ook logistiek ('vrachtvervoerder') — aparte familie, moet combineren
(r"\breizigers?\b", 1), # ook algemeen ('zakenreizigers vliegen') — aparte familie, moet combineren
(r"\bdienstregeling\w*\b", 1), # dubbelzinnig (modelaudit) — meestal OV, maar moet combineren
(r"\bchipkaarten?\b", 1), # dubbelzinnig (bankpas/algemeen) — aparte familie
(r"\breisproducten?\b", 1), # dubbelzinnig — aparte familie
(r"\bvervoer(?:s)?bewijs\w*\b", 1), # dubbelzinnig — aparte familie
(r"\b(?:ontspor|ontspoor)\w*\b", 1), # werkwoord 'ontsporen' is dubbelzinnig ('het plan ontspoorde'); echte trein-ontsporing combineert met trein/spoor
(r"\bbreng\b", 1), # vervoerder Breng vs werkwoord "brengen" ("hoe breng je ... in beeld") (r"\bbreng\b", 1), # vervoerder Breng vs werkwoord "brengen" ("hoe breng je ... in beeld")
(r"\boverweg\b", 1), # spoorwegovergang vs idioom "goed met elkaar overweg kunnen" (r"\boverweg\b", 1), # spoorwegovergang vs idioom "goed met elkaar overweg kunnen"
(r"\boverwegen\b", 1), # meervoud van overweg vs werkwoord ("een gratieverlening overwegen") (r"\boverwegen\b", 1), # meervoud van overweg vs werkwoord ("een gratieverlening overwegen")
@ -136,6 +146,7 @@ MATCH_FILTER_BLACKLIST: frozenset[str] = frozenset({
# spoorwegen', 'prorail' en 'NS' in all-caps titels tellen mee. # spoorwegen', 'prorail' en 'NS' in all-caps titels tellen mee.
# Termen MOETEN in elke context OV betekenen. Niet hierop (algemeen/dubbelzinnig): # Termen MOETEN in elke context OV betekenen. Niet hierop (algemeen/dubbelzinnig):
# los 'trein', 'bus', 'metro', 'tram', 'station', 'lijn', 'ov', 'reiziger', # los 'trein', 'bus', 'metro', 'tram', 'station', 'lijn', 'ov', 'reiziger',
# 'vervoerder', 'sprinter',
# 'inchecken' (Schiphol/hotel), 'sein' (brandweerjargon), 'overweg', 'treinramp' # 'inchecken' (Schiphol/hotel), 'sein' (brandweerjargon), 'overweg', 'treinramp'
# (films) — die blijven in de gewogen families. # (films) — die blijven in de gewogen families.
MATCH_FILTER_WHITELIST: frozenset[str] = frozenset({ MATCH_FILTER_WHITELIST: frozenset[str] = frozenset({
@ -146,8 +157,7 @@ MATCH_FILTER_WHITELIST: frozenset[str] = frozenset({
"qliner", "flixbus", "eurostar", "thalys", "gvu", "ovpay", "qliner", "flixbus", "eurostar", "thalys", "gvu", "ovpay",
# Spoorinfra-jargon (samenvoegingen, onmiskenbaar OV) # Spoorinfra-jargon (samenvoegingen, onmiskenbaar OV)
"spoorstoring", "spoorverkeer", "spoorwegovergang", "spoorlijn", "spoorbaan", "spoorstoring", "spoorverkeer", "spoorwegovergang", "spoorlijn", "spoorbaan",
"spoorbrug", "spoorstaking", "perron", "wisselstoring", "seinstoring", "spoorbrug", "spoorstaking", "perron", "wisselstoring", "seinstoring", "treinstoring", "treinverkeer",
"ontsporing", "ontspoord", "ontspoorde", "treinstoring", "treinverkeer",
"treinstaking", "treinongeval", "treinbotsing", "treinstel", "treinstaking", "treinongeval", "treinbotsing", "treinstel",
# Bus/tram/metro-jargon # Bus/tram/metro-jargon
"bushalte", "bushaltes", "busstation", "busbaan", "buslijn", "busnet", "bushalte", "bushaltes", "busstation", "busbaan", "buslijn", "busnet",
@ -155,7 +165,7 @@ MATCH_FILTER_WHITELIST: frozenset[str] = frozenset({
"metrostation", "metrolijn", "metroverkeer", "metrostation", "metrolijn", "metroverkeer",
# Tarief/vervoerder-jargon # Tarief/vervoerder-jargon
"ov-chipkaart", "ov-staking", "lightrail", "pendelbus", "shuttlebus", "ov-chipkaart", "ov-staking", "lightrail", "pendelbus", "shuttlebus",
"conducteur", "conducteurs", "dienstregeling", "vervoersbewijs", "conducteur", "conducteurs",
"openbaar vervoer", "openbaar vervoer",
}) })

View file

@ -1,5 +1,5 @@
id: nl.eddydevink.rss id: nl.eddydevink.rss
version: 1.9.3 version: 1.9.4
modules: modules:
- buzzrss - buzzrss
main_class: RSSBot main_class: RSSBot