import streamlit as st from transformers import pipeline # Initialize the summarization pipeline summarizer = pipeline("summarization", model="facebook/bart-large-cnn") # Streamlit UI setup st.title("📝 Text Summarization App") # User input box (allows large input text) user_input = st.text_area("Enter text to summarize:", "", height=300) # Custom CSS to position the slider in the top-right corner st.markdown(""" """, unsafe_allow_html=True) # Slider for adjusting summary length in the top-right corner with st.container(): st.markdown('
', unsafe_allow_html=True) summary_length = st.slider( "Adjust Summary Length", min_value=1, max_value=3, value=2, step=1, format="Summary Length: %d" ) st.markdown('
', unsafe_allow_html=True) # Set min and max summary length based on the selected slider value if summary_length == 1: # Short min_len = 10 max_len = 50 elif summary_length == 2: # Medium min_len = 50 max_len = 150 else: # Long min_len = 150 max_len = 300 # Display the selected range for feedback st.write(f"Selected Summary Length: {'Short' if summary_length == 1 else 'Medium' if summary_length == 2 else 'Long'}") # Function to split text into manageable chunks def chunk_text(text, max_chunk_size=1024): tokens = text.split() chunks = [] current_chunk = [] for token in tokens: current_chunk.append(token) if len(' '.join(current_chunk)) > max_chunk_size: chunks.append(' '.join(current_chunk[:-1])) current_chunk = [token] chunks.append(' '.join(current_chunk)) # Add the final chunk return chunks # Button to trigger summarization if st.button("Summarize"): if user_input.strip(): # Ensure there's input before summarizing try: # Split the input into chunks text_chunks = chunk_text(user_input) # Summarize each chunk separately summaries = [] for chunk in text_chunks: summary = summarizer(chunk, max_length=max_len, min_length=min_len, length_penalty=2.0, num_beams=4, early_stopping=True)[0]['summary_text'] summaries.append(summary) # Combine summaries from all chunks full_summary = " ".join(summaries) # Display the generated summary st.subheader("Summarized Text:") st.write(full_summary) except Exception as e: st.error(f"An error occurred while summarizing: {e}") else: st.warning("Please enter some text to summarize.")