feat(core): implement scrub() and pseudo_id() with tests
CI / ruff · pytest (pull_request) Successful in 24s
CI / ruff · pytest (pull_request) Successful in 24s
Rule-based PII scrubber: phones, e-mails, SNILS (checksum-aware), passport, INN, cards, dates of birth, addresses, URLs/handles and person names (dictionary in config/privacy/names_ru.yaml + declension, patronymic and surname heuristics). Idempotent via fixed-point iteration; false-positive guards for ordinary clinical text. pseudo_id normalises SNILS to 11 digits and returns HMAC-SHA256 truncated to 32 hex chars. Refs #2 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,254 @@
|
||||
# Name lexicon for app.core.privacy.scrub() (issue #2). Synthetic-safe: just a list of common Russian names.
|
||||
#
|
||||
# names — nominative forms; case forms (Ивана, Ирине, Сашей...) are generated in code.
|
||||
# Extra explicit forms may follow on the same line, space-separated
|
||||
# (needed for fleeting vowels: "Павел Павла Павлу...").
|
||||
# ambiguous_names — names that are also ordinary words (вера, надежда, роман...). All their forms are
|
||||
# treated as names only with context: capitalised mid-sentence or next to a
|
||||
# patronymic/surname, or after "меня зовут".
|
||||
# ambiguous_forms — single generated forms that collide with ordinary words (кости, коли, жене...).
|
||||
# surname_stopwords — capitalised words that look like surnames (-ов/-ова...) but are ordinary words.
|
||||
|
||||
names:
|
||||
# male
|
||||
- Александр
|
||||
- Алексей
|
||||
- Анатолий
|
||||
- Андрей
|
||||
- Антон
|
||||
- Аркадий
|
||||
- Арсений
|
||||
- Артём
|
||||
- Артем
|
||||
- Артур
|
||||
- Борис
|
||||
- Вадим
|
||||
- Валентин
|
||||
- Валерий
|
||||
- Василий
|
||||
- Виктор
|
||||
- Виталий
|
||||
- Владимир
|
||||
- Владислав
|
||||
- Вячеслав
|
||||
- Геннадий
|
||||
- Георгий
|
||||
- Глеб
|
||||
- Григорий
|
||||
- Даниил
|
||||
- Данил
|
||||
- Данила
|
||||
- Денис
|
||||
- Дмитрий
|
||||
- Евгений
|
||||
- Егор
|
||||
- Ефим
|
||||
- Иван
|
||||
- Игорь
|
||||
- Илья
|
||||
- Ильдар
|
||||
- Кирилл
|
||||
- Константин
|
||||
- Леонид
|
||||
- Максим
|
||||
- Марат
|
||||
- Матвей
|
||||
- Михаил
|
||||
- Никита
|
||||
- Николай
|
||||
- Олег
|
||||
- Павел Павла Павлу Павлом Павле
|
||||
- Пётр Петра Петру Петром Петре
|
||||
- Петр Петра Петру Петром Петре
|
||||
- Ринат
|
||||
- Ростислав
|
||||
- Руслан
|
||||
- Рустам
|
||||
- Святослав
|
||||
- Семён
|
||||
- Семен
|
||||
- Сергей
|
||||
- Станислав
|
||||
- Степан
|
||||
- Тарас
|
||||
- Тимофей
|
||||
- Тимур
|
||||
- Фёдор
|
||||
- Федор
|
||||
- Филипп
|
||||
- Эдуард
|
||||
- Юрий
|
||||
- Яков
|
||||
- Ярослав
|
||||
# male diminutives
|
||||
- Алёша
|
||||
- Алеша
|
||||
- Лёша
|
||||
- Леша
|
||||
- Боря
|
||||
- Ваня
|
||||
- Вася
|
||||
- Витя
|
||||
- Вова
|
||||
- Володя
|
||||
- Влад
|
||||
- Гоша
|
||||
- Гриша
|
||||
- Даня
|
||||
- Дима
|
||||
- Егорка
|
||||
- Женя
|
||||
- Костя
|
||||
- Коля
|
||||
- Лёня
|
||||
- Леня
|
||||
- Макс
|
||||
- Миша
|
||||
- Митя
|
||||
- Паша
|
||||
- Петя
|
||||
- Рома
|
||||
- Саша
|
||||
- Серёжа
|
||||
- Сережа
|
||||
- Стас
|
||||
- Стёпа
|
||||
- Степа
|
||||
- Толя
|
||||
- Федя
|
||||
- Юра
|
||||
- Гена
|
||||
# female
|
||||
- Алина
|
||||
- Алиса
|
||||
- Алла
|
||||
- Алёна
|
||||
- Алена
|
||||
- Анастасия
|
||||
- Ангелина
|
||||
- Анна
|
||||
- Антонина
|
||||
- Валентина
|
||||
- Варвара
|
||||
- Василиса
|
||||
- Вероника
|
||||
- Галина
|
||||
- Дарья
|
||||
- Диана
|
||||
- Евгения
|
||||
- Екатерина
|
||||
- Елена
|
||||
- Елизавета
|
||||
- Жанна
|
||||
- Зинаида
|
||||
- Инна
|
||||
- Ирина
|
||||
- Карина
|
||||
- Кристина
|
||||
- Ксения
|
||||
- Лариса
|
||||
- Лидия
|
||||
- Людмила
|
||||
- Маргарита
|
||||
- Марина
|
||||
- Мария
|
||||
- Милана
|
||||
- Наталья
|
||||
- Наталия
|
||||
- Нина
|
||||
- Оксана
|
||||
- Олеся
|
||||
- Ольга
|
||||
- Полина
|
||||
- Раиса
|
||||
- Регина
|
||||
- Светлана
|
||||
- Софья
|
||||
- София
|
||||
- Тамара
|
||||
- Татьяна
|
||||
- Ульяна
|
||||
- Эльвира
|
||||
- Юлия
|
||||
- Яна
|
||||
# female diminutives
|
||||
- Аня
|
||||
- Валя
|
||||
- Варя
|
||||
- Вика
|
||||
- Галя
|
||||
- Даша
|
||||
- Ира
|
||||
- Катя
|
||||
- Ксюша
|
||||
- Лена
|
||||
- Лиза
|
||||
- Люда
|
||||
- Маша
|
||||
- Надя
|
||||
- Настя
|
||||
- Наташа
|
||||
- Оля
|
||||
- Поля
|
||||
- Рита
|
||||
- Таня
|
||||
- Юля
|
||||
# ambiguous ones are listed in names too, so their case forms are generated
|
||||
- Вера
|
||||
- Виктория
|
||||
- Лев Льва Льву Львом Льве
|
||||
- Любовь Любови Любовью
|
||||
- Люба
|
||||
- Мила
|
||||
- Надежда
|
||||
- Ника
|
||||
- Роза
|
||||
- Роман
|
||||
- Света
|
||||
- Слава
|
||||
- Соня
|
||||
- Тома
|
||||
|
||||
ambiguous_names:
|
||||
- Вера
|
||||
- Виктория
|
||||
- Лев
|
||||
- Любовь
|
||||
- Люба
|
||||
- Мила
|
||||
- Надежда
|
||||
- Ника
|
||||
- Роза
|
||||
- Роман
|
||||
- Света
|
||||
- Слава
|
||||
- Соня
|
||||
- Тома
|
||||
- Поля
|
||||
|
||||
ambiguous_forms:
|
||||
- коли
|
||||
- вали
|
||||
- кости
|
||||
- костей
|
||||
- жене
|
||||
- жени
|
||||
- гены
|
||||
- машу
|
||||
- семена
|
||||
- вари
|
||||
- кати
|
||||
|
||||
surname_stopwords:
|
||||
- снова
|
||||
- готов
|
||||
- готова
|
||||
- здоров
|
||||
- здорова
|
||||
- слова
|
||||
- основа
|
||||
- один
|
||||
- часов
|
||||
- разов
|
||||
- врачей
|
||||
- сонов
|
||||
Reference in New Issue
Block a user