Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| import networkx as nx | |
| import matplotlib.pyplot as plt | |
| import pandas as pd | |
| from sentence_transformers import SentenceTransformer | |
| from sklearn.metrics.pairwise import cosine_similarity | |
| from sklearn.cluster import KMeans | |
| def main(): | |
| st.title("Financial Graph App") | |
| st.write("Enter a financial sentence and see its similarity to predefined keywords.") | |
| # User input | |
| financial_sentence = st.text_area("Enter the financial sentence", value="") | |
| # Check if the user entered a sentence | |
| if financial_sentence.strip() != "": | |
| # Predefined keywords | |
| keywords = [ | |
| "Finance", | |
| "Fiscal", | |
| "Quarterly results", | |
| "Revenue", | |
| "Profit", | |
| "Loss", | |
| "Net income", | |
| "Gross margin", | |
| "Operating expenses", | |
| "Cash flow", | |
| "Shareholders", | |
| "Guidance", | |
| "Forecast", | |
| "Market performance", | |
| "Stock price", | |
| "Capital expenditures", | |
| "Acquisitions", | |
| "Mergers", | |
| "Debt", | |
| "Financial ratios", | |
| "Growth", | |
| "Outlook", | |
| "Visibility", | |
| "Revenue growth", | |
| "Market trends", | |
| "Profitability", | |
| "Efficiency", | |
| "Projections", | |
| "Performance" | |
| ] | |
| # Load the pre-trained Sentence-Transformers model | |
| model = SentenceTransformer("sentence-transformers/all-mpnet-base-v2") | |
| st.set_option('deprecation.showPyplotGlobalUse', False) | |
| # Generate word embeddings for the financial sentence and keywords | |
| sentence_embedding = model.encode([financial_sentence]) | |
| keyword_embeddings = model.encode(keywords) | |
| # Calculate cosine similarity between the sentence embedding and keyword embeddings | |
| similarity_scores = cosine_similarity(sentence_embedding, keyword_embeddings)[0] | |
| # Create a graph | |
| G = nx.Graph() | |
| # Add the sentence embedding as a node to the graph | |
| G.add_node(financial_sentence, embedding=sentence_embedding[0]) | |
| # Add the keyword embeddings as nodes to the graph | |
| for keyword, embedding, similarity in zip(keywords, keyword_embeddings, similarity_scores): | |
| G.add_node(keyword, embedding=embedding, similarity=similarity) | |
| # Add edges between the sentence and keywords with their similarity scores as weights | |
| for keyword, similarity in zip(keywords, similarity_scores): | |
| G.add_edge(financial_sentence, keyword, weight=similarity) | |
| # Perform KNN clustering on the keyword embeddings | |
| kmeans = KMeans(n_clusters=3) | |
| cluster_labels = kmeans.fit_predict(keyword_embeddings) | |
| # Add cluster labels as node attributes | |
| for node, cluster_label in zip(G.nodes, cluster_labels): | |
| G.nodes[node]["cluster"] = cluster_label | |
| # Set node positions using spring layout | |
| pos = nx.spring_layout(G) | |
| # Get unique cluster labels | |
| unique_clusters = set(cluster_labels) | |
| # Assign colors to clusters | |
| cluster_colors = ["lightblue", "lightgreen", "lightyellow"] | |
| # Draw nodes with cluster colors | |
| nx.draw_networkx_nodes( | |
| G, | |
| pos, | |
| node_color=[cluster_colors[G.nodes[node].get("cluster", 0)] for node in G.nodes], | |
| node_size=800, | |
| ) | |
| # Draw edges | |
| nx.draw_networkx_edges(G, pos, edge_color="gray", width=1, alpha=0.7) | |
| # Draw labels | |
| nx.draw_networkx_labels(G, pos, font_size=10, font_weight="bold") | |
| # Draw edge labels (cosine similarity scores) | |
| edge_labels = nx.get_edge_attributes(G, "weight") | |
| nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels, font_size=8) | |
| # Set plot attributes | |
| plt.title("Financial Context and Keywords") | |
| plt.axis("off") | |
| # Save the graph as an image | |
| plt.savefig("financial_graph.png") | |
| # Show the graph | |
| st.pyplot() | |
| # Save the similarity scores in a CSV file | |
| df = pd.DataFrame({"Keyword": keywords, "Cosine Similarity": similarity_scores}) | |
| st.write("Similarity Scores:") | |
| st.dataframe(df) | |
| if __name__ == "__main__": | |
| main() | |