oroszgy's picture
feat: speed up demo loading time by using the common NLP object
265d133 unverified
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,
)