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