v10.13二次修订: 个人黑名单多维度判定(≥2维命中才认定: 唯一ID/全名/学校/单位等交叉验证), 单一维度不触发, 防误伤

This commit is contained in:
hermes
2026-09-30 01:13:19 +00:00
parent e9c80a7347
commit d668624267
+13 -12
View File
@@ -49,12 +49,11 @@ const ACCOUNT = process.env.ACCOUNT || 'hr1';
const TARGET_CITY = process.env.TARGET_CITY || '郑州';
const COMPANY_BLACKLIST = ['合塑', '派卡']; // 从 workDetail 提取公司名命中即跳过
// ---------- 个人黑名单(v10.13, 2026-09-29 修订)----------
// person_blacklist 表:用户指定的候选人。匹配必须基于弹窗真实数据,不做姓+年龄这种粗匹配(会误杀同姓同龄人)
// 匹配规则(弹窗打开后执行,匹配 raw_text):
// ① resumeNumber 精确匹配(如有)
// ② 全名精确匹配(平台显示全名时)
// ③ match_fields 关键词组(学校/工作单位等硬字段)全部命中 → 同人
// ---------- 个人黑名单(v10.13, 2026-09-29 二次修订:多维度判定)----------
// person_blacklist 表:用户指定的候选人。
// 判定原则(用户定稿):必须多维度交叉命中才认定同人,单一维度不触发,防止误伤。
// 维度:① resumeNumber(平台唯一ID,单独即可判定)② 全名 ③ 学校 ④ 工作单位 ⑤ 其他特征词
// 规则:resumeNumber 命中 → 同人;否则 全名+任一特征词 或 学校+工作单位 等任意 ≥2 维命中 → 同人
let PERSON_BLACKLIST = [];
function loadPersonBlacklist(db) {
try {
@@ -63,16 +62,18 @@ function loadPersonBlacklist(db) {
fields: JSON.parse(p.match_fields || '[]'),
}));
if (PERSON_BLACKLIST.length) log(`个人黑名单已加载: ${PERSON_BLACKLIST.length} 人 [${PERSON_BLACKLIST.map(p => p.name).join('、')}]`);
} catch (e) { PERSON_BLACKLIST = []; } // 表不存在等异常不阻塞主流程
} catch (e) { PERSON_BLACKLIST = []; }
}
// 弹窗级匹配:resumeNumber / 全名 / 关键词组全命中
// 弹窗级多维度匹配:统计命中维数,≥2 才认定
function personBlackHitModal(fullName, resumeNumber, rawText) {
for (const p of PERSON_BLACKLIST) {
if (p.resume_number && resumeNumber && p.resume_number === resumeNumber) return `${p.name}(精确ID)`;
if (fullName && p.name && fullName === p.name) return p.name;
if (p.fields.length && rawText && p.fields.every(f => rawText.includes(f))) {
return `${p.name}(字段匹配:${p.fields.join('+')})`;
if (p.resume_number && resumeNumber && p.resume_number === resumeNumber) return `${p.name}(唯一ID)`;
const dims = [];
if (fullName && p.name && fullName === p.name) dims.push('全名');
if (p.fields.length && rawText) {
for (const f of p.fields) if (rawText.includes(f)) dims.push(f.length > 8 ? f.slice(0, 8) + '…' : f);
}
if (dims.length >= 2) return `${p.name}(多维命中:${dims.join('+')})`;
}
return null;
}