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