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%}")