import gradio as gr import tensorflow as tf import pickle import re import nltk from nltk.corpus import stopwords from nltk.stem import WordNetLemmatizer nltk.download('stopwords') nltk.download('wordnet') # Load model model = tf.keras.models.load_model("sentiment_cnn.keras") # Load tokenizer with open("tokenizer.pkl", "rb") as f: tokenizer = pickle.load(f) max_len = 80 pattern = re.compile(r"(?:\@|https?\://)\S+|[^\w\s#]") lemm = WordNetLemmatizer() stop_words = set(stopwords.words("english")) def preprocess(text): text = text.lower() text = pattern.sub("", text) tokens = text.split() tokens = [lemm.lemmatize(t) for t in tokens if t not in stop_words and len(t) > 1] return " ".join(tokens) def predict(text): clean = preprocess(text) seq = tokenizer.texts_to_sequences([clean]) pad = tf.keras.preprocessing.sequence.pad_sequences(seq, maxlen=max_len) pred = model.predict(pad)[0][0] return "Positive " if pred > 0.5 else "Negative " demo = gr.Interface( fn=predict, inputs=gr.Textbox(lines=3, placeholder="Enter tweet here..."), outputs="text", title="Twitter Sentiment Analyzer", description="CNN based sentiment classifier" ) demo.launch()