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

正则实现指定词汇免替换的姓名匿名化函数优化需求

解决姓名匿名化时误替换指定机构名的问题

核心思路

先将需要保留的机构名单转换为正则匹配规则,在识别姓名时优先跳过这些机构名,仅对不在保留列表内、符合首字母大写格式的词汇执行匿名替换。

实现代码(Python)

假设我们有如下需保留的机构列表:

reserved_institutions = ["Universiteit van Amsterdam", "Harvard University", "Oxford College"]

构建正则规则,先匹配需保留的机构(避免被替换),再匹配需匿名的姓名:

import re

def anonymize_names_with_reservation(text, reserved_list):
    # 转义保留列表中的特殊字符,避免正则语法冲突
    reserved_pattern = "|".join(re.escape(inst) for inst in reserved_list)
    # 正则规则:先匹配保留机构(捕获组1),再匹配首字母大写的单/多词姓名(捕获组2)
    pattern = re.compile(f'({reserved_pattern})|([A-Z][a-z]+(?: [A-Z][a-z]+)*)')
    
    def replace_match(match):
        # 匹配到保留机构则直接返回原内容
        if match.group(1):
            return match.group(1)
        # 匹配到姓名则替换为匿名标识
        else:
            return "[ANONYMIZED_NAME]"
    
    return pattern.sub(replace_match, text)

测试示例

测试文本:

"John Doe works at Universiteit van Amsterdam, and Jane Smith studies at Harvard University."

调用函数:

test_text = "John Doe works at Universiteit van Amsterdam, and Jane Smith studies at Harvard University."
result = anonymize_names_with_reservation(test_text, reserved_institutions)
print(result)

输出结果:

"[ANONYMIZED_NAME] [ANONYMIZED_NAME] works at Universiteit van Amsterdam, and [ANONYMIZED_NAME] [ANONYMIZED_NAME] studies at Harvard University."

关键说明

  • re.escape()用于处理机构名中的特殊字符,防止正则解析出错
  • 正则内的(?: [A-Z][a-z]+)*用来匹配多词姓名(如John Doe),且不生成额外捕获组
  • 回调函数优先判断是否匹配保留机构,确保这类词汇不会被误替换

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:55:00