danielolusipe's picture
Update app.py
d8c0f65 verified
import gradio as gr
import tensorflow as tf
from tensorflow.keras.models import load_model
def split_char(text):
return " ".join(list(text))
# Unzipping model
import zipfile
zip_ref = zipfile.ZipFile("Universal_sentence_encoder_Tribrid_embedding_model.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_model=load_model("Universal_sentence_encoder_Tribrid_embedding_model")
# Making prediction with loaded model on sample abstract
abstract_pred_probs=skimlit_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",
live=True,
title="Sequential sentence classifier for Medical Abstracts",
examples=[["Hepatitis C virus (HCV) and alcoholic liver disease (ALD), either alone or in combination, count for more than two thirds of all liver diseases in the Western world. There is no safe level of drinking in HCV-infected patients and the most effective goal for these patients is total abstinence. Baclofen, a GABA(B) receptor agonist, represents a promising pharmacotherapy for alcohol dependence (AD). Previously, we performed a randomized clinical trial (RCT), which demonstrated the safety and efficacy of baclofen in patients affected by AD and cirrhosis. The goal of this post-hoc analysis was to explore baclofen's effect in a subgroup of alcohol-dependent HCV-infected cirrhotic patients. Any patient with HCV infection was selected for this analysis. Among the 84 subjects randomized in the main trial, 24 alcohol-dependent cirrhotic patients had a HCV infection; 12 received baclofen 10mg t.i.d. and 12 received placebo for 12-weeks. With respect to the placebo group (3/12, 25.0%), a significantly higher number of patients who achieved and maintained total alcohol abstinence was found in the baclofen group (10/12, 83.3%; p=0.0123). Furthermore, in the baclofen group, compared to placebo, there was a significantly higher increase in albumin values from baseline (p=0.0132) and a trend toward a significant reduction in INR levels from baseline (p=0.0716). In conclusion, baclofen was safe and significantly more effective than placebo in promoting alcohol abstinence, and improving some Liver Function Tests (LFTs) (i.e. albumin, INR) in alcohol-dependent HCV-infected cirrhotic patients. Baclofen may represent a clinically relevant alcohol pharmacotherapy for these patients."]],
description="An NLP model that classifies each sentence of a medical abstract to an appropriate heading in order to significantly reduce time to locate the desired information.")
demo.launch(debug=True, inline=True)