Введение в 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. Присоединяйтесь к сообществу разработчиков и следите за новыми обновлениями!