SentimentAnalysis / src /streamlit_app.py
handex's picture
Update src/streamlit_app.py
61ce52e verified
Raw
History Blame Contribute Delete
1.95 kB
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%}")