|
"""Summary tab rendering functionality""" |
|
|
|
from config import app_config |
|
import plot |
|
import streamlit as st |
|
import data |
|
import utils |
|
from config import app_config |
|
|
|
|
|
|
|
|
|
|
|
def __section(header, df): |
|
"""Build page UI elements""" |
|
st.header(header) |
|
|
|
st.write( |
|
"`Enter the text` to be classified in the text area and then click `Detect`" |
|
) |
|
text = st.text_area("Enter Text:", height=200) |
|
if st.button("Predict"): |
|
model = data.load_model(app_config.model_file) |
|
pred, pred_proba = utils.make_prediction(model, text, proba=True) |
|
pred_col, conf_col = st.columns(2) |
|
with pred_col: |
|
emotion = pred[0] |
|
st.success( |
|
f"Detected Emotion: {emotion.upper()} {app_config.emoji_map[emotion]}" |
|
) |
|
|
|
with conf_col: |
|
st.success(f"Confidence: {pred_proba.max():.2f}%") |
|
fig = plot.plot_proba(model.classes_, pred_proba) |
|
st.plotly_chart(fig, use_container_width=True) |
|
|
|
|
|
st.divider() |
|
with st.expander("Supplementary under-the-hood details:"): |
|
st.info( |
|
body=""" |
|
A trained LogisticRegression model is used here for emotion detection. The model |
|
has been trained on a labeled data of 34,000 samples. Sample data and class |
|
distribution is shown below. |
|
""", |
|
icon=app_config.icon_info, |
|
) |
|
st.dataframe(df.loc[:15, ["Clean_Text", "Emotion"]]) |
|
fig = plot.plot_class_dist(df) |
|
st.plotly_chart(fig, use_container_width=True) |
|
|
|
|
|
|
|
|
|
|
|
def render(df): |
|
__section("Emotions Detection", df) |
|
|