File size: 1,949 Bytes
0ce166c
f6b0b01
 
 
 
 
 
 
61ce52e
f6b0b01
932e7f0
 
f6b0b01
61ce52e
f6b0b01
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61ce52e
f6b0b01
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0ce166c
f6b0b01
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
import tensorflow as tf
import pickle
from tensorflow.keras.preprocessing.sequence import pad_sequences
import numpy as np

st.set_page_config(page_title="IMDb Sentiment Analysis", page_icon="🎬")

#Training parameters
MAX_LEN = 200
MODEL_PATH = "src/sentiment_lstm_model.h5"
TOKENIZER_PATH = "src/tokenizer.pickle"

#Load Resources
@st.cache_resource
def load_model():
    model = tf.keras.models.load_model(MODEL_PATH)
    return model

@st.cache_resource
def load_tokenizer():
    with open(TOKENIZER_PATH, 'rb') as handle:
        tokenizer = pickle.load(handle)
    return tokenizer

try:
    model = load_model()
    tokenizer = load_tokenizer()
except Exception as e:
    st.error(f"Error loading files: {e}")
    st.stop()

#Predicion
def predict_sentiment(review_text):
    review_seq = tokenizer.texts_to_sequences([review_text])
    review_pad = pad_sequences(review_seq, maxlen=MAX_LEN)
    
    # Predict
    probability = model.predict(review_pad)[0][0]
    
    if probability > 0.5:
        return "Positive", probability
    else:
        return "Negative", 1 - probability

# --- 4. STREAMLIT UI ---
st.title("🎬 Movie Review Sentiment Analysis")
st.markdown("Enter a movie review below to check if it's **Positive** or **Negative**.")

# Text Input
user_input = st.text_area("Write your review here (English):", height=150)

if st.button("Analyze Sentiment"):
    if user_input.strip() == "":
        st.warning("Please enter some text first.")
    else:
        with st.spinner("Analyzing..."):
            sentiment, score = predict_sentiment(user_input)
            
        # Display Result
        st.divider()
        if sentiment == "Positive":
            st.balloons()
            st.success(f"**Verdict:** {sentiment} 😊")
        else:
            st.error(f"**Verdict:** {sentiment} 😞")
            
        st.progress(float(score))
        st.caption(f"Confidence Score: {score:.2%}")