import streamlit as st
from datetime import datetime
from ercbcm import predict
STATUS_STOPPED = 120001
STATUS_SUBMIT = 120002
STATUS_ERROR = 120003
st.session_state['running_status'] = STATUS_STOPPED
st.markdown("""
Entity Referring Classifier
It knows exactly when you are calling it.
""", unsafe_allow_html=True)
livedemo_col1, livedemo_col2, livedemo_col3 = st.columns([12,1,6])
with livedemo_col1:
# Version.
st.markdown("""
Live Demo version 2.1.0.1216
""", unsafe_allow_html=True)
# Live Demo form.
with st.form("live_demo_form"):
entity = st.text_input('Entity Name:', 'Jimmy')
sentence = st.text_input('Sentence Input:', 'Are you feeling good, Jimmy?',
help='The classifier is going to analyze this sentence.')
if st.form_submit_button('🚀 Submit'):
if entity.lower() not in sentence.lower():
st.session_state['running_status'] = STATUS_ERROR
else:
st.session_state['running_status'] = STATUS_SUBMIT
if st.session_state['running_status'] == STATUS_STOPPED:
st.info('Type something and submit to start!')
elif st.session_state['running_status'] == STATUS_SUBMIT:
if predict(sentence, entity) == 'CALLING':
st.success('It is a **calling**!')
else:
st.success('It is a **mentioning**!')
st.caption(f'Submitted: `{sentence.lower()}` by `{datetime.now().strftime("%Y-%m-%d %H:%M:%S")}`')
elif st.session_state['running_status'] == STATUS_ERROR:
st.warning('The entity name is not in the sentence!')
st.markdown("""
#### Corpus
""")
st.markdown("""
Calling
means that the sentence contains the name and is telling to the entity.
Examples:
- Are you feeling good about it Jimmy?
- Are you feeling good Jimmy?
- Jimmy you are so cool!
""", unsafe_allow_html=True)
st.markdown("""
Mentioning
means that the sentence contains the name but is telling to other person.
Examples:
- Are you feeling good about Jimmy?
- Have you heard about Jimmy?
- Jimmy said that you are so cool!
""", unsafe_allow_html=True)
st.markdown("""
#### Applications and Future Works
""")
st.markdown("""
Developers can apply it on their virtual bots or voice assistants to detect
if the user is calling the bot or just mentioning the bot rather than detecting a fixed wake-up phrase.
It will improve the human-computer interaction and usability.
Additionally, Lingxi is going to expand the project into Simplified Chinese in the future,
implement it into a Discord Bot,
and deliver it into medium-sized channels to see if users feel better in communicating with bots in this way
and if it works well in conversations in practice.
If it works well,
we may try to combine it with the speech-to-text to analyze the experience in the context of voice,
which has a lot more complicated scenarios.
""")
with livedemo_col2:
st.empty()
with livedemo_col3:
st.markdown("""
#### Get Started
""")
st.markdown("""
Hi! I'm the Entity Referring Classifier.
Specify an entity name, and then type a sentence to get started!
""")
st.markdown("""
#### Members
""")
st.markdown("""
Lingxi Li, Li Xu, Zachary Polak, Tudor-Cristian Foca
""")
st.markdown("""
#### Background
""")
st.markdown("""
There are a lot of voice assistants and bots out there,
but they all need a specific prefix to wake them like “hey siri” or “hey alexa”.
At our real world, nobody is communicating with others with such prefix all the time.
Everyone should be able to communicate in a comfortable way including with bots and virtual assistants.
Our aim here is to get rid of the "wake phrase".
""")