import gradio as gr from wordcloud import WordCloud import pandas as pd import hopsworks import matplotlib.pyplot as plt # Assume you have a DataFrame with columns: Topic, Article, Keywords # You need to replace this with your actual data loading mechanism. # For example, you might fetch data from a database or a file. data = { 'Topic': ['Topic1', 'Topic2'], 'keywords': ['key1 key2 key3', ["cream","ice","vanilla","flavor","chocolate","kid","häagen","dazs","you","sprinting"]], 'scores' :[[], [0.16746170342156613,0.15000902432939608,0.0793086259849024,0.0642684614359449,0.05274725840837433,0.051507427048382876,0.047404471182744455,0.047404471182744455,0.03655408024186657,0.035427310538133555]] } data2 = { 'Topic' : ["Topic2", "Topic2"], 'Article' : ["1", "2"], 'Link' : ['https://www.google.fr', 'https://www.google.fr'] } df = pd.DataFrame(data) topics = df['Topic'].unique() df2 = pd.DataFrame(data2) project = hopsworks.login() fs = project.get_feature_store() dataset = fs.get_feature_group(name="daily_topic_info") print(dataset) def display_topics(topic): # Filter DataFrame based on the selected topic selected_data = df[df['Topic'] == topic] selected_data2 = df2[df2['Topic'] == topic] # Display relevant articles articles = selected_data2['Article'] links = selected_data2['Link'] nb_art = min(4, len(links)) articles_ret = """## Most relevant articles """ for i in range(nb_art): articles_ret += f""" * [{articles[i]}]({links[i]}) """ # Generate word cloud for keywords keywords = selected_data['keywords'][1] freq = selected_data["scores"][1] keywords_wordcloud = dict() for i, elem in enumerate(keywords): keywords_wordcloud[elem] = freq[i] wordcloud = WordCloud(width=800, height=400, background_color='white').generate_from_frequencies(keywords_wordcloud) fig, ax = plt.subplots() plt.axis("off") ax =plt.imshow(wordcloud, interpolation='bilinear') return articles_ret , fig # Define Gradio interface iface = gr.Interface( fn=display_topics, inputs=gr.Dropdown(["Topic1", "Topic2"], label="Topic"), outputs=[gr.Markdown(label="Most relevant articles"),gr.Plot(label="Main Keywords")], live=True, examples=[] ) # Launch the app iface.launch()