File size: 3,593 Bytes
c24562e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
97
98
99
100
101
102
103
104
105
106
107
import gradio as gr
import numpy as np
from tensorflow.keras.models import load_model
import re 
#importing skearn and joblib modules
import joblib
import sklearn

# setting the joblib 
sklearn.externals.joblib = joblib# Load the models

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)

# Load other necessary files like vectorizers or scalers
tfidf_vectorizer = joblib.load("tfidf_vectorizer.pkl")

def preprocess_text(sen):
    # Removing html tags
    sentence = remove_tags(sen)

    # Remove punctuations and numbers
    sentence = re.sub('[^a-zA-Z]', ' ', sentence)

    # Single character removal
    sentence = re.sub(r"\s+[a-zA-Z]\s+", ' ', sentence)

    # Removing multiple spaces
    sentence = re.sub(r'\s+', ' ', sentence)

    return sentence

# Function to predict sentiment using Logistic Regression
# Function to predict sentiment using Logistic Regression
def predict_lr(text):
    preprocessed_text = preprocess_text(text)
    vectorized_text = tfidf_vectorizer.transform([preprocessed_text])
    dense_vectorized_text = vectorized_text.toarray()  # Convert to dense array
    prediction = int(lr_model.predict(dense_vectorized_text)[0])
    return prediction


# Function to predict sentiment using SVM
def predict_svm(text):
    preprocessed_text = preprocess_text(text)
    vectorized_text = tfidf_vectorizer.transform([preprocessed_text])
    dense_vectorized_text = vectorized_text.toarray()  # Convert to dense array
    prediction = int(svm_model.predict(dense_vectorized_text)[0])
    return prediction

# Function to predict sentiment using Neural Network
def predict_nn(text):
    preprocessed_text = preprocess_text(text)
    vectorized_text = tfidf_vectorizer.transform([preprocessed_text])
    dense_vectorized_text = vectorized_text.toarray()  # Convert to dense array

    prediction_probs = nn_model.predict(dense_vectorized_text)[0]
    prediction = int(np.argmax(prediction_probs))
    return prediction

# Function to predict sentiment using Multinomial Naive Bayes
def predict_mnb(text):
    preprocessed_text = preprocess_text(text)
    vectorized_text = tfidf_vectorizer.transform([preprocessed_text])
    dense_vectorized_text = vectorized_text.toarray()  # Convert to dense array
    prediction = int(mnb_model.predict(dense_vectorized_text)[0])
    return prediction

# Set the function based on the selected model
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

    # Logic for determining positive or negative sentiment based on the model's prediction
    if prediction >= threshold:
        return "Positive"
    else:
        return "Negative"
# Create the Gradio interface
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.",
)

# Launch the Gradio interface
iface.launch()


iface.launch()