manjusha-r/email-classification-api
0
1import re2 3def mask_pii(text):4 entities = []5 6 # Full Name (basic pattern for names starting with capital letters)7 name_pattern = re.compile(r'\b([A-Z][a-z]+(?:\s[A-Z][a-z]+)+)\b')8 text, entities = _mask_and_store(text, name_pattern, 'full_name', entities)9 10 # Email11 email_pattern = re.compile(r'\b[\w\.-]+@[\w\.-]+\.\w{2,4}\b')12 text, entities = _mask_and_store(text, email_pattern, 'email', entities)13 14 # Phone Number15 phone_pattern = re.compile(r'\b[789]\d{9}\b')16 text, entities = _mask_and_store(text, phone_pattern, 'phone_number', entities)17 18 # DOB - formats: DD/MM/YYYY, DD-MM-YYYY19 dob_pattern = re.compile(r'\b\d{2}[/-]\d{2}[/-]\d{4}\b')20 text, entities = _mask_and_store(text, dob_pattern, 'dob', entities)21 22 # Aadhar Number (12 digits)23 aadhar_pattern = re.compile(r'\b\d{4}\s\d{4}\s\d{4}\b')24 text, entities = _mask_and_store(text, aadhar_pattern, 'aadhar_num', entities)25 26 # Credit/Debit Card Number (16 digits)27 card_pattern = re.compile(r'\b(?:\d[ -]*?){13,16}\b')28 text, entities = _mask_and_store(text, card_pattern, 'credit_debit_no', entities)29 30 # CVV (3 digits)31 cvv_pattern = re.compile(r'\b\d{3}\b')32 text, entities = _mask_and_store(text, cvv_pattern, 'cvv_no', entities)33 34 # Expiry (MM/YY or MM/YYYY)35 expiry_pattern = re.compile(r'\b(0[1-9]|1[0-2])[/-](\d{2}|\d{4})\b')36 text, entities = _mask_and_store(text, expiry_pattern, 'expiry_no', entities)37 38 return text, entities39 40def _mask_and_store(text, pattern, entity_type, entities):41 for match in pattern.finditer(text):42 start, end = match.span()43 value = match.group()44 text = text[:start] + f'[{entity_type}]' + text[end:]45 entities.append({46 "position": [start, start + len(f'[{entity_type}]')],47 "classification": entity_type,48 "entity": value49 })50 return text, entities51 