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("

", "") 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()