from typing import Tuple, List import gradio as gr from faker import Faker from presidio_analyzer import AnalyzerEngine from presidio_analyzer.nlp_engine import SpacyNlpEngine from presidio_anonymizer import AnonymizerEngine from presidio_anonymizer.entities.engine import OperatorConfig from spacy import Language from examples.common import NLP # noinspection PyMissingConstructor class HuSpaCyNlpEngine(SpacyNlpEngine): def __init__(self, nlp: Language): self.nlp = {"hu": nlp} def process(text: str, fake_data: bool, entities: List) -> Tuple[str, List]: nlp_engine = HuSpaCyNlpEngine(NLP) analyzer = AnalyzerEngine(nlp_engine=nlp_engine, supported_languages=["hu"]) results = analyzer.analyze( text=text, entities=entities, 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()}), "EMAIL_ADDRESS": OperatorConfig("custom", {"lambda": lambda x: fake.email()}), "PHONE_NUMBER": OperatorConfig("custom", {"lambda": lambda x: fake.phone_number()}), "CRYPTO": OperatorConfig("custom", {"lambda": lambda x: fake.password()}), "IP_ADDRESS": OperatorConfig("custom", {"lambda": lambda x: fake.ipv4()}), "URL": OperatorConfig("custom", {"lambda": lambda x: fake.url()}), "DATE_TIME": OperatorConfig("custom", {"lambda": lambda x: fake.date()}), "CREDIT_CARD": OperatorConfig("custom", {"lambda": lambda x: fake.credit_card_number()}), "IBAN_CODE": OperatorConfig("custom", {"lambda": lambda x: fake.iban()}), } 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, ["PERSON", "LOCATION"]], [ "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, [ "PERSON", "LOCATION"]], [ "Vespucci 1450-es években született Firenzében, és 1497 és 1504 között legalább két felfedező úton vett részt. Bárorító leveleket a vespucci@deojeda.es email-címre várt, mellette működött egy hangrögzítője is a +3903827802737 telefonszámon. Adományokat a bitcoin tárcájába (1Fsb3io3hj1jKaRCTRQ89Du88Dp7NxgEcU), bankkártyájára (5200 8282 8282 8210) és IBAN számlaszámára (ES8201289482186115378819) fogadott. Utazási blogja a https://firenze.it/vespucci címen volt elérhető. Legutóbb 1503-03-15-én publikált, ezt a 192.168.0.1 ip-címről tette meg.", True, ["PERSON", "LOCATION", "EMAIL_ADDRESS", "PHONE_NUMBER", "CRYPTO", "IP_ADDRESS", "URL", "DATE_TIME", "CREDIT_CARD", "IBAN_CODE"]], ] 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="Apply de-identification", show_label=True), gr.CheckboxGroup( ['PERSON', 'LOCATION', 'DATE_TIME', 'IP_ADDRESS', 'URL', 'EMAIL_ADDRESS', 'PHONE_NUMBER', 'CREDIT_CARD', 'IBAN_CODE', 'CRYPTO'], label="Entities", show_label=True, value=EXAMPLES[0][2])], outputs=[gr.Textbox(label="Anonymized text", show_label=True), gr.Textbox(label="Tags", show_label=True)], examples=EXAMPLES, # cache_examples=True, )