File size: 3,002 Bytes
d2e71f1
 
5bdcff2
 
eed0896
 
 
d2e71f1
d1cc6ee
634e006
 
5bdcff2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f24b138
5bdcff2
 
 
 
 
 
 
634e006
 
 
 
 
 
 
d2e71f1
 
d1cc6ee
 
d2e71f1
d1cc6ee
634e006
d1cc6ee
634e006
d1cc6ee
634e006
d1cc6ee
 
 
 
634e006
eed0896
634e006
eed0896
 
 
5bdcff2
634e006
eed0896
 
 
 
 
 
 
 
 
 
 
 
d1cc6ee
 
634e006
a6b45d1
634e006
a6b45d1
634e006
d1cc6ee
 
 
634e006
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
import streamlit as st
from happytransformer import HappyTextToText, TTSettings
from annotated_text import annotated_text
import difflib
from bokeh.models.widgets import Button
from bokeh.models import CustomJS
from streamlit_bokeh_events import streamlit_bokeh_events

checkpoint = "team-writing-assistant/t5-base-c4jfleg"


def diff_strings(a, b):
    result = []
    diff = difflib.Differ().compare(a.split(), b.split())
    replacement = ""
    for line in diff:
        if line.startswith("  "):
            if len(replacement) == 0:
                result.append(" ")
                result.append(line[2:])
            else:
                result.append(" ")
                result.append(("", replacement, "#ffd"))
                replacement = ""
                result.append(line[2:])
        elif line.startswith("- "):
            if len(replacement) == 0:
                replacement = line[2:]
            else:
                result.append(" ")
                result.append(("", replacement, "#fdd"))
                replacement = ""
        elif line.startswith("+ "):
            if len(replacement) == 0:
                result.append((line[2:], "", "#dfd"))
            else:
                result.append(" ")
                result.append((line[2:], replacement, "#ddf"))
                replacement = ""
    return result


@st.cache(suppress_st_warning=True, allow_output_mutation=True)
def get_happy_text(model_name):
    st.write(f"Loading the HappyTextToText model {model_name}, please wait...")
    return HappyTextToText("T5", model_name)


happy_tt = get_happy_text(checkpoint)
args = TTSettings(num_beams=5, min_length=1)

st.title("Check & Improve English Grammar")
st.markdown("This writing assistant detects πŸ” and corrects ✍️ grammatical mistakes for you!")

st.subheader("Example text: ")
col1, col2 = st.columns([1, 1])
with col1:
    example_1 = st.button("Speed of light is fastest then speed of sound")
with col2:
    example_2 = st.button("Who are the president?")

input_text = st.text_area('Enter your text here')
button = st.button('Submit')


def output(text):
    with st.spinner('Detecting πŸ”..'):
        text = "grammar: " + text
        result = happy_tt.generate_text(text, args=args)
        diff = diff_strings(text[9:], result.text)
        annotated_text(*diff)

        copy_button = Button(label="Copy the Result")
        copy_button.js_on_event("button_click", CustomJS(args=dict(result=result.text), code="""
            navigator.clipboard.writeText(result);
            """))
        streamlit_bokeh_events(
            copy_button,
            events="GET_TEXT",
            key="get_text",
            refresh_on_update=True,
            override_height=75,
            debounce_time=0)


if example_1:
    output("Speed of light is fastest then speed of sound")
elif example_2:
    output("Who are the president?")
elif input_text:
    output(input_text)
  
st.subheader("")

st.text("Built by Team Writing Assistant ❀️")