import gradio as gr import joblib import re import nltk from nltk.corpus import stopwords from nltk.tokenize import word_tokenize nltk.download('punkt', quiet=True) nltk.download('stopwords', quiet=True) nltk.download('punkt_tab', quiet=True) from nltk.tokenize.punkt import PunktSentenceTokenizer, PunktTrainer trainer = PunktTrainer() tokenizer = PunktSentenceTokenizer(trainer.train("")) # Load model and vectorizer model = joblib.load("sentiment_model.pkl") vectorizer = joblib.load("tfidf_vectorizer.pkl") def preprocess(text): text = str(text).lower() text = re.sub(r'[^a-z\s]', '', text) tokens = text.split() # simpler than word_tokenize tokens = [t for t in tokens if t not in stopwords.words('english')] return ' '.join(tokens) # Prediction function def predict_sentiment(text): processed = preprocess(text) print("Processed:", processed) # debug vectorized = vectorizer.transform([processed]) prediction = model.predict(vectorized)[0] return prediction # Gradio interface demo = gr.Interface( fn=predict_sentiment, inputs=gr.Textbox(lines=2, placeholder="Enter text here..."), outputs="label", title="Sentiment Analysis App", description="Classify text as Positive, Negative, or Neutral" ) demo.launch()