[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.
1 changed file +16 −1
modified
jobka/normalize.py
+16 −1
@@ -6,7 +6,7 @@ | ||
| 6 | 6 | # Rôle : Normalisation commune des offres (salaires, dates, mode/type |
| 7 | 7 | # d'emploi, lieu, catégorie, exigences, séniorité) — jamais de |
| 8 | 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 | 11 | """Couche de normalisation commune appelée par JobPosting.finalize(). |
| 12 | 12 | |
@@ -517,6 +517,19 @@ def parse_location(raw: str) -> dict: | ||
| 517 | 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 | 533 | def is_quebec_location(raw: str) -> bool: |
| 521 | 534 | """Vrai si le libellé pointe vers le Québec (filtre des ATS pancanadiens).""" |
| 522 | 535 | key = _key(clean_text(raw)) |
@@ -529,6 +542,8 @@ def is_quebec_location(raw: str) -> bool: | ||
| 529 | 542 | m = _POSTAL_RE.search(raw) |
| 530 | 543 | if m and m.group(1)[0].upper() in "GHJ": |
| 531 | 544 | return True |
| 545 | + if _NON_QC_REGION_RE.search(key): # « Kirkland, WA » : homonyme hors QC | |
| 546 | + return False | |
| 532 | 547 | return any(re.search(rf"(?<![a-z]){re.escape(ck)}(?![a-z])", key) |
| 533 | 548 | for ck in _QC_CITIES) |
| 534 | 549 | |
| 535 | 550 | |