alpertml/TopicModelingForSummarization
0
1# external libraries2import streamlit as st3from transformers import pipeline4 5import pandas as pd6 7# internal libraries8from config import config9import pipeline10 11 12def main():13 14 st.set_page_config(15 layout="centered", # Can be "centered" or "wide". In the future also "dashboard", etc.16 initial_sidebar_state="auto", # Can be "auto", "expanded", "collapsed"17 page_title=config.main_title, # String or None. Strings get appended with "• Streamlit". 18 page_icon=config.logo_path, # String, anything supported by st.image, or None.19 )20 21 if "output" not in st.session_state:22 st.session_state['data'] = pd.read_csv(config.sample_texts_path)23 st.session_state['sample_text'] = None24 generate_text()25 st.session_state["output"] = False26 st.session_state["output_text"] = ""27 st.session_state['inputs'] = {}28 29 col1, col2, col3 = st.columns(3)30 col1.write(' ')31 col2.image(config.logo_path)32 col3.write(' ')33 34 st.markdown(f"<h1 style='text-align: center;'>{config.main_title}</h1>", unsafe_allow_html=True)35 st.markdown(f"<h3 style='text-align: center;'>{config.lecture_title}</h3>", unsafe_allow_html=True)36 37 # topic modelling radio bar38 input_topic_modelling = st.radio(39 config.topic_modelling_title,40 config.topic_modelling_answers,41 horizontal=True)42 st.session_state['inputs']['input_topic_modelling'] = input_topic_modelling43 44 # input text area45 input_text = st.text_area(config.input_text, st.session_state['sample_text'], height=300)46 st.session_state['inputs']['input_text'] = input_text47 48 # generate sample text button49 st.button(config.button_text, on_click=generate_text)50 51 # choosing segmenter radio bar52 input_segmenter = st.radio(53 config.segmenter_title,54 config.segmenter_answers,55 horizontal=True)56 st.session_state['inputs']['input_segmenter'] = input_segmenter57 58 # choosing summarizer algorithm radio bar59 input_summarizer = st.radio(60 config.summarizer_title,61 config.summarizer_answers,62 horizontal=True)63 st.session_state['inputs']['input_summarizer'] = input_summarizer64 65 # generating summary button66 col1, col2, col3 = st.columns(3)67 col1.header(' ')68 col2.button(config.generate_text, on_click=generate_summary)69 col3.header(' ')70 71 if st.session_state["output"]:72 73 TOPICS = [key for key, value in st.session_state["output_text"].items() if key != '#']74 75 if config.filter_threshold_summaries:76 TOPICS = [key for key in TOPICS if st.session_state["output_text"][key]['summary'] != config.threshold_error]77 78 st.write(config.output_title)79 options = {}80 for topic in TOPICS:81 option = st.checkbox(topic)82 options[topic] = option83 84 if len(options) == 0:85 st.warning(config.warning_len_input_text, icon="⚠️")86 87 for topic, option in options.items():88 if option == True:89 st.text_area(topic, 90 st.session_state["output_text"][topic]['summary'],91 disabled=True)92 93def generate_text():94 df = st.session_state['data']95 df = df[~df['data'].isnull()]96 df = df[df['data'].str.len().gt(100)]97 st.session_state['sample_text'] = df.sample(1)['data'].values[0]98 99def generate_summary():100 st.session_state["output"] = True101 102 MODELS = {103 'summarizer':st.session_state['inputs']['input_summarizer'],104 'topic_modelling':st.session_state['inputs']['input_topic_modelling'],105 'segmentizer':st.session_state['inputs']['input_segmenter']106 }107 108 with st.spinner('Generating the output of Topic Modeling for Summarization...'):109 OUTPUT = pipeline.run(st.session_state['inputs']['input_text'], MODELS)110 111 st.session_state["output_text"] = OUTPUT112 st.success('Done!')113 114 115if __name__ == "__main__":116 main()