| import pickle
|
| import numpy as np
|
| import tensorflow as tf
|
| from tensorflow.keras.models import load_model
|
| from tensorflow.keras.preprocessing.sequence import pad_sequences
|
| import sys
|
|
|
|
|
| MAX_SEQUENCE_LENGTH = 100
|
|
|
| def load_resources():
|
| try:
|
|
|
| model = load_model('emotion_model.h5')
|
|
|
|
|
| with open('tokenizer.pickle', 'rb') as handle:
|
| tokenizer = pickle.load(handle)
|
|
|
|
|
| with open('label_encoder_classes.npy', 'rb') as f:
|
| classes = np.load(f, allow_pickle=True)
|
|
|
| return model, tokenizer, classes
|
| except Exception as e:
|
| print(f"Error loading resources: {e}")
|
| return None, None, None
|
|
|
| def predict_emotion(text, model, tokenizer, classes):
|
|
|
| sequences = tokenizer.texts_to_sequences([text])
|
| data = pad_sequences(sequences, maxlen=MAX_SEQUENCE_LENGTH)
|
|
|
|
|
| prediction = model.predict(data)
|
| predicted_class_index = np.argmax(prediction)
|
| predicted_emotion = classes[predicted_class_index]
|
| confidence = prediction[0][predicted_class_index]
|
|
|
| return predicted_emotion, confidence
|
|
|
| if __name__ == "__main__":
|
| model, tokenizer, classes = load_resources()
|
|
|
| if model and tokenizer and classes is not None:
|
| if len(sys.argv) > 1:
|
|
|
| text = " ".join(sys.argv[1:])
|
| emotion, confidence = predict_emotion(text, model, tokenizer, classes)
|
| print(f"Input: {text}")
|
| print(f"Predicted Entity: {emotion}")
|
| print(f"Confidence: {confidence:.2f}")
|
| else:
|
|
|
| print("Model loaded successfully.")
|
| print("Type a sentence to analyze its emotion (or 'quit' to exit).")
|
|
|
| while True:
|
| user_input = input("\nEnter text: ")
|
| if user_input.lower() == 'quit':
|
| break
|
|
|
| emotion, confidence = predict_emotion(user_input, model, tokenizer, classes)
|
| print(f"Predicted Entity: {emotion}")
|
| print(f"Confidence: {confidence:.2f}")
|
|
|
|
|