fix(scout): English-only requirement reads ENGLISH OK; triage 2026-10-22 decisions
- classify_language_requirement: an ad stating only an English requirement
("communication and presentation skills in English") with no Norwegian
requirement now reads english_ok. Checked after the Norwegian patterns, so
"fluent English and Norwegian" still reads norwegian_required. Nordic
Semiconductor's ads read UNCLEAR in the first Norway run.
- Decisions from the 2026-10-22 run: Nordic Embedded Software Test Automation
Engineer `maybe` (embedded/Bluetooth experience required, coursework only -
the Kongsberg gate); Nordic ATE Test Engineer `skip`; RUAG Senior DevOps
Engineer C5I repost `skip` ("Swiss citizenship required"; a different role
from the July shortlist, whose note is carried into the new row).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
92c3c005b4
commit
eee608a213
2 files changed
+35
-8
No files matched your search
+14
-1
@@ -1985,6 +1985,15 @@ _LANG_NORWEGIAN_REQUIRED = [re.compile(p, re.I) for p in (
|
||||
r"norwegian\s+(?:language\s+)?(?:is\s+)?(?:required|mandatory|a\s+requirement|essential)",
|
||||
r"(?:must|need\s+to|required\s+to)\s+(?:\w+\s+){0,4}(?:norwegian|scandinavian)",
|
||||
)]
|
||||
# An ad that states only an English requirement ("communication and presentation skills in
|
||||
# English", Nordic Semiconductor 2026-10-22). Checked only AFTER no Norwegian requirement was
|
||||
# found, so "fluent English and Norwegian" still reads as Norwegian required.
|
||||
_LANG_ENGLISH_STATED = [re.compile(p, re.I) for p in (
|
||||
r"(?:communication|presentation|written|spoken|verbal|language)\s+(?:and\s+\w+\s+)?skills?\s+in\s+english",
|
||||
r"(?:fluent|fluency|proficien\w*|excellent|good|strong)\s+(?:\w+\s+){0,2}(?:in\s+)?english",
|
||||
r"english\s+(?:is\s+)?(?:required|a\s+must|mandatory)",
|
||||
r"(?:gode|god|flytende|svært\s+gode)\s+(?:\w+\s+){0,3}engelsk",
|
||||
)]
|
||||
# A "Norwegian" that belongs to clearance or citizenship wording is not a language demand.
|
||||
_LANG_FALSE_CONTEXT = re.compile(
|
||||
r"clearance|klarering|statsborger|citizen|myndighet|authorit|armed\s+forces|forsvar", re.I)
|
||||
@@ -2025,7 +2034,11 @@ def classify_language_requirement(text, work_language_tags=None):
|
||||
if result["lang"] == "norwegian_required":
|
||||
break
|
||||
else:
|
||||
if tags and all(t.startswith("engelsk") or t == "english" for t in tags):
|
||||
stated = next((m for p in _LANG_ENGLISH_STATED if (m := p.search(text))), None)
|
||||
if stated:
|
||||
result.update(lang="english_ok",
|
||||
evidence=_snippet(text, stated) + " (English stated, no Norwegian requirement)")
|
||||
elif tags and all(t.startswith("engelsk") or t == "english" for t in tags):
|
||||
result.update(lang="english_ok", evidence="NAV work-language tag: English only")
|
||||
elif tags:
|
||||
result["evidence"] = f"no requirement sentence found; NAV tag: {', '.join(tags)}"
|
||||
|
||||
Reference in new issue
Block a user