3 大语言模型预训练数据-3.2 数据处理-3.2.3 隐私消除——使用正则表示方法过滤个人隐私信息数据(包括邮件、电话、地址等)
大模型数据处理中使用正则表示方法过滤个人隐私信息数据(包括邮件、电话、地址等)
- **一、正则表达式过滤个人信息的原理**
- **二、常见个人信息的正则表达式模式**
- 1. **邮箱地址**
- 2. **电话号码**
- 3. **地址信息**
- 4. **身份证号(18位)**
- 5. **银行卡号(简化)**
- **三、代码实现示例(Python)**
- **四、实际应用中的优化点**
- **五、注意事项**
在大模型数据处理中,使用正则表达式过滤个人信息数据是一种高效且灵活的方法。正则表达式通过定义特定模式来匹配敏感信息,以下从 原理、常见正则模式、实现流程及示例三方面详细说明:
一、正则表达式过滤个人信息的原理
-
核心逻辑
正则表达式通过模式匹配识别文本中符合敏感信息特征的字符串,例如:- 邮箱地址的结构特征:
用户名@域名
- 电话号码的数字组合特征:中国手机号以
1[3-9]\d{9}
开头 - 地址的地理标识特征:包含
省/市/区+街道+门牌号
等关键词
- 邮箱地址的结构特征:
-
处理流程
输入文本 → 正则表达式匹配敏感模式 → 替换/删除匹配内容 → 输出脱敏文本
二、常见个人信息的正则表达式模式
1. 邮箱地址
- 通用模式:
\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b
- 解释:匹配
字母/数字/符号+@+域名+后缀
的结构,例如user.name@example.com
。
- 解释:匹配
- 示例:
输入文本:联系我:john.doe@company.com
正则匹配后替换为:联系我:[邮箱已脱敏]
2. 电话号码
- 中国手机号:
1[3-9]\d{9}
(匹配11位数字,以13/14/15/16/17/18/19开头) - 固定电话(含区号):
0\d{2,3}-\d{7,8}
(匹配区号-号码
,如010-12345678
) - 示例:
输入文本:电话:13812345678 或 021-87654321
替换后:电话:[手机号已脱敏] 或 [固话已脱敏]
3. 地址信息
- 简化模式:
[\u4e00-\u9fa5]{2,}省?[\u4e00-\u9fa5]{2,}市?[\u4e00-\u9fa5]{2,}区?[0-9a-zA-Z\u4e00-\u9fa5]+街?道?路?[0-9]号?
- 解释:通过中文地名关键词+数字编号匹配地址,例如
北京市海淀区中关村大街1号
。
- 解释:通过中文地名关键词+数字编号匹配地址,例如
- 示例:
输入文本:地址:广东省深圳市南山区科技园南路56号
替换后:地址:[地址已脱敏]
4. 身份证号(18位)
- 模式:
\d{6}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)
- 解释:匹配
6位地址码+8位出生日期+3位顺序码+1位校验码
,例如110101199001011234
。
- 解释:匹配
5. 银行卡号(简化)
- 模式:
\d{16,19}
- 解释:匹配16-19位数字(实际应用中需结合银行前缀优化)。
三、代码实现示例(Python)
以下是使用Python的re
模块进行个人信息脱敏的示例:
import redef mask_personal_info(text):# 定义正则表达式模式字典patterns = {# 邮箱'email': r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b',# 中国手机号'phone': r'1[3-9]\d{9}',# 固定电话'landline': r'0\d{2,3}-\d{7,8}',# 简化地址(匹配省市区+街道+号码)'address': r'[\u4e00-\u9fa5]{2,}省?[\u4e00-\u9fa5]{2,}市?[\u4e00-\u9fa5]{2,}区?[0-9a-zA-Z\u4e00-\u9fa5]+街?道?路?[0-9]号?',# 身份证号(简化)'id_card': r'\d{17}(\d|X)'}# 替换敏感信息for pattern_name, pattern in patterns.items():text = re.sub(pattern, f'[{pattern_name}已脱敏]', text)return text# 测试示例
sample_text = """
用户信息:
姓名:张三
邮箱:zhangsan@example.com
电话:13912345678,固定电话:010-12345678
地址:北京市海淀区中关村南大街5号
身份证:110101199001011234
银行卡:6222021100012345678
"""desensitized_text = mask_personal_info(sample_text)
print(desensitized_text)
输出结果:
用户信息:
姓名:张三
邮箱:[email已脱敏]
电话:[phone已脱敏],固定电话:[landline已脱敏]
地址:[address已脱敏]
身份证:[id_card已脱敏]
银行卡:6222021100012345678
四、实际应用中的优化点
-
模式组合与优先级
- 复杂场景下可使用
|
连接多个模式(如(邮箱模式)|(电话模式)
),并按敏感程度排序(先匹配身份证,再匹配邮箱)。
- 复杂场景下可使用
-
上下文感知
- 结合关键词过滤,例如仅在
地址:
、电话:
等前缀后匹配对应模式,减少误判。
- 结合关键词过滤,例如仅在
-
性能优化
- 对长文本分块处理,或使用
re.compile()
预编译正则表达式提升效率。
- 对长文本分块处理,或使用
-
多语言支持
- 处理英文地址时,调整模式为
\b[A-Za-z0-9\s,.]+St|Ave|Rd+\b
等(匹配Street
、Avenue
等后缀)。
- 处理英文地址时,调整模式为
五、注意事项
- 误判与漏判:正则表达式无法100%准确识别所有敏感信息(如缩写地址
中关村5号
),需结合机器学习模型(如命名实体识别)提升精度。 - 合规性:脱敏规则需符合《个人信息保护法》等法规,例如身份证号需保留前6位和后4位中间脱敏(
110101******1234
)。 - 灵活配置:允许用户自定义正则模式,以适配特定场景下的敏感信息格式(如企业内部的工号、订单号)。
通过正则表达式与其他技术结合,可在大模型数据处理中高效实现个人信息的自动化过滤,平衡数据可用性与隐私保护需求。