skimlit_project / app.py
danielolusipe's picture
Update app.py
4de3b3f
raw history blame
No virus
3.26 kB
import gradio as gr
import tensorflow as tf
def split_char(text):
return " ".join(list(text))
# Unzipping model
import zipfile
zip_ref = zipfile.ZipFile("Universal_sentence_encoder_Tribrid_embedding_model-20220920T213455Z-001.zip", "r")
zip_ref.extractall()
zip_ref.close()
from spacy.lang.en import English
def make_predictions(Input):
class_names=['BACKGROUND','CONCLUSIONS','METHODS','OBJECTIVE','RESULTS']
# setup English sentence parser
nlp = English()
# create & add sentence splitting pipeline object to sentence parser
nlp.add_pipe('sentencizer')
# create "doc" of parsed sequences
doc=nlp(Input)
# Create a list
sents_list = []
for sent in doc.sents:
sents_list.append(sent.text)
abstract_sentences=sents_list
# Creating a loop to go through each line in abstract and create a list of dictionaries containing festure for each lines
sample_line=[]
for i,line in enumerate(abstract_sentences):
sample_dict={}
sample_dict["text"]=str(line)
sample_dict["line_number"]=i
sample_dict["total_lines"]=len(abstract_sentences)-1
sample_line.append(sample_dict)
# Get all the line_number values from sample abstract
abstract_line_number=[line["line_number"] for line in sample_line]
# one-hot encoding line_number values
abstract_line_number_one_hot=tf.one_hot(abstract_line_number,depth=15)
# Getting all total_number values from sample abstract
abstract_total_lines=[line["total_lines"] for line in sample_line]
# One-hot encoding total_number lines
abstract_total_lines_one_hot=tf.one_hot(abstract_total_lines,depth=20)
# Splitting abstract lines into character
abstract_char=[split_char(sentence) for sentence in abstract_sentences]
#abstract_char=[" ".join(list((sentence) for sentence in abstract_sentences))]
# Loading in model and getting a summary of loaded model
#skimlit_universal_sentence_encoder_model=tf.keras.models.load_model("/content/drive/MyDrive/skimlit_models/Universal_sentence_encoder_Tribrid_embedding_model")
skimlit_universal_sentence_encoder_model=tf.keras.models.load_model("Universal_sentence_encoder_Tribrid_embedding_model-20220920T213455Z-001")
# Making prediction with loaded model on sample abstract
abstract_pred_probs=skimlit_universal_sentence_encoder_model.predict(x=(abstract_line_number_one_hot,
abstract_total_lines_one_hot,
tf.constant(abstract_sentences),
tf.constant(abstract_char)))
# Turning model's prediction into labels
abstract_preds=tf.argmax(abstract_pred_probs,axis=1)
# Turn predicted labels into string class names
predicted_classes=[class_names[i] for i in abstract_preds]
# Visualizing abstract lines and predicted labels
summary=""
for i,line in enumerate(abstract_sentences):
summary=summary+f"{predicted_classes[i]}: {line}\n"
#summary=f"{predicted_classes[i]}: {line}"
return summary
demo = gr.Interface(fn=make_predictions,inputs=gr.Textbox(lines=2, placeholder="Enter Abstract Here..."),outputs="text")
demo.launch(debug=True, inline=True)