File size: 2,995 Bytes
5558e45
da2c9bd
 
14637b5
 
da2c9bd
 
 
 
a204dfd
da2c9bd
14637b5
da2c9bd
a204dfd
da2c9bd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
beba0cd
4df79e9
da2c9bd
a204dfd
fd0291a
a204dfd
fd0291a
 
 
da2c9bd
3c9ea56
ab2e1ab
 
7ac57fe
14637b5
fc0ac32
 
14637b5
2e51b08
8448570
7ac57fe
 
 
 
 
 
 
 
 
a204dfd
fc0ac32
3c9ea56
 
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
import gradio as gr
import pandas as pd
import numpy as np
from langdetect import detect
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
from sklearn.model_selection import train_test_split
from sklearn.svm import SVR
from sklearn.metrics import mean_squared_error


data = pd.read_csv("modeled_data.csv")
analyzer = SentimentIntensityAnalyzer()


def sample_model(df, regressor, scale=None):
    X = df.drop("rate",axis=1)
    y = df["rate"]
    
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state=1)
    scaled_X_train, scaled_X_test = X_train, X_test
    if scale != None:
        scaler = scale
        scaled_X_train = pd.DataFrame(scaler.fit_transform(X_train), columns = X_train.columns)
        scaled_X_test = pd.DataFrame(scaler.transform(X_test),columns = X_test.columns)
    
    model = regressor
    model.fit(scaled_X_train, y_train)
    y_pred = model.predict(scaled_X_test)
    
    rmse = np.sqrt(mean_squared_error(y_test, y_pred))
    
    return model, scaled_X_train, scaled_X_test, y_train, y_test 


def user_interaction(comment, model):
    
    negative_score = analyzer.polarity_scores(comment)["neg"]
    neutral_score = analyzer.polarity_scores(comment)["neu"]
    positive_score = analyzer.polarity_scores(comment)["pos"]
    compound_score = analyzer.polarity_scores(comment)["compound"]
    rate_pred = model.predict([[negative_score, neutral_score, positive_score, compound_score]])
    
    return round(negative_score,2), round(neutral_score,2), round(positive_score,2), round(compound_score,2), round(rate_pred[0],2)

    
def take_input(comment):
    
    cons_tuned_svr, _, _, _, _ = sample_model(data, SVR(C=3, kernel="rbf", tol=0.001))
    return user_interaction(comment, cons_tuned_svr)


with gr.Blocks() as demo:
    gr.Markdown("# AIN311 Project P05 - MOOC Recommendation")
    gr.Markdown("## Generating a Rating from User Comment")
    with gr.Column():
        gr.Markdown("""
                    ##### Thanks for your interest and taking your time.
                    ##### Tell us about your personal experience enrolling in this course. Was it the right match for you?
                    """)
        input_comment = gr.Textbox(placeholder="Write your comment here...", show_label = False)
        button = gr.Button("What is the Rating I Have Given? Click me to Learn")
        with gr.Row():
            gr.Markdown("#### Generated Rating from Your Comment")
            rating = gr.Number()
            with gr.Column():
                gr.Markdown("#### Sentiment Scores of Your Comment")
                negscore = gr.Number(label="Negativity Score")
                neuscore = gr.Number(label="Neutrality Score")
                posscore = gr.Number(label="Positivity Score")
                compscore = gr.Number(label="Compound Score")
        
    button.click(fn=take_input, inputs=input_comment, outputs=[negscore, neuscore, posscore, compscore, rating])

demo.launch()