File size: 1,302 Bytes
b22c324 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | from presidio_analyzer import AnalyzerEngine, PatternRecognizer, Pattern
from presidio_analyzer.nlp_engine import NlpEngineProvider
from presidio_anonymizer import AnonymizerEngine
_provider = NlpEngineProvider(nlp_configuration={
"nlp_engine_name": "spacy",
"models": [{"lang_code": "en", "model_name": "en_core_web_lg"}]
})
analyzer = AnalyzerEngine(nlp_engine=_provider.create_engine())
anonymizer = AnonymizerEngine()
analyzer.registry.add_recognizer(PatternRecognizer(
supported_entity="ACCOUNT_NUMBER",
patterns=[Pattern(name="account_number", regex=r"\d{3}-\d{3}-\d{3}", score=0.8)],
context=["account", "acct", "num", "number", "no.", "#"]
))
_ENTITIES = ["ACCOUNT_NUMBER", "PERSON", "PHONE_NUMBER", "EMAIL_ADDRESS", "CREDIT_CARD"]
# 2 funcs
def check_pii(text: str) -> bool:
"""Returns True if PII is detected — used by planner to block the query."""
results = analyzer.analyze(text=text, language="en", entities=_ENTITIES)
return len(results) > 0
def scrub_pii(text: str) -> str:
"""Replaces PII with placeholders — use this if you want to proceed with a sanitised query instead of blocking."""
results = analyzer.analyze(text=text, language="en", entities=_ENTITIES)
return anonymizer.anonymize(text=text, analyzer_results=results).text |