Spaces:
Build error
Build error
| """Streamlit frontend for the News Summarization application.""" | |
| import streamlit as st | |
| import pandas as pd | |
| import json | |
| import os | |
| import plotly.express as px | |
| import altair as alt | |
| from utils import analyze_company_data # Import the analysis function directly | |
| # Set page config | |
| st.set_page_config( | |
| page_title="News Summarization App", | |
| page_icon="π°", | |
| layout="wide" | |
| ) | |
| # Show loading message | |
| with st.spinner("Initializing the application... Please wait while we load the models."): | |
| # Initialize components | |
| try: | |
| from utils import NewsExtractor, SentimentAnalyzer, TextSummarizer, TextToSpeechConverter | |
| st.success("Application initialized successfully!") | |
| except Exception as e: | |
| st.error(f"Error initializing application: {str(e)}") | |
| st.info("Please try refreshing the page.") | |
| def process_company(company_name): | |
| """Process company data directly.""" | |
| try: | |
| # Call the analysis function directly from utils | |
| data = analyze_company_data(company_name) | |
| # Generate audio if needed | |
| if 'summary' in data: | |
| from gtts import gTTS | |
| tts = gTTS(text=data['summary'], lang='en') | |
| audio_path = os.path.join('audio_output', f'{company_name}_summary.mp3') | |
| os.makedirs('audio_output', exist_ok=True) | |
| tts.save(audio_path) | |
| data['audio_path'] = audio_path | |
| return data | |
| except Exception as e: | |
| st.error(f"Error processing company: {str(e)}") | |
| return {"articles": [], "comparative_sentiment_score": {}, "final_sentiment_analysis": "", "audio_path": None} | |
| def main(): | |
| st.title("π° News Summarization and Analysis") | |
| # Sidebar | |
| st.sidebar.header("Settings") | |
| # Company name input | |
| company_name = st.text_input("Enter Company Name", "") | |
| if company_name: | |
| with st.spinner("Analyzing company news..."): | |
| data = process_company(company_name) | |
| # Display results | |
| if data["articles"]: | |
| st.subheader("π Analysis Results") | |
| # Display sentiment analysis | |
| if data["final_sentiment_analysis"]: | |
| st.write("Sentiment Analysis:", data["final_sentiment_analysis"]) | |
| # Display articles | |
| st.subheader("π° Recent Articles") | |
| for article in data["articles"]: | |
| with st.expander(article["title"]): | |
| st.write(article["summary"]) | |
| st.write("Source:", article["source"]) | |
| st.write("Sentiment:", article["sentiment"]) | |
| # Display audio if available | |
| if data.get("audio_path"): | |
| st.audio(data["audio_path"]) | |
| # Display visualizations | |
| if data.get("comparative_sentiment_score"): | |
| st.subheader("π Sentiment Distribution") | |
| sentiment_df = pd.DataFrame(data["comparative_sentiment_score"]) | |
| fig = px.bar(sentiment_df, title="Sentiment Analysis by Source") | |
| st.plotly_chart(fig) | |
| else: | |
| st.warning("No articles found for this company.") | |
| if __name__ == "__main__": | |
| main() | |