0

0

如何使用正则表达式与规则匹配实现德语客户对话中的称谓及姓名自动脱敏

花韻仙語

花韻仙語

发布时间:2026-01-30 08:39:11

|

577人浏览过

|

来源于php中文网

原创

如何使用正则表达式与规则匹配实现德语客户对话中的称谓及姓名自动脱敏

本文介绍一种基于可扩展词表与正则预处理的轻量级文本脱敏方案,专为客服邮件/对话转录文本设计,能精准删除“dear”“hello”等称谓后紧跟的称谓词(如mr.、ms.)和人名,同时保留产品名、地名等关键业务信息,无需ner且不依赖crm数据库。

在客户对话文本匿名化任务中,直接使用命名实体识别(NER)易误删产品名、品牌或地点;而维护全量人名停用词表又不可持续。更稳健的策略是结合语义模式识别与结构化规则:利用常见称谓(salutations)、敬称(honorifics)和上下文分隔符(如逗号、换行)构建可维护的规则链,精准定位并移除“称谓 + 敬称 + 姓名”这一固定结构,保留后续全部对话内容。

以下提供两种演进式实现方案,均支持德语文本(不区分大小写),兼容空格冗余、标点粘连等真实场景噪声:

✅ 方案一:增强型规则解析(推荐用于生产)

该方案支持复合称谓(如 "Good morning")、双名("Lisa Martin")、带连字符姓氏("Duncan-Jones")及首逗号标记,鲁棒性强:

MiroThinker
MiroThinker

MiroMind团队推出的研究型开源智能体,专为深度研究与复杂工具使用场景设计

下载
import re

def anonymize_salutation(text: str, 
                         salutations_1=None, 
                         salutations_2=None, 
                         honorifics=None) -> str:
    if salutations_1 is None:
        salutations_1 = ["dear", "dearest", "hello", "hi", "hiya", 
                        "greetings", "salutations", "ok", "good", "my"]
    if salutations_2 is None:
        salutations_2 = ["morning", "day", "afternoon", "evening", 
                        "there", "dear", "dearest"]
    if honorifics is None:
        honorifics = ["mr", "mrs", "dr", "ms", "sir", "master"]

    # 预处理:用特殊标记替代首个逗号(避免干扰姓名切分)
    marked = re.sub(r'^([^,]*),', r'\1 #', text.strip(), count=1)

    # 按空白符分割(自动处理多空格、制表符)
    words = re.split(r'\s+', marked)
    if not words:
        return text

    try:
        # 步骤1:跳过单/双词称谓(如 "Good morning" → 移除前2词)
        i = 0
        if words[i].lower() in salutations_1:
            i += 1
            if i < len(words) and words[i].lower() in salutations_2:
                i += 1

        # 步骤2:跳过敬称(如 "Mr", "Dr")
        if i < len(words) and words[i].lower() in honorifics:
            i += 1

        # 步骤3:跳过第一名字(必删)
        if i < len(words):
            i += 1

        # 步骤4:处理逗号标记与第二名字(如 "Lisa # Martin" → 跳过 # 和 Martin)
        remaining = words[i:]
        if remaining and remaining[0] == '#':
            remaining = remaining[1:]
        if len(remaining) > 1 and remaining[1] == '#':
            remaining = remaining[2:]

        # 还原逗号并拼接
        result = ' '.join(remaining).replace(' #', ',')
        return result.strip()

    except (IndexError, AttributeError):
        return text  # 异常时返回原文,便于日志追踪

# 示例调用
texts = [
    "Dear  mrs chan Blah blah blah",
    "Good morning Ms Daisy Martin, Hope you are well.",
    "Hi there seema hows things?"
]

for t in texts:
    print(f"'{t}' → '{anonymize_salutation(t)}'")
输出示例:'Dear mrs chan Blah blah blah' → 'Blah blah blah''Good morning Ms Daisy Martin, Hope you are well.' → 'Hope you are well.''Hi there seema hows things?' → 'hows things?'

✅ 方案二:Pandas 向量化替换(适合批量处理CSV/Excel)

若数据已加载为 pandas.DataFrame,可结合 str.replace() 实现高效批处理:

import pandas as pd
import re

# 构建动态正则模式:匹配称谓+可选敬称+姓名+可选标点
pattern = r'^(?:dear|hello|hi|greetings|good\s+(?:morning|afternoon|evening)|ok)\s+' \
          r'(?:mr\.?|mrs\.?|ms\.?|dr\.?|sir|master)\s+([^\s,]+)(?:\s+[^\s,]+)?[,\.]?\s*'

df = pd.DataFrame({"text": texts})
df["anonymized"] = df["text"].str.replace(pattern, "", regex=True, case=False).str.strip()

⚠️ 注意事项与最佳实践

  • 词表可扩展性:salutations_1/2 和 honorifics 列表应随业务场景迭代更新(如增加德语称谓 "Sehr geehrte"、"Liebe");
  • 标点鲁棒性:代码显式处理逗号分隔,但对句号、分号需按需扩展 re.sub(r'[,.!?;]\s*$', '', ...);
  • 边界保护:避免误删行中词汇(如 "The product Mr. Clean is great"),本方案仅作用于行首结构,天然规避此风险;
  • 验证先行:上线前务必用真实样本测试,建议添加日志记录未匹配行,持续优化规则;
  • 合规补充:脱敏后建议叠加 re.sub(r'\b[A-Z][a-z]+\s+[A-Z][a-z]+\b', '[REDACTED]', ...) 作为兜底(仅匹配首字母大写的双词组合)。

该方法平衡了精度、可维护性与执行效率,是 GDPR/DSGVO 场景下处理德语客服文本的理想轻量级方案。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

514

2023.06.20

正则表达式不包含
正则表达式不包含

正则表达式,又称规则表达式,,是一种文本模式,包括普通字符和特殊字符,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式的文本。php中文网给大家带来了有关正则表达式的相关教程以及文章,希望对大家能有所帮助。

251

2023.07.05

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

747

2023.07.05

java正则表达式匹配字符串
java正则表达式匹配字符串

在Java中,我们可以使用正则表达式来匹配字符串。本专题为大家带来java正则表达式匹配字符串的相关内容,帮助大家解决问题。

215

2023.08.11

正则表达式空格
正则表达式空格

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。本专题为大家提供正则表达式相关的文章、下载、课程内容,供大家免费下载体验。

351

2023.08.31

Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

293

2023.11.13

正则表达式空格如何表示
正则表达式空格如何表示

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。想了解更多正则表达式空格怎么表示的内容,可以访问下面的文章。

236

2023.11.17

正则表达式中如何匹配数字
正则表达式中如何匹配数字

正则表达式中可以通过匹配单个数字、匹配多个数字、匹配固定长度的数字、匹配整数和小数、匹配负数和匹配科学计数法表示的数字的方法匹配数字。更多关于正则表达式的相关知识详情请看本专题下面的文章。php中文网欢迎大家前来学习。

532

2023.12.06

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

1

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 14.3万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 2.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号