# external libraries import streamlit as st from transformers import pipeline import pandas as pd # internal libraries from config import config import pipeline def main(): st.set_page_config( layout="centered", # Can be "centered" or "wide". In the future also "dashboard", etc. initial_sidebar_state="auto", # Can be "auto", "expanded", "collapsed" page_title=config.main_title, # String or None. Strings get appended with "• Streamlit". page_icon=config.logo_path, # String, anything supported by st.image, or None. ) if "output" not in st.session_state: st.session_state['data'] = pd.read_csv(config.sample_texts_path) st.session_state['sample_text'] = None generate_text() st.session_state["output"] = False st.session_state["output_text"] = "" st.session_state['inputs'] = {} col1, col2, col3 = st.columns(3) col1.write(' ') col2.image(config.logo_path) col3.write(' ') st.markdown(f"

{config.main_title}

", unsafe_allow_html=True) st.markdown(f"

{config.lecture_title}

", unsafe_allow_html=True) # topic modelling radio bar input_topic_modelling = st.radio( config.topic_modelling_title, config.topic_modelling_answers, horizontal=True) st.session_state['inputs']['input_topic_modelling'] = input_topic_modelling # input text area input_text = st.text_area(config.input_text, st.session_state['sample_text'], height=300) st.session_state['inputs']['input_text'] = input_text # generate sample text button st.button(config.button_text, on_click=generate_text) # choosing segmenter radio bar input_segmenter = st.radio( config.segmenter_title, config.segmenter_answers, horizontal=True) st.session_state['inputs']['input_segmenter'] = input_segmenter # choosing summarizer algorithm radio bar input_summarizer = st.radio( config.summarizer_title, config.summarizer_answers, horizontal=True) st.session_state['inputs']['input_summarizer'] = input_summarizer # generating summary button col1, col2, col3 = st.columns(3) col1.header(' ') col2.button(config.generate_text, on_click=generate_summary) col3.header(' ') if st.session_state["output"]: TOPICS = [key for key, value in st.session_state["output_text"].items() if key != '#'] if config.filter_threshold_summaries: TOPICS = [key for key in TOPICS if st.session_state["output_text"][key]['summary'] != config.threshold_error] st.write(config.output_title) options = {} for topic in TOPICS: option = st.checkbox(topic) options[topic] = option if len(options) == 0: st.warning(config.warning_len_input_text, icon="⚠️") for topic, option in options.items(): if option == True: st.text_area(topic, st.session_state["output_text"][topic]['summary'], disabled=True) def generate_text(): df = st.session_state['data'] df = df[~df['data'].isnull()] df = df[df['data'].str.len().gt(100)] st.session_state['sample_text'] = df.sample(1)['data'].values[0] def generate_summary(): st.session_state["output"] = True MODELS = { 'summarizer':st.session_state['inputs']['input_summarizer'], 'topic_modelling':st.session_state['inputs']['input_topic_modelling'], 'segmentizer':st.session_state['inputs']['input_segmenter'] } with st.spinner('Generating the output of Topic Modeling for Summarization...'): OUTPUT = pipeline.run(st.session_state['inputs']['input_text'], MODELS) st.session_state["output_text"] = OUTPUT st.success('Done!') if __name__ == "__main__": main()