SPB Git

spb/job-ka

Public

[ka6] fix connecteur derumarketcatering: employeur situé à Kirkland WASHINGTON (É.-U., zip 98033), pas Kirkland QC — faux positif du filtre Québec sur ville homonyme. is_quebec_location rejette désormais un code de province/État explicitement hors Québec en fin de libellé (« Kirkland, WA », « London, ON »); codes ambigus en français exclus (CA/OR/LA/DE/IN/ME/MT — Val-d'Or, La Prairie…). L'offre américaine résiduelle a été retirée par le pipeline (miss_count=2 → active=0). Volume 0 = comportement correct: la source n'a aucune offre québécoise.

Simon-Pierre Boucher committed (Aug 27, 2026) parent 980f440 Browse files

1 changed file +16 −1

Unified Split
modified jobka/normalize.py +16 −1
@@ -6,7 +6,7 @@
6 # Rôle : Normalisation commune des offres (salaires, dates, mode/type 6 # Rôle : Normalisation commune des offres (salaires, dates, mode/type
7 # d'emploi, lieu, catégorie, exigences, séniorité) — jamais de 7 # d'emploi, lieu, catégorie, exigences, séniorité) — jamais de
8 # valeur inventée 8 # valeur inventée
9−# Créé : 2026-08-17 Modifié : 2026-08-25 9+# Créé : 2026-08-17 Modifié : 2026-08-26
10 # ============================================================================= 10 # =============================================================================
11 """Couche de normalisation commune appelée par JobPosting.finalize(). 11 """Couche de normalisation commune appelée par JobPosting.finalize().
12 12
@@ -517,6 +517,19 @@ def parse_location(raw: str) -> dict:
517 return out 517 return out
518 518
519 519
520+# Code de province canadienne ou d'État américain explicitement HORS Québec
521+# (« Kirkland, WA », « London, ON ») : jamais une offre québécoise, même si la
522+# ville est homonyme d'une ville du Québec (Kirkland WA ≠ Kirkland QC — bug
523+# derumarketcatering 2026-08-26 : restaurant de l'État de Washington affiché
524+# comme Montréal). Codes ambigus avec le français exclus volontairement :
525+# CA (Canada/Californie), OR (Val-d'Or), LA (La Prairie), DE, IN, ME, MT.
526+_NON_QC_REGION_RE = re.compile(
527+ r"[,\s](on|bc|ab|sk|mb|ns|nb|pe|pei|nl|yt|nt|nu|"
528+ r"wa|ny|tx|fl|il|ma|md|mi|mn|mo|ms|nc|nd|ne|nh|nj|nm|nv|oh|ok|"
529+ r"pa|ri|sc|sd|tn|ut|va|vt|wi|wv|wy|ak|al|ar|az|co|ct|dc|ga|hi|"
530+ r"ia|id|ks|ky)\.?(?=$|[,\s])")
531+
532+
520 def is_quebec_location(raw: str) -> bool: 533 def is_quebec_location(raw: str) -> bool:
521 """Vrai si le libellé pointe vers le Québec (filtre des ATS pancanadiens).""" 534 """Vrai si le libellé pointe vers le Québec (filtre des ATS pancanadiens)."""
522 key = _key(clean_text(raw)) 535 key = _key(clean_text(raw))
@@ -529,6 +542,8 @@ def is_quebec_location(raw: str) -> bool:
529 m = _POSTAL_RE.search(raw) 542 m = _POSTAL_RE.search(raw)
530 if m and m.group(1)[0].upper() in "GHJ": 543 if m and m.group(1)[0].upper() in "GHJ":
531 return True 544 return True
545+ if _NON_QC_REGION_RE.search(key): # « Kirkland, WA » : homonyme hors QC
546+ return False
532 return any(re.search(rf"(?<![a-z]){re.escape(ck)}(?![a-z])", key) 547 return any(re.search(rf"(?<![a-z]){re.escape(ck)}(?![a-z])", key)
533 for ck in _QC_CITIES) 548 for ck in _QC_CITIES)
534 549
535 550
Menu

Theme