File size: 3,183 Bytes
4954c84
 
 
55479e9
 
 
 
 
 
4954c84
 
55479e9
a3fa4c8
 
 
 
 
 
 
 
 
 
 
 
 
4954c84
55479e9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4954c84
a3fa4c8
 
55479e9
 
 
 
 
a3fa4c8
 
 
 
55479e9
 
 
 
 
 
 
4954c84
a3fa4c8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55479e9
a3fa4c8
 
55479e9
a3fa4c8
 
 
 
 
 
 
 
 
55479e9
 
4954c84
55479e9
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
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 <h>personal fears</h> and <h>dislikes</h> of other things that <h>very many people</h> 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(
        "<h>",
        label="Tag open",
        show_label=True,
        info="Insert a tag to mark the beginning of a highlighted section.",
    )
    tag_close = gr.Textbox(
        "</h>",
        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 <h>...</h> 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()