Add content-level language filter, recheck command, expanded keywords
- isEnglishContent() fetches each job page and drops descriptions with ≥6 German or French indicator words; called for every new job in index.ts before writing to CSV - New `bun recheck` command (recheck.ts) runs searches in raw mode, lists filtered-out jobs, and prints word-frequency suggestions for SOFTWARE_TITLE_RE - Expanded KEYWORDS and SOFTWARE_TITLE_RE to cover ML/AI, system/applications engineer, director, informatics, and more title variants - Added `raw` flag to fetchJobs() to bypass the software-role filter - Add CLAUDE.md with project workflow docs; add CV files and city temp scripts
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
#!/usr/bin/env bun
|
||||
import { KEYWORDS } from "./config.ts";
|
||||
import { fetchJobs, SOFTWARE_TITLE_RE } from "./fetch.ts";
|
||||
import type { SearchConfig } from "./config.ts";
|
||||
|
||||
const JUNIOR_RE = /\b(junior|jr\.?|entry.?level|graduate|intern(?:ship)?|trainee|apprentice|werkstudent)\b/i;
|
||||
|
||||
const searches: SearchConfig[] = [
|
||||
{ label: "Bern (city)", keywords: KEYWORDS, location: "Bern, Switzerland", workType: ["onsite", "hybrid"], timePosted: "month" },
|
||||
];
|
||||
|
||||
const seen = new Set<string>();
|
||||
const results: { title: string; company: string; link: string; search: string }[] = [];
|
||||
|
||||
for (const config of searches) {
|
||||
console.log(`\n[${config.label}]`);
|
||||
const jobs = await fetchJobs(config, { raw: false });
|
||||
for (const job of jobs) {
|
||||
if (!seen.has(job.id)) {
|
||||
seen.add(job.id);
|
||||
results.push({ title: job.title, company: job.company, link: job.link, search: job.search });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`\n── ${results.length} jobs found in Bern ──\n`);
|
||||
for (const j of results) {
|
||||
console.log(` [${j.search}] ${j.title}`);
|
||||
console.log(` ${j.company} ${j.link}`);
|
||||
}
|
||||
Reference in New Issue
Block a user