File size: 3,834 Bytes
ff20e6e
 
379b083
 
 
 
 
 
 
 
 
 
aa96962
379b083
 
08879de
379b083
 
 
 
 
 
aa96962
379b083
 
aa96962
379b083
 
 
 
 
 
aa96962
 
 
 
 
 
167b14f
 
379b083
 
 
 
 
aa96962
379b083
 
 
 
aa96962
 
 
167b14f
 
379b083
 
 
 
 
aa96962
 
167b14f
379b083
 
 
aa96962
379b083
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
from typing import Tuple, List

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, entities: List) -> Tuple[str, List]:
    configuration = {
        "nlp_engine_name": "spacy",
        "models": [{"lang_code": "hu", "model_name": "hu_core_news_trf", }],
    }

    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=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,
)