qeterme's picture
feat: Added PII anonymizer
379b083 unverified
import gradio as gr
from presidio_analyzer import AnalyzerEngine
from presidio_analyzer.nlp_engine import NlpEngineProvider
from presidio_anonymizer import AnonymizerEngine
from faker import Faker
from presidio_anonymizer.entities.engine import OperatorConfig
def process(text: str, fake_data: bool) -> str:
configuration = {
"nlp_engine_name": "spacy",
"models": [{"lang_code": "hu", "model_name": "hu_core_news_lg", }],
}
provider = NlpEngineProvider(nlp_configuration=configuration)
nlp_engine = provider.create_engine()
analyzer = AnalyzerEngine(nlp_engine=nlp_engine,
supported_languages=["hu"])
results = analyzer.analyze(
text=text, entities=["PERSON", "LOCATION"], language="hu")
fake = Faker(locale=["hu_HU"])
fake_operators = {
"PERSON": OperatorConfig("custom", {"lambda": lambda x: fake.name()}),
"LOCATION": OperatorConfig("custom", {"lambda": lambda x: fake.address()}),
}
anonymizer = AnonymizerEngine()
anonymized_text = anonymizer.anonymize(
text=text, analyzer_results=results, operators=fake_operators) if fake_data else anonymizer.anonymize(text=text, analyzer_results=results)
return anonymized_text.text, anonymized_text.items
EXAMPLES = [
["Vespucci 1450-es években született Firenzében, és 1497 és 1504 között legalább két felfedező úton vett részt – az egyiket spanyol, a másikat portugál támogatással.", False],
["Elon Musk 1971-ben született a Dél-afrikai Köztársaságban, anyja Maye Musk (született: Haldeman) modell, apja Errol Musk mérnök, pilóta.", True]
]
demo = gr.Interface(
fn=process,
inputs=[gr.Textbox(value=EXAMPLES[0][0], lines=10, label="Input text", show_label=True),
gr.Checkbox(value=EXAMPLES[0][1], label="Use fake data", show_label=True)],
outputs=[gr.Textbox(label="Anonymized text", show_label=True),
gr.Textbox(label="Tags", show_label=True)],
examples=EXAMPLES,
cache_examples=True,
)