Lifth's picture
Update app.py
5131434 verified
Raw
History Blame Contribute Delete
2.26 kB
import gradio as gr
import nltk
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
from nltk.stem import PorterStemmer
from keras.preprocessing.sequence import pad_sequences
import pickle
import tensorflow as tf
try:
nltk.data.find('corpora/stopwords')
except LookupError:
nltk.download('stopwords')
try:
nltk.data.find('tokenizers/punkt/english.pickle')
except LookupError:
nltk.download('punkt')
try:
nltk.data.find('tokenizers/punkt_tab/english')
except LookupError:
nltk.download('punkt_tab')
try:
with open("movie_sentiment_tokenizer.pkl", "rb") as handle:
tokenizer = pickle.load(handle)
except FileNotFoundError:
raise FileNotFoundError("Tokenizer file not found. Make sure 'moviee_sentiment_tokenizer.pkl' is in the same directory.")
try:
model = tf.keras.models.load_model("movie_sentiment.h5")
except Exception as e:
raise RuntimeError(f"Failed to load the model. Make sure 'movie_sentiment.h5' is in the same directory. Error: {e}")
def preprocess_text(text):
text = text.replace("<br /><br />", "")
tokens = word_tokenize(text)
stop_words = set(stopwords.words("english"))
filtered_tokens = [token.lower() for token in tokens if token.isalpha() and token.lower() not in stop_words]
stemmer = PorterStemmer()
stemmed_tokens = [stemmer.stem(token) for token in filtered_tokens]
return " ".join(stemmed_tokens)
def predict_sentiment(text):
maxlen = 90
processed_text = preprocess_text(text)
seq = tokenizer.texts_to_sequences([processed_text])
padded = pad_sequences(seq, maxlen=maxlen, padding='post')
prediction = model.predict(padded)[0][0]
if prediction > 0.5:
return {"Positive Review 🤩": prediction, "Negative Review 😥": 1 - prediction}
else:
return {"Positive Review 🤩": prediction, "Negative Review 😥": 1 - prediction}
iface = gr.Interface(
fn=predict_sentiment,
inputs=gr.Textbox(lines=10, placeholder="Enter a movie review..."),
outputs=gr.Label(label="Sentiment Prediction"),
title="Sentiment Analysis on Movie Reviews(Eng)",
description="Analyze whether a movie review is positive or negative."
)
if __name__ == "__main__":
iface.launch()