File size: 4,002 Bytes
ff20e6e
 
379b083
265d133
379b083
265d133
379b083
 
265d133
379b083
265d133
379b083
 
265d133
 
 
 
 
 
 
 
379b083
265d133
379b083
 
aa96962
379b083
 
 
 
 
 
aa96962
 
 
 
 
 
167b14f
 
379b083
 
 
 
265d133
 
aa96962
379b083
 
 
 
265d133
 
 
 
 
 
aa96962
265d133
 
 
 
 
379b083
 
 
 
 
aa96962
 
265d133
 
 
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
70
71
72
73
74
75
76
77
78
79
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,
)