You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure PII实体识别:实体白名单与类别替换技术咨询

Azure PII实体识别技术问题解答

1. 实体白名单支持问题

Azure Text Analytics的recognize_pii_entities方法本身没有原生的白名单传入参数,但可以通过识别后的二次过滤实现白名单功能:

  • 预先定义白名单集合(比如PII_WHITELIST = {"微软", "Andrew"})
  • 在处理识别出的实体时,先判断实体的文本内容是否在白名单内,仅对不在白名单中的实体进行替换处理

2. PII实体替换的更优实现方式

你现有代码的倒序遍历思路是正确的(避免正序替换导致后续实体偏移量错乱),可以从性能和可读性两方面优化:

  1. 用列表拼接替代多次字符串切片(字符串是不可变类型,多次切片会生成大量临时对象,列表拼接更高效)
  2. 整合白名单过滤逻辑到替换流程中
  3. 优化遍历方式,让代码更简洁易读

优化后的代码示例

# 可根据需求调整的白名单集合
PII_WHITELIST = {"微软", "Andrew", "Contoso"}

def replace_with_category(document, doc_result):
    """替换文档中不在白名单内的PII实体为对应类别标签"""
    # 将文档转为列表,方便高效修改
    text_list = list(document)
    # 倒序遍历实体,避免替换后偏移量混乱
    for entity in sorted(doc_result.entities, key=lambda e: e.offset, reverse=True):
        # 提取当前实体的文本内容
        entity_text = document[entity.offset:entity.offset + entity.length]
        # 仅处理不在白名单中的实体
        if entity_text not in PII_WHITELIST:
            category_tag = f"<{entity.category.upper()}>"
            # 替换实体位置的内容为类别标签
            text_list[entity.offset:entity.offset + entity.length] = list(category_tag)
    # 将列表转回字符串返回
    return ''.join(text_list)

def pii_redact_list(documents, language, pii_categories=None):
    """批量处理文档列表,替换非白名单PII实体为对应类别"""
    responses = azure_text_analytics_client.recognize_pii_entities(
        documents, 
        categories_filter=pii_categories, 
        language=language
    )
    redacted_texts = []
    # 用zip直接配对文档和识别结果,替代索引遍历
    for doc_text, doc_result in zip(documents, responses):
        redacted_text = replace_with_category(doc_text, doc_result)
        redacted_texts.append(redacted_text)
    return redacted_texts

优化点说明

  • 列表操作替代字符串切片,减少内存开销,提升大文本处理性能
  • 新增白名单过滤逻辑,直接在替换阶段跳过无需处理的实体
  • 用zip替代索引遍历,代码结构更简洁易读
  • 补充参数默认值,提升函数的鲁棒性

内容的提问来源于stack exchange,提问作者Julian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 16:32:49