Spaces:
Sleeping
Sleeping
| 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 | |
| def load_model(): | |
| model = tf.keras.models.load_model(MODEL_PATH) | |
| return model | |
| 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%}") |