import numpy as np import pandas as pd import tensorflow as tf from tensorflow.keras.preprocessing.text import Tokenizer from tensorflow.keras.preprocessing.sequence import pad_sequences from sklearn.preprocessing import LabelEncoder import gradio as gr import pickle import os # Load model and tokenizer model = tf.keras.models.load_model('sentiment_rnn.h5') # Load tokenizer with open('tokenizer.pkl', 'rb') as f: tokenizer = pickle.load(f) # Initialize label encoder label_encoder = LabelEncoder() label_encoder.fit(["Happy", "Sad", "Neutral"]) def predict_sentiment(text): """ Predict sentiment for a given text """ # Preprocess the text sequence = tokenizer.texts_to_sequences([text]) padded = pad_sequences(sequence, maxlen=50) # Make prediction prediction = model.predict(padded, verbose=0)[0] predicted_class = np.argmax(prediction) sentiment = label_encoder.inverse_transform([predicted_class])[0] confidence = float(prediction[predicted_class]) # Create confidence dictionary for all classes confidences = { "Happy": float(prediction[0]), "Sad": float(prediction[1]), "Neutral": float(prediction[2]) } return sentiment, confidences # Create Gradio interface with gr.Blocks(title="Sentiment Analysis with RNN") as demo: gr.Markdown("# Sentiment Analysis with RNN") gr.Markdown("Enter text to analyze its sentiment (Happy, Sad, or Neutral)") with gr.Row(): text_input = gr.Textbox(label="Input Text", placeholder="Type your text here...") sentiment_output = gr.Label(label="Predicted Sentiment") confidence_output = gr.Label(label="Confidence Scores") submit_btn = gr.Button("Analyze Sentiment") examples = gr.Examples( examples=[ ["I'm feeling great today!"], ["My dog passed away..."], ["The office is closed tomorrow."], ["This is the best day ever!"], ["I feel miserable."], ["There are 12 books on the shelf."] ], inputs=text_input ) def analyze_text(text): sentiment, confidences = predict_sentiment(text) return sentiment, confidences submit_btn.click( fn=analyze_text, inputs=text_input, outputs=[sentiment_output, confidence_output] ) text_input.submit( fn=analyze_text, inputs=text_input, outputs=[sentiment_output, confidence_output] ) # Launch the app if __name__ == "__main__": demo.launch()