gov-scraper: 신청 체크리스트 성별/특수대상 필터 추가
- generate_checklist.js: 남성 기준 여성 전용 제외, 특수대상(장애인/보훈/다문화/북한이탈) 전용 제외 - 제목+주관기관 기준(본문 '우대' 가점 언급은 미검사로 오제거 방지) - 지역 보완: 달구벌(=대구) 추가 - apply-checklist.md: 지역+연령+성별/대상 누적 적용 → 117건 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -36,7 +36,7 @@ const NON_SEOUL = [
|
||||
'김포', '평택', '파주', '의정부', '남양주', '청주', '충주', '제천', '천안', '아산',
|
||||
'전주', '군산', '익산', '여수', '순천', '광양', '목포', '나주', '포항', '경주',
|
||||
'구미', '칠곡', '문경', '안동', '창원', '김해', '진주', '양산', '밀양', '거제',
|
||||
'춘천', '원주', '강릉', '홍천', '속초', '강화', '서귀포',
|
||||
'춘천', '원주', '강릉', '홍천', '속초', '강화', '서귀포', '달구벌',
|
||||
];
|
||||
// 제목 본문까지 검사해도 안전한(흔한 단어에 잘 안 섞이는) 도/권역 키워드.
|
||||
// 제외: 대전(대전환), 광주(관광주간), 경기(경기침체), 경상(경상비), 세종(세종대왕) 등 오탐 위험.
|
||||
@@ -70,6 +70,26 @@ function ageAllows(x) {
|
||||
return Math.max(...uppers) >= MY_AGE; // 최대 허용연령이 MY_AGE 이상이어야 지원 가능
|
||||
}
|
||||
|
||||
// 성별/특수대상 기준 지원 가능 판정.
|
||||
const MY_GENDER = '남성'; // 남성 → 여성 전용 제외
|
||||
const MY_TARGETS = []; // 본인이 해당하는 특수대상(있으면 그 전용 사업 유지). 예: ['장애인']
|
||||
const TARGET_PATTERNS = {
|
||||
장애인: /장애인/,
|
||||
보훈: /보훈|국가유공자|제대군인/,
|
||||
다문화: /다문화|결혼이민/,
|
||||
북한이탈: /북한이탈|탈북|새터민/,
|
||||
};
|
||||
|
||||
function targetGroupOk(x) {
|
||||
const sig = `${x.TITLE} ${x.AGENCY || ''}`; // 제목 + 주관기관(가점성 본문 언급은 검사 안 함)
|
||||
if (MY_GENDER === '남성' && /여성/.test(sig)) return false; // 여성 전용 제외
|
||||
if (MY_GENDER === '여성' && /남성\s*(전용|기업)/.test(sig)) return false;
|
||||
for (const [name, re] of Object.entries(TARGET_PATTERNS)) {
|
||||
if (re.test(sig) && !MY_TARGETS.includes(name)) return false; // 특수대상 전용 제외
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function applicableInSeoul(x) {
|
||||
const prefix = (/^\[([^\]]{1,8})\]/.exec(x.TITLE) || [])[1] || '';
|
||||
const strong = `${prefix} ${x.AGENCY || ''}`; // 접두 + 주관기관
|
||||
@@ -104,10 +124,13 @@ await closePool();
|
||||
const seoulRows = allRows.filter(applicableInSeoul);
|
||||
const removedRegion = allRows.length - seoulRows.length;
|
||||
// 연령(46세) 기준: 청년 한정 등 연령 초과 공고 제외
|
||||
const rows = seoulRows.filter(ageAllows);
|
||||
const removedAge = seoulRows.length - rows.length;
|
||||
const ageRows = seoulRows.filter(ageAllows);
|
||||
const removedAge = seoulRows.length - ageRows.length;
|
||||
// 성별/특수대상 기준: 여성 전용·장애인/보훈 등 전용 공고 제외
|
||||
const rows = ageRows.filter(targetGroupOk);
|
||||
const removedTarget = ageRows.length - rows.length;
|
||||
console.log(
|
||||
`필터: 전체 ${allRows.length}건 → 지역(서울) -${removedRegion} → 연령(${MY_AGE}세) -${removedAge} → 최종 ${rows.length}건`
|
||||
`필터: 전체 ${allRows.length}건 → 지역(서울) -${removedRegion} → 연령(${MY_AGE}세) -${removedAge} → 성별/대상 -${removedTarget} → 최종 ${rows.length}건`
|
||||
);
|
||||
|
||||
const buckets = {
|
||||
@@ -121,7 +144,7 @@ const today = new Date().toISOString().slice(0, 10);
|
||||
const out = [];
|
||||
out.push('# 정부지원사업 신청 체크리스트');
|
||||
out.push('');
|
||||
out.push(`> 생성일: ${today} · 대상: **예비창업자 + 현재 신청 가능 + 서울 거주 + 만 ${MY_AGE}세 지원 가능**(타 지역·청년 연령초과 제외) 공고 (총 ${rows.length}건)`);
|
||||
out.push(`> 생성일: ${today} · 대상: **예비창업자 + 현재 신청 가능 + 서울 거주 + 만 ${MY_AGE}세 + 남성**(타 지역·청년·여성/장애인/보훈 등 전용 제외) 공고 (총 ${rows.length}건)`);
|
||||
out.push('> 신청을 마치면 `[ ]` → `[x]` 로 체크하세요. 갱신: `LD_LIBRARY_PATH=$ORACLE_IC_LIB_DIR node scripts/generate_checklist.js`');
|
||||
out.push('> ⚠️ 마감 "시각"과 정확한 자격요건은 각 공고 원문에서 반드시 확인하세요.');
|
||||
out.push('');
|
||||
|
||||
Reference in New Issue
Block a user