|
|
import streamlit as st |
|
|
import pickle |
|
|
import string |
|
|
from nltk.corpus import stopwords |
|
|
from nltk.stem import WordNetLemmatizer |
|
|
from nltk.tokenize import word_tokenize |
|
|
import nltk |
|
|
from huggingface_hub import hf_hub_download |
|
|
|
|
|
|
|
|
try: |
|
|
nltk.data.find('tokenizers/punkt_tab') |
|
|
except LookupError: |
|
|
nltk.download('punkt_tab') |
|
|
|
|
|
try: |
|
|
nltk.data.find('corpora/stopwords') |
|
|
except LookupError: |
|
|
nltk.download('stopwords') |
|
|
|
|
|
try: |
|
|
nltk.data.find('corpora/wordnet') |
|
|
except LookupError: |
|
|
nltk.download('wordnet') |
|
|
|
|
|
stop_words = set(stopwords.words('english')) |
|
|
lemmatizer = WordNetLemmatizer() |
|
|
|
|
|
|
|
|
def preprocess_text(text): |
|
|
text = text.lower() |
|
|
text = text.translate(str.maketrans('', '', string.punctuation)) |
|
|
tokens = word_tokenize(text) |
|
|
tokens = [lemmatizer.lemmatize(word) for word in tokens if word not in stop_words] |
|
|
return " ".join(tokens) |
|
|
|
|
|
|
|
|
@st.cache_resource |
|
|
def load_models(): |
|
|
HF_MODEL_REPO = "Redfire-1234/Sentiment-analysis" |
|
|
|
|
|
goboult_model_file = hf_hub_download(HF_MODEL_REPO, "rf_goboult_model.pkl") |
|
|
goboult_tfidf_file = hf_hub_download(HF_MODEL_REPO, "tfidf_goboult.pkl") |
|
|
flipflop_model_file = hf_hub_download(HF_MODEL_REPO, "rf_flipflop_model.pkl") |
|
|
flipflop_tfidf_file = hf_hub_download(HF_MODEL_REPO, "tfidf_flipflop.pkl") |
|
|
|
|
|
with open(goboult_model_file, 'rb') as f: |
|
|
goboult_model = pickle.load(f) |
|
|
with open(goboult_tfidf_file, 'rb') as f: |
|
|
goboult_tfidf = pickle.load(f) |
|
|
with open(flipflop_model_file, 'rb') as f: |
|
|
flipflop_model = pickle.load(f) |
|
|
with open(flipflop_tfidf_file, 'rb') as f: |
|
|
flipflop_tfidf = pickle.load(f) |
|
|
|
|
|
return goboult_model, goboult_tfidf, flipflop_model, flipflop_tfidf |
|
|
|
|
|
goboult_model, goboult_tfidf, flipflop_model, flipflop_tfidf = load_models() |
|
|
|
|
|
|
|
|
st.title("Sentiment Analysis for Goboult & Flipflop") |
|
|
|
|
|
dataset = st.selectbox("Select Dataset", ["Goboult", "Flipflop"]) |
|
|
review = st.text_area("Enter your review here:") |
|
|
|
|
|
if st.button("Predict Sentiment"): |
|
|
if review.strip() == "": |
|
|
st.warning("Please enter a review!") |
|
|
else: |
|
|
cleaned = preprocess_text(review) |
|
|
|
|
|
if dataset.lower() == "goboult": |
|
|
vectorized = goboult_tfidf.transform([cleaned]) |
|
|
pred = goboult_model.predict(vectorized)[0] |
|
|
else: |
|
|
vectorized = flipflop_tfidf.transform([cleaned]) |
|
|
pred = flipflop_model.predict(vectorized)[0] |
|
|
|
|
|
st.success(f"Predicted Sentiment: {pred}") |