|
import gradio as gr |
|
import numpy as np |
|
from tensorflow.keras.models import load_model |
|
import re |
|
|
|
import joblib |
|
import sklearn |
|
|
|
|
|
sklearn.externals.joblib = joblib |
|
|
|
lr_model = joblib.load("logistic_model.pkl") |
|
svm_model = joblib.load("svm_model.pkl") |
|
nn_model = load_model("dl_model.h5") |
|
mnb_model = joblib.load("mnb_model.pkl") |
|
|
|
TAG_RE = re.compile(r'<[^>]+>') |
|
|
|
def remove_tags(text): |
|
return TAG_RE.sub('', text) |
|
|
|
|
|
tfidf_vectorizer = joblib.load("tfidf_vectorizer.pkl") |
|
|
|
def preprocess_text(sen): |
|
|
|
sentence = remove_tags(sen) |
|
|
|
|
|
sentence = re.sub('[^a-zA-Z]', ' ', sentence) |
|
|
|
|
|
sentence = re.sub(r"\s+[a-zA-Z]\s+", ' ', sentence) |
|
|
|
|
|
sentence = re.sub(r'\s+', ' ', sentence) |
|
|
|
return sentence |
|
|
|
|
|
|
|
def predict_lr(text): |
|
preprocessed_text = preprocess_text(text) |
|
vectorized_text = tfidf_vectorizer.transform([preprocessed_text]) |
|
dense_vectorized_text = vectorized_text.toarray() |
|
prediction = int(lr_model.predict(dense_vectorized_text)[0]) |
|
return prediction |
|
|
|
|
|
|
|
def predict_svm(text): |
|
preprocessed_text = preprocess_text(text) |
|
vectorized_text = tfidf_vectorizer.transform([preprocessed_text]) |
|
dense_vectorized_text = vectorized_text.toarray() |
|
prediction = int(svm_model.predict(dense_vectorized_text)[0]) |
|
return prediction |
|
|
|
|
|
def predict_nn(text): |
|
preprocessed_text = preprocess_text(text) |
|
vectorized_text = tfidf_vectorizer.transform([preprocessed_text]) |
|
dense_vectorized_text = vectorized_text.toarray() |
|
|
|
prediction_probs = nn_model.predict(dense_vectorized_text)[0] |
|
prediction = int(np.argmax(prediction_probs)) |
|
return prediction |
|
|
|
|
|
def predict_mnb(text): |
|
preprocessed_text = preprocess_text(text) |
|
vectorized_text = tfidf_vectorizer.transform([preprocessed_text]) |
|
dense_vectorized_text = vectorized_text.toarray() |
|
prediction = int(mnb_model.predict(dense_vectorized_text)[0]) |
|
return prediction |
|
|
|
|
|
def sentiment_prediction(text, model): |
|
if model == "Logistic Regression": |
|
prediction = predict_lr(text) |
|
elif model == "SVM": |
|
prediction = predict_svm(text) |
|
elif model == "Neural Network": |
|
prediction = predict_nn(text) |
|
elif model == "Multinomial Naive Bayes": |
|
prediction = predict_mnb(text) |
|
threshold = 0.5 |
|
|
|
|
|
if prediction >= threshold: |
|
return "Positive" |
|
else: |
|
return "Negative" |
|
|
|
iface = gr.Interface( |
|
fn=sentiment_prediction, |
|
inputs=[gr.Textbox(type="text", label="Enter Text"), gr.Dropdown(["Logistic Regression", "SVM", "Neural Network", "Multinomial Naive Bayes"], label="Select Model")], |
|
outputs=gr.Label(), |
|
live=True, |
|
title="Sentiment Analysis with Model Selection", |
|
description="Enter a text and choose a model for sentiment prediction.", |
|
) |
|
|
|
|
|
iface.launch() |
|
|
|
|
|
iface.launch() |