import gradio as gr
from gradio_highlightedtextbox import HighlightedTextbox
def convert_tagged_text_to_highlighted_text(
tagged_text: str, tag_id: str, tag_open: str, tag_close: str
) -> list[tuple[str, str | None]]:
return HighlightedTextbox.tagged_text_to_tuples(
tagged_text, tag_id, tag_open, tag_close
)
def convert_highlighted_text_to_tagged_text(
highlighted_text: dict[str, str | list[tuple[str, str | None]]],
tag_id: str,
tag_open: str,
tag_close: str,
) -> str:
return HighlightedTextbox.tuples_to_tagged_text(
highlighted_text["data"], tag_id, tag_open, tag_close
)
initial_text = "It is not something to be ashamed of: it is no different from the personal fears and dislikes of other things that very many people have."
with gr.Blocks() as demo:
tag_id = gr.Textbox(
"Potential issue",
label="Tag ID",
show_label=True,
info="Insert a tag ID to use in the highlighted textbox.",
)
tag_open = gr.Textbox(
"",
label="Tag open",
show_label=True,
info="Insert a tag to mark the beginning of a highlighted section.",
)
tag_close = gr.Textbox(
"",
label="Tag close",
show_label=True,
info="Insert a tag to mark the end of a highlighted section.",
)
with gr.Row():
tagged_t2h = gr.Textbox(
initial_text,
interactive=True,
label="Input",
show_label=True,
info="Insert a text with ... tags to mark spans that will be highlighted.",
)
high_t2h = HighlightedTextbox(
convert_tagged_text_to_highlighted_text(
tagged_t2h.value, tag_id.value, tag_open.value, tag_close.value
),
interactive=True,
label="Output",
info="Highlighted textbox.",
show_legend=True,
show_label=True,
legend_label="Legend:",
show_legend_label=True,
)
with gr.Row():
high_h2t = HighlightedTextbox(
convert_tagged_text_to_highlighted_text(
tagged_t2h.value, tag_id.value, tag_open.value, tag_close.value
),
interactive=True,
label="Input",
info="The following text will be marked by spans according to its highlights.",
show_legend=True,
show_label=True,
legend_label="Legend:",
show_legend_label=True,
)
tagged_h2t = gr.Textbox(
initial_text,
interactive=True,
label="Output",
show_label=True,
)
# Functions
tagged_t2h.change(
fn=convert_tagged_text_to_highlighted_text,
inputs=[tagged_t2h, tag_id, tag_open, tag_close],
outputs=high_t2h,
)
high_t2h.change(
fn=lambda x: x["data"],
inputs=high_t2h,
outputs=high_h2t,
)
high_h2t.change(
fn=convert_highlighted_text_to_tagged_text,
inputs=[high_h2t, tag_id, tag_open, tag_close],
outputs=tagged_h2t,
)
demo.launch()