Введение в Microsoft Presidio
Автоматизация обработки персонально идентифицируемой информации (PII) — это важная задача для многих организаций. В этой статье мы рассмотрим, как начать работу с Microsoft Presidio, открытым фреймворком для обнаружения, анализа и анонимизации PII в текстах. Presidio построен на базе библиотеки spaCy, что делает его легким и модульным для интеграции в реальные приложения.
Шаг 1: Установка необходимых библиотек
Для начала работы с Presidio вам нужно установить несколько ключевых библиотек:
- presidio-analyzer: основная библиотека для обнаружения PII.
- presidio-anonymizer: предоставляет инструменты для анонимизации обнаруженной информации.
- spaCy NLP model (en_core_web_lg): используется для обработки естественного языка и распознавания именованных сущностей.
Чтобы установить библиотеки, выполните следующие команды:
pip install presidio-analyzer presidio-anonymizer python -m spacy download en_core_web_lg
Шаг 2: Основное обнаружение PII с помощью Presidio Analyzer
Теперь, когда вы установили необходимые библиотеки, давайте инициализируем движок анализа Presidio и проведем базовый анализ для обнаружения номера телефона из примера текста:
import logging
logging.getLogger("presidio-analyzer").setLevel(logging.ERROR)
from presidio_analyzer import AnalyzerEngine
analyzer = AnalyzerEngine()
results = analyzer.analyze(text="Мой номер телефона 212-555-5555",
entities=["PHONE_NUMBER"],
language='en')
print(results)
Шаг 3: Создание пользовательского распознавателя PII
Presidio позволяет создавать пользовательские распознаватели. Например, вы можете создать распознаватель для выявления академических титулов:
from presidio_analyzer import AnalyzerEngine, PatternRecognizer, RecognizerRegistry
academic_title_recognizer = PatternRecognizer(
supported_entity="ACADEMIC_TITLE",
deny_list=["Dr.", "Dr", "Professor", "Prof."]
)
registry = RecognizerRegistry()
registry.load_predefined_recognizers()
registry.add_recognizer(academic_title_recognizer)
analyzer = AnalyzerEngine(registry=registry)
text = "Профессор Джон Смит встречается с доктором Элис Браун."
results = analyzer.analyze(text=text, language="en")
for result in results:
print(result)
Шаг 4: Использование Presidio Anonymizer
Теперь давайте анонимизируем обнаруженные сущности с помощью движка анонимизации Presidio:
from presidio_anonymizer import AnonymizerEngine
from presidio_anonymizer.entities import RecognizerResult, OperatorConfig
engine = AnonymizerEngine()
result = engine.anonymize(
text="Меня зовут Бонд, Джеймс Бонд",
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": "БИП"})},
)
print(result)
Шаг 5: Индивидуальное распознавание сущностей и анонимизация на основе хеширования
В этом примере мы определим пользовательские PII сущности, такие как номера PAN и Aadhaar, и анонимизируем их с помощью оператора на основе хеширования:
from presidio_analyzer import AnalyzerEngine, PatternRecognizer, Pattern
pan_recognizer = PatternRecognizer(
supported_entity="IND_PAN",
name="PAN Recognizer",
patterns=[Pattern(name="pan", regex=r"\b[A-Z]{5}[0-9]{4}[A-Z]\b", score=0.8)],
supported_language="en"
)
aadhaar_recognizer = PatternRecognizer(
supported_entity="AADHAAR",
name="Aadhaar Recognizer",
patterns=[Pattern(name="aadhaar", regex=r"\b\d{4}[- ]?\d{4}[- ]?\d{4}\b", score=0.8)],
supported_language="en"
)
Шаг 6: Анализ и анонимизация текстов
Теперь давайте проанализируем несколько текстов, содержащих номера PAN и Aadhaar, и анонимизируем их:
from pprint import pprint
text1 = "Мой PAN ABCDE1234F и номер Aadhaar 1234-5678-9123."
text2 = "Его Aadhaar 1234-5678-9123 и PAN ABCDE1234F."
results1 = analyzer.analyze(text=text1, language="en")
anon1 = anonymizer.anonymize(
text1,
results1,
{
"DEFAULT": OperatorConfig("reanonymizer", {"entity_mapping": entity_mapping})
}
)
results2 = analyzer.analyze(text=text2, language="en")
anon2 = anonymizer.anonymize(
text2,
results2,
{
"DEFAULT": OperatorConfig("reanonymizer", {"entity_mapping": entity_mapping})
}
)
print(" Оригинальный текст 1:", text1)
print(" Анонимизированный текст 1:", anon1.text)
print(" Оригинальный текст 2:", text2)
print(" Анонимизированный текст 2:", anon2.text)
Заключение
Microsoft Presidio предоставляет мощные инструменты для работы с PII. Этот фреймворк помогает обеспечить соблюдение законодательства о защите данных, минимизируя риски утечек информации. Начните использовать Presidio, чтобы защитить свою организацию и клиентов.
Дополнительные ресурсы и документация доступны на официальном репозитории Presidio в GitHub. Присоединяйтесь к сообществу разработчиков и следите за новыми обновлениями!














