跳转到主要内容

Presidio Anonymizer包 - 用期望的值替换分析过的文本。

项目描述

Presidio匿名化器

描述

Presidio匿名化器是一个基于Python的模块,用于使用期望的值匿名化检测到的PII文本实体。

Anonymizer Design

在Azure中部署Presidio匿名化器

使用以下按钮将Presidio匿名化器部署到您的Azure订阅。

Deploy to Azure

Presidio-Anonymizer 包包含匿名化工具和去匿名化工具。

  • 匿名化工具 用于将 PII 实体文本替换为其他值。
  • 去匿名化工具 用于恢复匿名化操作。例如,解密加密文本。

匿名化工具

Presidio 匿名化工具默认包含以下匿名化工具

  • 替换:用所需值替换 PII。

    • 参数: new_value - 用给定值替换现有文本。如果未提供或为空,默认行为为:<entity_type> 例如:<PHONE_NUMBER>
  • 删除:完全从文本中删除 PII。

    • 参数:无
  • 散列:使用 sha256、sha512 或 md5 对 PII 进行散列。

    • 参数
      • hash_type:设置散列类型。可以是 sha256sha512md5。默认散列类型为 sha256
  • 屏蔽:用给定字符序列替换 PII。

    • 参数

      • chars_to_mask:要替换的 PII 中字符的数量。
      • masking_char:要替换成的字符。
      • from_end:是否从 PII 的末尾开始屏蔽。
  • 加密:加密 PII 实体文本并用加密字符串替换原始文本。

  • 自定义:用对 PII 字符串执行函数的结果替换 PII。

    • 参数: lambda:对 PII 字符串执行的 Lambda 函数。Lambda 返回类型必须是字符串。

匿名化工具 默认使用高级加密标准 (AES) 作为加密算法,也称为 Rijndael。

  • 参数
    • key:用于加密的加密密钥。密钥长度需要为 128、192 或 256 位,以字符串格式。

注意:如果未提供默认匿名化工具,则所有实体的默认匿名化工具为 "替换"。替换值将是实体类型,例如:<PHONE_NUMBER>

处理实体之间的重叠

由于输入文本可能包含重叠的 PII 实体,存在不同的匿名化场景

  • 无重叠(单个 PII):当实体跨度之间没有重叠时,Presidio 匿名化工具使用给定或默认匿名化操作员对 PII 文本实体进行匿名化和替换。
  • PII 实体跨度完全重叠
    将采用具有更高分数的 PII。在分数相同的 PIIs 之间,选择是任意的。
  • 一个 PII 包含在另一个中:即使分数较低,Presidio 匿名化工具也将使用包含文本较大的 PII。
  • 部分交叉:Presidio 匿名化工具将单独匿名化每个实体,并将返回匿名化文本的连接。例如:对于以下文本
    I'm George Washington Square Park.
    
    假设一个实体是 George Washington,另一个是 Washington State Park,并且假设默认匿名化工具,则结果将是
    I'm <PERSON><LOCATION>.
    

重叠 PII 场景的附加示例

文本

My name is Inigo Montoya. You Killed my Father. Prepare to die. BTW my number is:
03-232323.
  • 无重叠:假设只有 Inigo 被识别为 NAME
    My name is <NAME> Montoya. You Killed my Father. Prepare to die. BTW my number is:
    03-232323.
    
  • 完全重叠:假设号码被识别为 PHONE_NUMBER 且得分为 0.7,以及作为 SSN 的得分为 0.6,较高的分数将被计算
    My name is Inigo Montoya. You Killed my Father. Prepare to die. BTW my number is: <
    PHONE_NUMBER>.
    
  • 一个 PII 包含在另一个中:假设 Inigo 被识别为 FIRST_NAME,而 Inigo Montoya 被识别为 NAME,则将使用较大的一个
    My name is <NAME>. You Killed my Father. Prepare to die. BTW my number is: 03-232323.
    
  • 部分交叉:假设号码 03-2323 被识别为 PHONE_NUMBER,而 232323 被识别为 SSN
    My name is Inigo Montoya. You Killed my Father. Prepare to die. BTW my number is: <
    PHONE_NUMBER><SSN>.
    

去匿名化工具

Presidio 去匿名化工具目前包含一个操作符

  • 解密:用解密文本替换加密文本。使用高级加密标准 (AES) 作为加密算法,也称为 Rijndael。
    • 参数
      • key - 用于加密的加密密钥。密钥长度需要为 128、192 或 256 位,以字符串格式。

请注意:您可以使用 "DEFAULT" 作为操作符密钥来定义所有实体上的操作符。

安装

作为 Python 包

要安装 Presidio 匿名化工具,运行以下命令,最好在虚拟环境中运行

pip install presidio-anonymizer

入门

from presidio_anonymizer import AnonymizerEngine
from presidio_anonymizer.entities import RecognizerResult, OperatorConfig

# Initialize the engine with logger.
engine = AnonymizerEngine()

# Invoke the anonymize function with the text, 
# analyzer results (potentially coming from presidio-analyzer) and
# Operators to get the anonymization output:
result = engine.anonymize(
    text="My name is Bond, James Bond",
    analyzer_results=[
        RecognizerResult(entity_type="PERSON", start=11, end=15, score=0.8),
        RecognizerResult(entity_type="PERSON", start=17, end=27, score=0.8),
    ],
    operators={"PERSON": OperatorConfig("replace", {"new_value": "BIP"})},
)

print(result)

本例使用匿名化引擎加密的PII实体输出,并将其解密回原始文本

from presidio_anonymizer import DeanonymizeEngine
from presidio_anonymizer.entities import OperatorResult, OperatorConfig

# Initialize the engine with logger.
engine = DeanonymizeEngine()

# Invoke the deanonymize function with the text, anonymizer results and
# Operators to define the deanonymization type.
result = engine.deanonymize(
    text="My name is S184CMt9Drj7QaKQ21JTrpYzghnboTF9pn/neN8JME0=",
    entities=[
        OperatorResult(start=11, end=55, entity_type="PERSON"),
    ],
    operators={"DEFAULT": OperatorConfig("decrypt", {"key": "WmZq4t7w!z%C&F)J"})},
)

print(result)

作为Docker服务

在presidio/presidio-anonymizer文件夹中运行

docker-compose up -d

HTTP API

遵循API规范获取匿名化REST API的详细信息

项目详情


下载文件

下载适用于您的平台文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

此版本没有可用的源代码分发文件。请参阅生成分发存档的教程

构建分发

presidio_anonymizer-2.2.355-py3-none-any.whl (31.2 kB 查看哈希值)

上传时间 Python 3

支持