File size: 3,493 Bytes
c55e395 3b040bd c55e395 873cdc6 e26a7d2 873cdc6 c55e395 3b040bd c55e395 595c1db c55e395 873cdc6 c55e395 3b040bd c55e395 950187c e26a7d2 873cdc6 c55e395 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
from tensorflow import keras
import streamlit as st
import altair as alt
import plotly.express as px
import pandas as pd
import numpy as np
from datetime import datetime
import joblib
from google.cloud import storage
from tempfile import TemporaryFile
from csv import writer
from datetime import datetime
import os
from dotenv import load_dotenv
from nltk.stem import PorterStemmer
from nltk.corpus import stopwords
import re
from tensorflow import keras
import numpy as np
import pandas as pd
from tensorflow.keras.preprocessing.sequence import pad_sequences
import nltk
from tensorflow.keras.preprocessing.text import one_hot
import re
from nltk.corpus import stopwords
from nltk.stem import PorterStemmer
import pickle
pkl_file = open('m_lb.pkl', 'rb')
le_departure = pickle.load(pkl_file)
pkl_file.close()
model = keras.models.load_model('m_odel.h5')
nltk.download('stopwords')
stopwords = set(nltk.corpus.stopwords.words('english'))
vocabSize = 11000
max_len = 1160
load_dotenv()
emotions_emoji_dict = { "anger":"๐ ",
"disgust":"๐คฎ",
"fear":"๐จ๐ฑ",
"happy":"๐ค",
"joy":"๐",
"neutral":"๐",
"sad":"๐",
"sadness":"๐",
"shame":"๐ณ",
"surprise":"๐ฎ"
}
def predict_emotions(sentence):
sentence = sentence_cleaning(sentence)
result = le_departure.inverse_transform(
np.argmax(model.predict(sentence), axis=-1))[0]
proba = np.max(model.predict(sentence))
print()
return result, proba, get_all_result(model.predict(sentence))
def get_all_result(prediction):
dict = {}
for element in prediction:
for i in range(0, len(element)):
dict[element[i]] = le_departure.inverse_transform([i])[0]
return dict
def sentence_cleaning(sentence):
"""Pre-processing sentence for prediction"""
stemmer = PorterStemmer()
corpus = []
text = re.sub("[^a-zA-Z]", " ", sentence)
text = text.lower()
text = text.split()
text = [stemmer.stem(word) for word in text if word not in stopwords]
text = " ".join(text)
corpus.append(text)
one_hot_word = [one_hot(input_text=word, n=vocabSize) for word in corpus]
pad = pad_sequences(sequences=one_hot_word, maxlen=max_len, padding='pre')
return pad
def main():
st.title("๐คฎ๐จ๐ฑEmotion Classifier๐๐ณ๐ฎ")
menu = ["Home", "Monitor"]
choice = st.sidebar.selectbox("Menu", menu)
if choice == "Home":
st.subheader("Home-Emotion In Text")
with st.form(key='emotion_clf_form'):
raw_text = st.text_area("Type Here")
submit_text = st.form_submit_button(label='Submit')
if submit_text:
col1, col2 = st.columns(2)
res, proba, total_result = predict_emotions(raw_text)
with col1:
st.success("Original Text")
st.write(raw_text)
st.success("Prediction")
st.write("{}:{}".format(res, emotions_emoji_dict[res]))
st.write("Confidence:{}".format(proba))
with col2:
source = pd.DataFrame({'Proba': list(total_result.keys()), 'Emotion': list(total_result.values())})
fig = alt.Chart(source).mark_bar().encode(x='Emotion',y='Proba',color='Emotion')
st.altair_chart(fig,use_container_width=True)
else:
st.subheader("About")
if __name__ == '__main__':
main()
|