import streamlit as st import pandas as pd import numpy as ny from keras.preprocessing.text import Tokenizer from keras.preprocessing.sequence import pad_sequences from sklearn.preprocessing import LabelEncoder from keras.layers import * from keras import Model map_id = { 0: "sadness", 1: "anger", 2: "love", 3: "surprise", 4: "fear", 5: "joy" } map_emotion = { "sadness": 0, "anger": 1, "love": 2, "surprise": 3, "fear": 4, "joy": 5 } train = pd.read_csv('/train.csv') for index, row in train.iterrows(): row['emotion'] = map_emotion[row['emotion']] tokenizer = Tokenizer() tokenizer.fit_on_texts(train.text) Length = len(tokenizer.word_index) + 1 x_train = pad_sequences(tokenizer.texts_to_sequences(train.text), maxlen=30) encoder = LabelEncoder() encoder.fit(train["emotion"].to_list()) y_train = encoder.transform(train["emotion"].to_list()) y_train = y_train.reshape(-1, 1) embedding_layer = Embedding(Length, 64, input_length=30) input_seq = Input(shape=(x_train.shape[1],)) x = embedding_layer(input_seq) x = LSTM(10, return_sequences=True) (x) x = Flatten() (x) output = Dense(encoder.classes_.shape[0], activation="softmax") (x) model = Model(input_seq, output) model.compile(optimizer='adam', loss="sparse_categorical_crossentropy", metrics=["accuracy"]) model.fit(x_train, y_train, epochs=20, batch_size=32, validation_data=(x_val, y_val)) class Predict: def __init__(self, model, tokenizer): self.model = model self.tokenizer = tokenizer def predict(self, txt): x = pad_sequences(self.tokenizer.texts_to_sequences([txt]), maxlen=30) x = self.model(x) x = ny.argmax(x) return map_id[x] predict = Predict(model, tokenizer) st.title("TONE DETECTION | BCS WINTER PROJECT") st.write("Enter a sentence to analyze text's Tone:") user_input = st.text_input("") if user_input: result = predict.predict(user_input) st.write(f"TONE: {result}")