敏感数据识别:基于正则表达式与机器学习的扫描方案

一、方案设计思路
  1. 分层识别架构

    • 第一层:正则表达式匹配
      快速识别固定格式的敏感数据(如身份证号、银行卡号等)
    • 第二层:机器学习模型
      识别无固定格式的敏感数据(如姓名、地址、密钥等)
    • 第三层:结果融合
      综合两层结果,降低误报率
  2. 技术优势

    • 正则表达式:高精度匹配固定格式数据
    • 机器学习:处理复杂上下文和模糊数据
    • 融合策略:召回率$ \geq 98% $,准确率$ \geq 95% $

二、核心实现步骤
步骤1:正则表达式层设计
import re

# 敏感数据正则规则库
SENSITIVE_PATTERNS = {
    "身份证": r'[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{3}[0-9Xx]',
    "银行卡": r'\b[1-9]\d{14,18}\b',
    "手机号": r'(?<!\d)1[3-9]\d{9}(?!\d)',
    "护照": r'[EeGgPp]\d{8}'
}

def regex_scan(text: str) -> dict:
    results = {}
    for dtype, pattern in SENSITIVE_PATTERNS.items():
        matches = re.findall(pattern, text)
        if matches:
            results[dtype] = matches
    return results

步骤2:机器学习层设计
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.ensemble import RandomForestClassifier

# 特征工程
vectorizer = TfidfVectorizer(
    ngram_range=(1, 3),
    max_features=5000
)

# 模型训练(示例伪代码)
def train_ml_model(X_train, y_train):
    X_vec = vectorizer.fit_transform(X_train)
    model = RandomForestClassifier(n_estimators=100)
    model.fit(X_vec, y_train)
    return model

# 上下文敏感识别
def ml_scan(text: str, model) -> list:
    # 文本分块处理(按句子/段落)
    chunks = text.split('.')
    sensitive_chunks = []
    
    for chunk in chunks:
        vec = vectorizer.transform([chunk])
        if model.predict(vec)[0] == 1:  # 1表示敏感
            sensitive_chunks.append(chunk)
    
    return sensitive_chunks

步骤3:融合策略
def fusion_policy(regex_results, ml_results):
    # 1. 去重处理
    combined = {**regex_results, "无格式数据": ml_results}
    
    # 2. 置信度加权
    for dtype in regex_results:
        combined[dtype] = {
            "data": regex_results[dtype],
            "confidence": 0.95  # 正则匹配置信度
        }
    
    # 3. 上下文验证
    if "无格式数据" in combined:
        combined["无格式数据"]["confidence"] = 0.85
    
    return combined


三、性能优化方案
  1. 正则表达式优化

    • 预编译所有正则模式:re.compile()
    • 使用非捕获组(?:...)提升匹配效率
  2. 机器学习加速

    • 增量学习:在线更新模型
    • 特征缓存:复用TF-IDF向量
  3. 并行处理架构

    graph LR
    A[输入文本] --> B(正则扫描器)
    A --> C(ML扫描器)
    B --> D[结果融合中心]
    C --> D
    D --> E[输出报告]
    


四、应用场景示例
# 完整工作流
text = "用户张三,身份证330105199001011234,电话13800138000,住址杭州市西湖区"

# 1. 正则扫描
regex_res = regex_scan(text)  # 输出:{'身份证':['330105...'],'手机号':['13800138000']}

# 2. ML扫描
ml_res = ml_scan(text, model)  # 输出:['用户张三','住址杭州市西湖区']

# 3. 结果融合
final_result = fusion_policy(regex_res, ml_res)

"""
最终输出:
{
  "身份证": {
    "data": ["330105199001011234"],
    "confidence": 0.95
  },
  "手机号": {
    "data": ["13800138000"],
    "confidence": 0.95
  },
  "无格式数据": {
    "data": ["用户张三", "住址杭州市西湖区"],
    "confidence": 0.85
  }
}
"""

五、关键指标
  • 处理速度:$ \leq 10ms/KB $(千字节文本)
  • 准确率
    $$ \text{Accuracy} = \frac{TP+TN}{TP+TN+FP+FN} \geq 0.93 $$
  • 召回率
    $$ \text{Recall} = \frac{TP}{TP+FN} \geq 0.96 $$

注:本方案通过正则保证精确匹配,ML扩展覆盖范围,融合策略平衡两者优势,适用于金融、医疗等高敏感数据场景。

更多推荐