# import streamlit as st # import pandas as pd # import numpy as np # from sklearn.feature_extraction.text import TfidfVectorizer # from sklearn.metrics.pairwise import cosine_similarity # import textwrap # # Page configuration # st.set_page_config( # page_title="Article Recommender", # layout="wide" # ) # # Custom CSS with improved visibility # st.markdown(""" # # """, unsafe_allow_html=True) # # Load and prepare data functions (unchanged) # @st.cache_data # def load_data(): # df = pd.read_csv("cleaned.csv") # train_df = pd.read_csv("training.csv") # return (df,train_df) # @st.cache_resource # def prepare_similarity_matrix(df): # tfidf = TfidfVectorizer(max_features=5000) # tf_vectors = tfidf.fit_transform(df["data"]).toarray() # tf_similarity = cosine_similarity(tf_vectors) # return tf_similarity # def get_recommended_articles(title, df, tf_similarity): # title_idx = df[df["title"] == title].index[0] # similar_idx_scores = list(enumerate(tf_similarity[title_idx])) # sorted_similar_idx = sorted(similar_idx_scores, key=lambda x: x[1], reverse=True) # recommended_idx = sorted_similar_idx[1:4] # return recommended_idx # def truncate_text(text, max_words=50): # return " ".join(text.split()[:max_words]) + "..." # # Load data # df,train_df = load_data() # tf_similarity = prepare_similarity_matrix(train_df) # # Initialize session state # if 'page' not in st.session_state: # st.session_state.page = 'home' # # Sidebar with improved visibility # with st.sidebar: # st.title("Navigation") # if st.button("🏠 Home", use_container_width=True): # st.session_state.page = 'home' # st.rerun() # st.markdown("---") # search_query = st.text_input("🔍 Search Articles:") # # Main content # if st.session_state.page == 'home': # st.title("📚 Article Collection") # # Search functionality # if search_query: # mask = (df["title"].str.contains(search_query, case=False)) | \ # (df["text"].str.contains(search_query, case=False)) # filtered_df = df[mask] # st.markdown(f""" #