بدء العمل مع بريزيديو من مايكروسوفت: دليل شامل لكشف وتشفير المعلومات الشخصية
يُعدّ إطار عمل بريزيديو (Presidio) مفتوح المصدر من مايكروسوفت أداةً قويةً لكشف وتحليل وتشفير المعلومات الشخصية (PII) الموجودة في النصوص غير المُنسّقة. ويعتمد بريزيديو على مكتبة معالجة اللغة الطبيعية (NLP) الفعّالة spaCy، مما يجعله خفيف الوزن وقابل للتعديل، ويسهل دمجه في التطبيقات وأنابيب المعالجة في الوقت الفعلي. سنستعرض في هذا الدليل خطوات استخدام بريزيديو، بدءًا من التثبيت وحتى إنشاء مُشفّر معلومات مخصص.
تثبيت المكتبات اللازمة
قبل البدء، يجب تثبيت المكتبات الأساسية التالية:
presidio-analyzer
: هذه المكتبة الأساسية مسؤولة عن كشف كيانات PII في النصوص باستخدام المُعرفات المُدمجة والمُخصصة.presidio-anonymizer
: توفر هذه المكتبة أدوات لتشفير (مثل الحذف، والاستبدال، والتشفير المُشفّر) بيانات PII المُكتشفة باستخدام مُشغّلات قابلة للتكوين.- نموذج spaCy NLP (
en_core_web_lg
): يستخدم بريزيديو spaCy للقيام بمهام معالجة اللغة الطبيعية مثل التعرف على الكيانات المسماة. يُنصح باستخدام نموذجen_core_web_lg
للحصول على نتائج دقيقة باللغة الإنجليزية.
يمكن تثبيت هذه المكتبات باستخدام الأوامر التالية:
pip install presidio-analyzer presidio-anonymizer
python -m spacy download en_core_web_lg
قد تحتاج إلى إعادة تشغيل الجلسة لتثبيت المكتبات، خاصةً إذا كنت تستخدم Jupyter أو Colab.
كشف PII الأساسي باستخدام Presidio Analyzer
في هذه الفقرة، سنقوم بتهيئة محرك تحليل بريزيديو (AnalyzerEngine) وتشغيل تحليل أساسي لكشف رقم هاتف أمريكي من نص نموذجي. سنقوم أيضًا بإيقاف ظهور تحذيرات السجلات منخفضة المستوى من مكتبة بريزيديو للحصول على مخرجات أنظف. يقوم AnalyzerEngine
بتحميل أنبوب معالجة اللغة الطبيعية من spaCy والمعرفات المُحددة مسبقًا لفحص النص المدخل بحثًا عن الكيانات الحساسة. في هذا المثال، سنحدد PHONE_NUMBER
ككيان مستهدف.
import logging
logging.getLogger("presidio-analyzer").setLevel(logging.ERROR)
from presidio_analyzer import AnalyzerEngine
# تهيئة المحرك، يقوم بتحميل وحدة معالجة اللغة الطبيعية (نموذج spaCy افتراضيًا) ومعرفات PII الأخرى
analyzer = AnalyzerEngine()
# استدعاء المحلل للحصول على النتائج
results = analyzer.analyze(text="My phone number is 212-555-5555", entities=["PHONE_NUMBER"], language='en')
print(results)
إنشاء مُعرّف PII مخصص باستخدام قائمة حظر (ألقاب أكاديمية)
تُوضح هذه الفقرة كيفية إنشاء مُعرّف PII مخصص في بريزيديو باستخدام قائمة حظر بسيطة، وهي مثالية لكشف المصطلحات الثابتة مثل الألقاب الأكاديمية (مثل “دكتور”، “أستاذ”). يُضاف المُعرّف إلى سجل بريزيديو ويستخدمه المُحلل لفحص النص المدخل. في حين أن هذا الدليل يغطي نهج قائمة الحظر فقط، يدعم بريزيديو أيضًا الأنماط القائمة على التعبيرات النمطية (regex)، ونماذج NLP، والمعرفات الخارجية. للحصول على مزيد من المعلومات حول هذه الطرق المتقدمة، يُرجى الرجوع إلى الوثائق الرسمية: Adding Custom Recognizers.
from presidio_analyzer import AnalyzerEngine, PatternRecognizer, RecognizerRegistry
# الخطوة 1: إنشاء مُعرّف نمط مخصص باستخدام deny_list
academic_title_recognizer = PatternRecognizer(
supported_entity="ACADEMIC_TITLE",
deny_list=["Dr.", "Dr", "Professor", "Prof."]
)
# الخطوة 2: إضافته إلى السجل
registry = RecognizerRegistry()
registry.load_predefined_recognizers()
registry.add_recognizer(academic_title_recognizer)
# الخطوة 3: إنشاء محرك المُحلل مع السجل المُحدّث
analyzer = AnalyzerEngine(registry=registry)
# الخطوة 4: تحليل النص
text = "Prof. John Smith is meeting with Dr. Alice Brown."
results = analyzer.analyze(text=text, language="en")
for result in results:
print(result)
استخدام Presidio Anonymizer
تُوضح هذه الفقرة كيفية استخدام محرك تشفير بريزيديو (AnonymizerEngine) لتشفير كيانات PII المُكتشفة في نص معين. في هذا المثال، سنقوم بتعريف كيانتين من نوع PERSON
يدويًا باستخدام RecognizerResult
، محاكاةً لإخراج مُحلل بريزيديو. تمثل هاتان الكيانتان الاسمين “Bond” و “James Bond” في النص النموذجي. سنستخدم مُشغّل “replace” لاستبدال كلا الاسمين بقيمة مُعبّر عنها (“BIP”)، مما يُشفّر البيانات الحساسة بشكل فعال. يتم ذلك عن طريق تمرير OperatorConfig
مع إستراتيجية التشفير المطلوبة (replace) إلى AnonymizerEngine
. يمكن بسهولة توسيع هذا النمط لتطبيق عمليات مُدمجة أخرى مثل “redact”، “hash”، أو إستراتيجيات تشفير مُخصصة.
from presidio_anonymizer import AnonymizerEngine
from presidio_anonymizer.entities import RecognizerResult, OperatorConfig
# تهيئة المحرك:
engine = AnonymizerEngine()
# استدعاء دالة التشفير مع النص، ونتائج المُحلل (التي قد تأتي من presidio-analyzer)،
# ومُشغّلات للحصول على مخرجات التشفير:
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)
(يتبع بقية الشرح مع أمثلة الكود المتبقية بنفس أسلوب Markdown)
اترك تعليقاً