PIISA_Demo / app.py
shamikbose89's picture
Update app.py
4c2841b
raw
history blame
4.17 kB
import gradio as gr
import os
from pii_transform.api.e2e import PiiTextProcessor
from pii_extract.defs import FMT_CONFIG_PLUGIN
examples = []
with open("examples.txt", "r") as f:
examples = f.readlines()
examples_truncated = [example[:50] + "..." for example in examples]
language_choices = {
"English": "en",
"Italian": "it",
"Spanish": "es",
"Portugese": "pt",
"Deutsche": "de",
"French": "fr",
}
language_code = "en"
cache_dir = "/home/user/app/cache"
os.makedirs(cache_dir, exist_ok=True)
if os.path.isdir(cache_dir):
gr.Info("Cache directory created at "+cache_dir)
else:
gr.Warning("Cache directory creation error")
def change_language(language_selection):
global language_code
language_code = language_choices[language_selection]
gr.Info(f"{language_selection} selected")
def process(text, policy):
# Create the object, defining the language to use and the policy
# Further customization is possible by providing a config
if text == "":
print("Empty text field")
gr.Warning("No text present")
return ""
# Custom config to prevent loading of the Presidio plugin
# config = {FMT_CONFIG_PLUGIN: {"piisa-detectors-presidio": {"load": False}}}
proc = PiiTextProcessor(
lang=language_code, default_policy=policy, config="config.json"
)
# Process a text buffer and get the transformed buffer
outbuf = proc(text)
return outbuf
def get_full_example(idx):
return examples[idx]
with gr.Blocks() as demo:
with gr.Row():
with gr.Column(scale=0, min_width=75):
logo = gr.Image("image.jpeg", show_label=False, show_download_button=False)
with gr.Column():
pass
with gr.Column(scale=0, min_width=200):
lang_picker = gr.Dropdown(
choices=list(language_choices.keys()),
label="Select Language",
value=list(language_choices.keys())[0],
type="value",
)
lang_picker.select(change_language, inputs=lang_picker, outputs=None)
with gr.Row():
with gr.Column(scale=2, min_width=400):
text_original = gr.Textbox(
label="Original Text",
lines=10,
placeholder="Enter the text you would like to analyze, or select from one of the examples below",
)
with gr.Column(scale=0, min_width=25):
pass
with gr.Column(scale=0, min_width=100):
for i in range(3):
with gr.Row():
pass
redact_btn = gr.Button(value="Redact", variant="primary", size="sm")
anonymize_btn = gr.Button(value="Anonymize", variant="primary", size="sm")
placeholder_btn = gr.Button(
value="Placeholder", variant="primary", size="sm"
)
with gr.Column(scale=0, min_width=25):
pass
with gr.Column(
scale=2,
min_width=400,
):
text_redacted = gr.TextArea(
label="Transformed Text",
lines=10,
show_copy_button=True,
interactive=False,
)
redact_btn.click(
fn=process,
inputs=[
text_original,
gr.Text(value="redact", visible=False),
],
outputs=text_redacted,
)
anonymize_btn.click(
fn=process,
inputs=[
text_original,
gr.Text(value="synthetic", visible=False),
],
outputs=text_redacted,
)
placeholder_btn.click(
fn=process,
inputs=[
text_original,
gr.Text(value="label", visible=False),
],
outputs=text_redacted,
)
with gr.Row():
example_selector = gr.Dropdown(
examples_truncated, type="index", label="Examples"
)
example_selector.select(
get_full_example, inputs=example_selector, outputs=text_original
)
demo.queue().launch()