关于 data-anonymizer
data-anonymizer 用于检测并处理文本和结构化数据中的个人身份信息,提供多种替换策略、CSV 处理和可选的可逆令牌映射。
主要功能
- 01检测常见个人身份信息
- 02支持遮蔽、删除、哈希或虚假数据替换
- 03处理指定或自动识别的 CSV 列
- 04可选的可逆令牌映射
- 05自定义模式与审计报告
适用场景
- 01清除客服日志中的个人身份信息
- 02匿名化数据库导出数据以供分析
- 03根据生产环境 CSV 创建测试数据
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dkyazzentwatwa/ chatgpt-skills --skill data-anonymizer安装后在 Claude Code 中输入/data-anonymizer确认已加载。
附带文件scripts/data_anonymizer.pyscripts/requirements.txt
详细介绍
数据匿名化工具
检测并屏蔽文本文件和结构化数据中的个人身份信息(PII)。支持多种屏蔽策略,并可大规模处理 CSV 文件。
快速开始
from scripts.data_anonymizer import DataAnonymizer
# Anonymize text
anonymizer = DataAnonymizer()
result = anonymizer.anonymize("Contact John Smith at [email protected] or 555-123-4567")
print(result)
# "Contact [NAME] at [EMAIL] or [PHONE]"
# Anonymize CSV
anonymizer.anonymize_csv("customers.csv", "customers_anon.csv")
功能
- PII 检测:姓名、电子邮件、电话号码、SSN、地址、信用卡、日期
- 多种策略:屏蔽、涂黑、哈希、替换为虚假数据
- CSV 处理:匿名化指定列或自动检测
- 可逆令牌:可选择启用映射以进行去匿名化
- 自定义模式:添加自己的 PII 模式
- 审计报告:列出所有检测到的 PII 及其位置
API 参考
初始化
anonymizer = DataAnonymizer(
strategy="mask", # mask, redact, hash, fake
reversible=False # Enable token mapping
)
文本匿名化
# Basic anonymization
result = anonymizer.anonymize(text)
# With specific PII types
result = anonymizer.anonymize(text, pii_types=["email", "phone"])
# Get detected PII report
result, report = anonymizer.anonymize(text, return_report=True)
屏蔽策略
text = "Email [email protected], call 555-1234"
# Mask (default) - replace with type labels
anonymizer.strategy = "mask"
# "Email [EMAIL], call [PHONE]"
# Redact - replace with asterisks
anonymizer.strategy = "redact"
# "Email ***************, call ********"
# Hash - replace with hash
anonymizer.strategy = "hash"
# "Email a1b2c3d4, call e5f6g7h8"
# Fake - replace with realistic fake data
anonymizer.strategy = "fake"
# "Email [email protected], call 555-9876"
CSV 处理
# Auto-detect PII columns
anonymizer.anonymize_csv("input.csv", "output.csv")
# Specify columns
anonymizer.anonymize_csv(
"input.csv",
"output.csv",
columns=["name", "email", "phone"]
)
# Different strategies per column
anonymizer.anonymize_csv(
"input.csv",
"output.csv",
column_strategies={
"name": "fake",
"email": "hash",
"ssn": "redact"
}
)
可逆匿名化
anonymizer = DataAnonymizer(reversible=True)
# Anonymize with token mapping
result = anonymizer.anonymize("John Smith: [email protected]")
mapping = anonymizer.get_mapping()
# Save mapping securely
anonymizer.save_mapping("mapping.json", encrypt=True, password="secret")
# Later, de-anonymize
anonymizer.load_mapping("mapping.json", password="secret")
original = anonymizer.deanonymize(result)
自定义模式
# Add custom PII pattern
anonymizer.add_pattern(
name="employee_id",
pattern=r"EMP-\d{6}",
label="[EMPLOYEE_ID]"
)
CLI 用法
# Anonymize text file
python data_anonymizer.py --input document.txt --output document_anon.txt
# Anonymize CSV
python data_anonymizer.py --input customers.csv --output customers_anon.csv
# Specific strategy
python data_anonymizer.py --input data.csv --output anon.csv --strategy fake
# Generate audit report
python data_anonymizer.py --input document.txt --report audit.json
# Specific PII types only
python data_anonymizer.py --input doc.txt --types email phone ssn
CLI 参数
| 参数 | 说明 | 默认值 |
|---|---|---|
--input | 输入文件 | 必填 |
--output | 输出文件 | 必填 |
--strategy | 屏蔽策略 | mask |
--types | 要检测的 PII 类型 | all |
--columns | 要处理的 CSV 列 | auto |
--report | 生成审计报告 | - |
--reversible | 启用令牌映射 | False |
支持的 PII 类型
| 类型 | 示例 | 模式 |
|---|---|---|
name | John Smith、Mary Johnson | 基于 NLP |
email | [email protected] | 正则表达式 |
phone | 555-123-4567、(555) 123-4567 | 正则表达式 |
ssn | 123-45-6789 | 正则表达式 |
credit_card | 4111-1111-1111-1111 | 正则表达式 + Luhn |
address | 123 Main St、City、ST 12345 | NLP + 正则表达式 |
date_of_birth | 01/15/1990、January 15, 1990 | 正则表达式 |
ip_address | 192.168.1.1 | 正则表达式 |
示例
匿名化客户支持日志
anonymizer = DataAnonymizer(strategy="mask")
log = """
Ticket #1234: Customer John Doe ([email protected]) called about
billing issue. SSN on file: 123-45-6789. Callback number: 555-867-5309.
Address: 123 Oak Street, Springfield, IL 62701.
"""
result = anonymizer.anonymize(log)
print(result)
# Ticket #1234: Customer [NAME] ([EMAIL]) called about
# billing issue. SSN on file: [SSN]. Callback number: [PHONE].
# Address: [ADDRESS].
数据库导出符合 GDPR 要求
anonymizer = DataAnonymizer(strategy="hash")
# Consistent hashing for joins
anonymizer.anonymize_csv(
"users.csv",
"users_anon.csv",
columns=["email", "name", "phone"]
)
anonymizer.anonymize_csv(
"orders.csv",
"orders_anon.csv",
columns=["customer_email"] # Same hash as users.email
)
根据生产数据生成测试数据
anonymizer = DataAnonymizer(strategy="fake")
# Replace real PII with realistic fake data
anonymizer.anonymize_csv(
"production_data.csv",
"test_data.csv"
)
# Test data has same structure but fake PII
依赖项
pandas>=2.0.0
faker>=18.0.0
限制
- 姓名检测可能会漏掉不常见的姓名
- 地址检测对美国格式的支持效果最佳
- 特定领域的 PII 可能需要自定义模式
- 替换为虚假数据时不会保留原始格式
评论
支持 Markdown