Spaces:
Build error
Build error
| import streamlit as st | |
| from annotated_text import annotated_text | |
| from multiprocessing import Process | |
| import math | |
| import re | |
| import json | |
| import difflib | |
| import requests | |
| import time | |
| import os | |
| def start_server(): | |
| '''Helper to start to service through Unicorn ''' | |
| os.system("uvicorn InferenceServer:app --port 8080 --host 0.0.0.0 --workers 1") | |
| def load_models(): | |
| '''One time loading/ Init of models and starting server as a seperate process''' | |
| if not is_port_in_use(8080): | |
| with st.spinner(text="Loading models, please wait..."): | |
| proc = Process(target=start_server, args=(), daemon=True) | |
| proc.start() | |
| while not is_port_in_use(8080): | |
| time.sleep(1) | |
| st.success("Model server started.") | |
| else: | |
| st.success("Model server already running...") | |
| st.session_state['models_loaded'] = True | |
| def is_port_in_use(port): | |
| '''Helper to check if service already running''' | |
| import socket | |
| with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: | |
| return s.connect_ex(('0.0.0.0', port)) == 0 | |
| if 'models_loaded' not in st.session_state: | |
| st.session_state['models_loaded'] = False | |
| def get_correction(input_text, model): | |
| '''Invokes the Neuspell inference service''' | |
| correct_request = "http://0.0.0.0:8080/correct?input_sentence="+input_text + "&model=" + model | |
| correct_response = requests.get(correct_request) | |
| correct_json = json.loads(correct_response.text) | |
| corrected_sentence = correct_json["corrected_sentence"] | |
| diff = diff_strings(input_text, corrected_sentence) | |
| st.markdown(f'##### Corrected text:') | |
| st.write('') | |
| annotated_text(*diff) | |
| def diff_strings(a, b): | |
| '''Highlights corrections with annotated_text library''' | |
| 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, "#39ff14")) | |
| replacement = "" | |
| result.append(line[2:]) | |
| if line.startswith("- "): | |
| if len(replacement) == 0: | |
| replacement = line[2:] | |
| else: | |
| result.append(" ") | |
| result.append(("", replacement, "#39ff14")) | |
| replacement = "" | |
| elif line.startswith("+ "): | |
| if len(replacement) == 0: | |
| result.append((line[2:], "", "#39ff14")) | |
| else: | |
| result.append(" ") | |
| result.append((line[2:], replacement, "#39ff14")) | |
| replacement = "" | |
| return result | |
| if __name__ == "__main__": | |
| st.title('Neuspell - A Python library') | |
| st.subheader('For fast & accurate spell correction') | |
| st.markdown("Added to HuggingFace hub and spaces with π by Prithivi Da.[Fork with HF hub support](https://github.com/PrithivirajDamodaran/neuspell) | [Original repo](https://github.com/neuspell/neuspell)", unsafe_allow_html=True) | |
| st.markdown("<p style='color:blue; display:inline'> Integrate with your app with just few lines of code </p>", unsafe_allow_html=True) | |
| st.markdown(""" | |
| ```python | |
| import neuspell | |
| from neuspell import BertsclstmChecker | |
| checker = BertsclstmChecker() | |
| checker.from_pretrained() | |
| checker.correct("Oh! I loovee it when it starts to rain, its smells awesomee") | |
| # (or) | |
| checker.correct_strings(["sent1", "sent2"]) | |
| # (or) | |
| checker.correct_from_file(src="typo_ridden_texts.txt") | |
| ``` | |
| """) | |
| models = [ | |
| "BERT-LSTM", | |
| "ELMo-LSTM", | |
| "CNN-LSTM" | |
| ] | |
| examples = [ | |
| "what is the reazon for everyone to laeve the comapny?", | |
| "I loovee it when it starts to rain, it smells awesomee", | |
| "Feel free to rech out to me", | |
| "Life is shart, so live freely", | |
| "We know the boy actually stol the books", | |
| " We all ate the foood and then made desert", | |
| ] | |
| if not st.session_state['models_loaded']: | |
| load_models() | |
| st.markdown(f'##### Supported Models:') | |
| selected_model = st.selectbox( | |
| label="Choose a model: (Test and integrate the best that suits your needs)", | |
| options=models | |
| ) | |
| st.markdown(f'##### Try it now:') | |
| input_text = st.selectbox( | |
| label="Choose an example", | |
| options=examples | |
| ) | |
| st.write("(or)") | |
| input_text = st.text_input( | |
| label="Bring your own sentence", | |
| value=input_text | |
| ) | |
| if input_text.strip(): | |
| get_correction(input_text, selected_model) | |