Boorla's picture
Upload 3 files
74da44e verified
Raw History Blame Contribute Delete
2.32 kB
import streamlit as st
import pandas as pd
import re
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.preprocessing import LabelEncoder
# Streamlit Config
st.set_page_config(page_title="IMDB Sentiment Analysis", layout="wide")
st.title("๐ŸŽฌ IMDB Sentiment Analysis")
# Load Dataset
def load_data():
df = pd.read_csv(r"C:\Users\pavilion\Desktop\INNOMATICS_PROJECTS(SL)\IMDB_SENTIMENTAL_ANALYSIS\IMDB Dataset.csv")
return df
df = load_data()
# Display Dataset
st.write("### ๐Ÿ“Œ Dataset")
st.dataframe(df)
# Data Cleaning Function
def clean_text(text):
text = re.sub(r'<.*?>', '', text) # Remove HTML tags
text = re.sub(r'[^a-zA-Z\s]', '', text) # Keep only letters
return text.lower().strip()
df["review"] = df["review"].apply(clean_text)
st.write("### ๐Ÿ” Cleaned Dataset")
st.dataframe(df)
# Feature Extraction & Model Training
vectorizer = CountVectorizer(stop_words="english", max_features=10000) # Limit features
X = vectorizer.fit_transform(df["review"]) # Keep it sparse
label_encoder = LabelEncoder()
y = label_encoder.fit_transform(df["sentiment"])
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Train Model
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
# Model Accuracy
accuracy = accuracy_score(y_test, y_pred)
st.write(f"### ๐ŸŽฏ Model Accuracy: `{accuracy:.2f}`")
# User Input for Prediction
st.write("### โœ๏ธ Enter Your Movie Review Below")
text_input = st.text_area("Write your review here...")
if st.button("๐Ÿ”ฎ Predict Sentiment"):
if text_input.strip():
transformed_text = vectorizer.transform([clean_text(text_input)]) # Keep sparse
prediction = model.predict(transformed_text)
if prediction[0] == 1:
st.success("๐ŸŽ‰ **Positive Review!**")
st.balloons()
else:
st.error("โ„๏ธ **Negative Review!**")
st.snow()
else:
st.warning("โš ๏ธ Please enter a review before predicting.")