Sentiment_Analysis / src /streamlit_app.py
atdokmeci's picture
Update src/streamlit_app.py
257829e verified
import streamlit as st
import numpy as np
from tensorflow.keras.models import load_model
import joblib
from tensorflow.keras.preprocessing.sequence import pad_sequences
st.title('Sentiment Analysis Prediction')
# Initialize model and preproc as None
model = None
preproc = None
# Load the model and preprocessor
try:
model = load_model('src/cnn_model.keras')
preproc = joblib.load('src/preproc.joblib')
except Exception as e:
st.error(f"Error loading model or preprocessor: {e}")
text_input = st.text_area('Enter text for sentiment analysis:', '')
# Preprocess function with padding to match model input shape
MAXLEN = 60 # Change this if your model expects a different input length
def preprocess_text(text, preproc):
if isinstance(preproc, dict):
if 'tokenizer' in preproc:
tokenizer = preproc['tokenizer']
seq = tokenizer.texts_to_sequences([text])
seq = pad_sequences(seq, maxlen=MAXLEN)
return seq
elif 'vectorizer' in preproc:
vectorizer = preproc['vectorizer']
return vectorizer.transform([text])
else:
raise ValueError("Unknown preprocessor dict keys.")
else:
if hasattr(preproc, 'transform'):
return preproc.transform([text])
elif hasattr(preproc, 'texts_to_sequences'):
seq = preproc.texts_to_sequences([text])
seq = pad_sequences(seq, maxlen=MAXLEN)
return seq
else:
raise ValueError("Unknown preprocessor type.")
if st.button('Predict Sentiment'):
if not text_input.strip():
st.warning('Please enter some text.')
elif model is None or preproc is None:
st.error('Model or preprocessor not loaded. Please check the files and try again.')
else:
try:
X = preprocess_text(text_input, preproc)
prediction = model.predict(X)
sentiment = 'Positive' if prediction[0][0] < 0.5 else 'Negative'
st.success(f'Prediction: {sentiment}')
except Exception as e:
st.error(f"Error making prediction: {e}")