resume-anonymizer
Version:
A flexible NPM package for anonymizing resumes to reduce bias in hiring
48 lines (47 loc) • 1.66 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.detectPII = detectPII;
exports.removePII = removePII;
exports.removeContactFromObject = removeContactFromObject;
const constants_1 = require("../constants");
function detectPII(text) {
const emails = [...new Set(text.match(constants_1.EMAIL_REGEX) || [])];
const phones = [...new Set(text.match(constants_1.PHONE_REGEX) || [])];
const urls = [...new Set(text.match(constants_1.URL_REGEX) || [])];
return { emails, phones, urls };
}
function removePII(text, pii) {
let result = text;
// Remove emails
pii.emails.forEach(email => {
result = result.replace(new RegExp(email.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g'), '[email removed]');
});
// Remove phones
pii.phones.forEach(phone => {
result = result.replace(new RegExp(phone.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g'), '[phone removed]');
});
// Remove URLs
pii.urls.forEach(url => {
result = result.replace(new RegExp(url.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g'), '[link removed]');
});
return result;
}
function removeContactFromObject(obj, changeLog) {
const result = { ...obj };
if (result.email) {
changeLog.emailRemoved = result.email;
delete result.email;
}
if (result.phone) {
changeLog.phoneRemoved = result.phone;
delete result.phone;
}
if (result.address) {
changeLog.addressRemoved = result.address;
delete result.address;
}
if (result.profiles && Array.isArray(result.profiles)) {
result.profiles = [];
}
return result;
}