File size: 2,302 Bytes
1b34781
f0acac6
93eddbd
71cc21f
fc87a16
71cc21f
2d06877
71cc21f
 
 
 
abbd961
93eddbd
 
 
 
db7041a
93eddbd
4da66d5
db7041a
 
 
 
 
 
190d9af
db7041a
 
 
 
93eddbd
 
 
 
 
 
 
db7041a
 
 
 
 
93eddbd
 
db7041a
 
 
 
4838617
db7041a
 
 
 
 
 
 
93eddbd
db7041a
 
93eddbd
db7041a
4838617
db7041a
 
 
 
 
 
 
93eddbd
db7041a
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
import streamlit as st
from functions_preprocess import LinguisticPreprocessor, download_if_non_existent, CNN
import pickle
import nltk
import torch
nltk.download('stopwords')
nltk.download('punkt')
download_if_non_existent('corpora/stopwords', 'stopwords')
download_if_non_existent('taggers/averaged_perceptron_tagger', 'averaged_perceptron_tagger')
download_if_non_existent('corpora/wordnet', 'wordnet')


#################################################################### Streamlit interface
st.title("Movie Reviews: An NLP Sentiment analysis")

#################################################################### Cache the model loading

@st.cache_data()
def load_model():
  model_pkl_file = "sentiment_model.pkl"  
  with open(model_pkl_file, 'rb') as file:  
    model = pickle.load(file)
  return model

def load_cnn():
  model = CNN(16236, 300, 128, [3, 8], 0.5, 2)
  model.load_state_dict(torch.load('model_cnn.pkl'))
  model.eval()

  return model

def predict_sentiment(text, model):
    processor.transform(text)
    prediction = model.predict([text])
    return prediction


model_1 = load_model()
model_2 = load_cnn()
processor = LinguisticPreprocessor()


############################################################# Text input

with st.expander("Model 1: SGD Classifier"):
    st.markdown("Give it a go by writing a positive or negative text, and analyze it!")

    # Text input inside the expander
    user_input = st.text_area("Enter text here...", key='model1_input')
    if st.button('Analyze'):
        # Displaying output
        result = predict_sentiment(user_input, model_1)
        if result >= 0.5:
            st.write('The sentiment is: Positive πŸ˜€')
        else:
            st.write('The sentiment is: Negative 😞')

with st.expander("Model 2: CNN Sentiment analysis"):
    st.markdown("Give it a go by writing a positive or negative text, and analyze it!")

    # Text input inside the expander
    user_input = st.text_area("Enter text here...", key='model2_input')
    if st.button('Analyze'):
        # Displaying output
        result = predict_sentiment(user_input, model_2)
        if result >= 0.5:
            st.write('The sentiment is: Positive πŸ˜€')
        else:
            st.write('The sentiment is: Negative 😞')

st.caption("Por @efeperro.")