
OpenMed 多语言临床文本去标识化实战lang 与 locale 驱动的端侧 PII 脱敏【免费下载链接】openmedLocal-first healthcare AI: clinical NER HIPAA PII de-identification that runs 100% on-device. 2,200 medical models, 21 languages, Apple MLX Python, no cloud, no patient data leaving your network. Apache-2.0项目地址: https://gitcode.com/GitHub_Trending/ope/openmed本篇技术指南讲解 OpenMed 如何对非英语临床文本执行完全端侧的 PII 去标识化只需向deidentify/extract_pii传入lang框架便会自动为该语言挑选专用 PII 模型、语言特定正则模式各国身份证号、电话格式等以及 locale 感知的假数据生成器同时通过locale控制替换用的本土化假数据。读完本文你将掌握如何运行时发现支持语言、处理西班牙语/德语/法语等多语言病历、校验并脱敏 DNI、NIR、Steuer-ID、Codice Fiscale、BSN、CPF、TCKN、Aadhaar 等国家级证件号以及规避混合语言与日期歧义等常见陷阱。何时使用本技能只要源文本不是英语或者替换结果必须看起来像本地人生成的数据就应启用多语言去标识化。典型场景包括处理西班牙语、德语、法语、意大利语、葡萄牙语、荷兰语、印地语、泰卢固语、阿拉伯语、日语、土耳其语等语言的病历需要生成符合目标区域格式的假数据——例如一份德语病历应得到德语风格的假姓名和一个格式合法的 Steuer-ID 替代值而不是美国 SSN需要识别并脱敏各国特有的国民证件号DNI、NIR、Steuer-ID、Codice Fiscale、BSN、CPF、TCKN、Aadhaar 等。OpenMed 的多语言能力由 openmed/core/pii_i18n.py 统一承载每种语言都有专属 PII 模型、语言特定正则模式与 locale 感知的替代值生成器全部在设备端运行无需上传任何数据。运行时发现支持语言不要硬编码支持语言集合会随模型发布不断变化因此正确做法是运行时查询而非把某个数字写死在代码里import openmed from openmed.core.pii_i18n import SUPPORTED_LANGUAGES, get_patterns_for_language print(sorted(SUPPORTED_LANGUAGES)) # 运行时查询该集合是唯一事实来源 # 查询某语言代码对应的默认 PII 模型 models openmed.get_pii_models_by_language(es) # 查询语言特定正则模式国民证件号、电话等 patterns get_patterns_for_language(de)从源码结构看OpenMed 的多语言覆盖相当广openmed/core/pii_i18n.py中的LANGUAGE_NAMES与LANGUAGE_MODEL_PREFIX已为约 40 种语言代码注册了名称与模型前缀涵盖阿萨姆语、孟加拉语、英语、法语、德语、意大利语、西班牙语、荷兰语、印地语、古吉拉特语、卡纳达语、马拉雅拉姆语、马拉地语、尼泊尔语、奥里亚语、旁遮普语、泰米尔语、泰卢固语、乌尔都语、阿姆哈拉语、葡萄牙语、阿拉伯语、波斯语、希伯来语、日语、土耳其语、印尼语、泰语、韩语、罗马尼亚语、俄语、中文、斯瓦希里语、祖鲁语、科萨语、瑞典语、丹麦语、挪威语、乌克兰语、捷克语、希腊语、越南语等但具体哪些语言内置可用模型必须以SUPPORTED_LANGUAGES的运行时结果为准。在openmed/core/language_pack_catalog.py中SUPPORTED_LANGUAGES、LANG_TO_LOCALE、DEFAULT_PII_MODELS均由LANGUAGE_PACK_ADAPTERS语言包适配器统一提供另有NATIONAL_ID_ONLY_LANGUAGES记录仅有国民证件号规则、暂无完整模型的语言。同样的语言列表也通过 MCP 的openmed_list_pii_languages工具对外暴露供 Agent 场景使用。快速开始以西班牙语为例import openmed nota ( El paciente Carlos Hernández (DNI 12345678Z), nacido el 11/04/1979, vive en Calle Mayor 5, Madrid. Teléfono 612 345 678. ) result openmed.deidentify( nota, langes, # 选择西班牙语 PII 模型 ES 语言模式 methodreplace, # 生成 locale 本土化的假值 localees_ES, # Faker locale缺省时由 lang 经 LANG_TO_LOCALE 推导 ) print(result.deidentified_text) # El paciente [surrogate name] (DNI [surrogate]), nacido el [date], ...切换德语只需改语言代码befund Patientin Anna Müller, geb. 11.04.1979, Steuer-ID 12 345 678 901. result openmed.deidentify(befund, langde, methodreplace)底层机制是langes经 openmed/core/model_registry.py 的get_pii_models_by_language解析出西班牙语 PII 模型非英语语言按pii_{lang}_前缀在注册表中匹配英语走独立的通用路径同时经get_patterns_for_language(es)组装西班牙语正则模式集localees_ES则通过openmed.core.anonymizer.locales的LANG_TO_LOCALE映射决定 Faker 假数据表。推荐工作流确认语言受支持通过SUPPORTED_LANGUAGES运行时查询不要信任硬编码数量。向deidentify/extract_pii传lang这一参数同时完成两件事——经get_pii_models_by_language选择语言专属模型经get_patterns_for_language选择国民证件号与格式的正则集。在methodreplace时设置locale生成假数据省略时locale 由lang经LANG_TO_LOCALE推导如pt→pt_PT。可按需覆盖为区域变体pt_BR巴西葡萄牙语、en_GB英国、以及海湾/马格里布阿拉伯语区域标签。让重音归一化自动生效对于基于无重音文本训练的模型如西班牙语deidentify会在推理前自动去除变音符号再把识别出的 span 映射回原始带重音文本因此通常无需手动设置normalize_accents。保持替代值稳定跨文档需要一致替代时使用consistentTrue, seed...。语言特定的国民证件号格式与校验openmed.core.pii_i18n中内置了大量国家级证件号的格式正则 校验和验证器即使模型对某些结构化 ID 把握不足确定性规则仍能兜底捕获。文档整理的核心映射如下语言证件号验证器法语NIR / INSEEvalidate_french_nir德语Steuer-IDvalidate_german_steuer_id意大利语Codice Fiscalevalidate_italian_codice_fiscale西班牙语DNI / NIEvalidate_spanish_dni、validate_spanish_nie荷兰语BSNvalidate_dutch_bsn印地语Aadhaarvalidate_aadhaar葡萄牙语CPF / CNPJvalidate_portuguese_cpf、validate_portuguese_cnpj土耳其语TCKNvalidate_turkish_tckn这些验证器并非简单匹配外形而是真实编码了各国的格式与校验算法。例如法国 NIR/INSEEvalidate_french_nir见 pii_i18n.py15 位字符格式S AA MM DDD CCC OOO KK校验规则为key 97 - (前 13 位数字 mod 97)科西嘉省的2A、2B在计算校验和前分别归一化为19、18首位必须是 1 或 2。德国 Steuer-IDvalidate_german_steuer_id恰好 11 位数字首位不能为 0前 10 位中恰好有一个数字出现 2 或 3 次其余数字各出现一次通过collections.Counter统计频次校验。意大利 Codice Fiscale16 位字母数字混合结构——姓氏辅音 3 位、名字辅音 3 位、出生年 2 位、出生月 1 位字母A–T 映射、出生日 2 位女性加 40、市镇代码 4 位、校验字符 1 位。除表中列举的证件外pii_i18n.py还包含validate_uk_nhs_number、validate_australian_medicare、validate_ontario_health_card、validate_bc_phn等医疗健康证件验证器——源码 docstring 明确指出NHS 号码、澳大利亚 Medicare 卡号、安大略省 OHIP、BC 省 PHN 等直接等同于患者健康标识符应按 PHI 对待。所有语言特定模式经get_patterns_for_language与语言无关的通用模式邮箱、URL、IP、MRZ、USCC、Aadhaar、印度健康 ID 等合并后统一生效并映射到 OpenMed 的CANONICAL_LABELSID_NUM、SSN与其他标识符走相同的策略动作进行脱敏。locale 替换数据的映射细节lang与locale是两套独立机制对应源码中两个不同模块的职责lang决定检测侧模型 模式由 openmed/core/pii_i18n.py 与 model_registry.py 负责locale决定替换侧假数据形状由 openmed/core/anonymizer/locales.py 负责该模块把 OpenMed 的 ISO 639-1 语言代码解析为最合适的 Faker locale。值得注意的映射决策源码 docstring 有明确记录葡萄牙语默认pt_PT如需巴西风格假数据须显式传localept_BR对 CPF/CNPJ 场景尤其重要阿拉伯语默认ar_EG区域标签ar-DZ、ar-MA会选择已安装的区域 Faker 后端不可用时回退ar_EG并发出一次性警告AR_REGION_LOCALES还登记了ar-SA、ar-AE、ar-JO、ar-PS等区域变体中文解析为zh_CN使 PERSON/FIRST_NAME/LAST_NAME 使用姓氏感知、仅汉字的替代值生成器而非拉丁回退部分语言只有近似 localeFaker 没有泰卢固语 locale因此te映射到en_IN并警告一次见_APPROXIMATE_LOCALES阿非利卡语af以nl_NL为运行时后端、阿姆哈拉语am以en_KE为后端但其概念 locale的精选本土数据仍通过语言包提供法语/葡萄牙语的非洲区域概念 localefr_SN、fr_CI、fr_CM、pt_MZ、pt_AO使用精选的各国本土假数据未覆盖的 Faker 方法则委托给fr_FR/pt_PT见CONCEPTUAL_LOCALE_LANGUAGES与FAKER_BACKEND_LOCALE泰米尔语解析到原生ta_INPERSON 替代值保留原文首字母 名字的父名首字母形态越南语解析到原生vi_VN姓名与地址假数据保留声调符号。这些映射有测试约束兜底locales.py的 docstring 记录了回归契约 OM-135——每个SUPPORTED_LANGUAGES语言码都必须在 Faker 中存在对应 locale或为文档化的近似 locale每个带验证器的证件号语言都必须出现在NATIONAL_ID_PROVIDERS中且生成的假值能通过该语言的验证器回环校验仅文档化的近似映射允许发出UserWarning。与其他 OpenMed 能力衔接多语言去标识化不是孤岛可与 OpenMed 的既有能力组合使用核心去标识化deidentifying-clinical-text技能覆盖的方法、阈值、keep_mapping、策略等全部接受lang/locale参数假数据生成generating-synthetic-surrogates技能讲解 locale 本土化假值与各语言自定义 provider隐私策略configuring-privacy-policies技能中的policy对任意lang生效审计auditing-deidentification-runs技能会在无 PHI 审计报告中记录所用模型与语言其他调用面MCP 工具openmed_deidentify/openmed_list_pii_languages以及 REST 端点POST /pii/deidentify两者均接受语言参数。上述技能文档分别位于 skills/deidentifying-clinical-text/SKILL.md、skills/generating-synthetic-surrogates/SKILL.md、skills/configuring-privacy-policies/SKILL.md、skills/auditing-deidentification-runs/SKILL.md。边缘情况与陷阱绝不要用英语模型处理其他语言召回会显著下降。默认模型仅面向英语务必显式传lang。lang≠localelang选择检测模型与模式locale决定替换假值形状。当替代值真实性重要时两者都要设如langpt, localept_BR。部分 locale 是近似映射如泰卢固语te→en_INFaker 无泰卢固语 locale会警告一次如需更贴近区域的替代值请覆盖locale。日期顺序因语言而异日优先语言fr、de、it、es、nl、pt 等会把11/04/1979解析为 4 月 11 日日期移位逻辑是语言感知的移位日期时务必保持lang设置。混合语言病历如西班牙语病历中出现英语标题可能降低召回用auditTrue复核残余风险必要时做二次处理。日志安全无论何种语言日志中只记录偏移量、标签与哈希绝不记录原始 PHI。标准与合规参考HIPAA 去标识化标准 45 CFR 164.514(b)美国以及面向欧盟数据主体的 GDPR 与各成员国数据保护机构DPA要求各国证件号格式与校验规则由 OpenMed 验证器内置实现不捆绑外部注册表核心源码入口openmed/core/pii_i18n.pySUPPORTED_LANGUAGES、get_patterns_for_language、各国验证器、openmed/core/model_registry.pyget_pii_models_by_language、get_default_pii_model、openmed/core/anonymizer/locales.pyLANG_TO_LOCALE与 locale 近似映射、openmed/core/language_pack_catalog.py语言包目录与默认模型。需要进一步阅读时可参考 skills/deidentifying-clinical-text/SKILL.md 掌握方法、阈值与策略配置参考 skills/generating-synthetic-surrogates/SKILL.md 深入 locale 本土化假数据生成并通过 openmed/core/anonymizer/locales.py 与 openmed/core/pii_i18n.py 直接查看完整的语言映射表与验证器实现。【免费下载链接】openmedLocal-first healthcare AI: clinical NER HIPAA PII de-identification that runs 100% on-device. 2,200 medical models, 21 languages, Apple MLX Python, no cloud, no patient data leaving your network. Apache-2.0项目地址: https://gitcode.com/GitHub_Trending/ope/openmed创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考