KnowledgeGraph / app.py
imranjamal's picture
Update app.py
0232855 verified
import gradio as gr
import networkx as nx
import matplotlib.pyplot as plt
from io import BytesIO
# Function to build and visualize a knowledge graph
def visualize_knowledge_graph(entities, relationships):
G = nx.DiGraph()
# Add entities as nodes
for entity in entities.split(","):
G.add_node(entity.strip())
# Add relationships as edges
for relationship in relationships.split(";"):
try:
source, target, label = map(str.strip, relationship.split(","))
G.add_edge(source, target, label=label)
except ValueError:
return "Invalid relationship format. Use 'entity1,entity2,label' format for each relationship."
# Plot the graph
plt.figure(figsize=(10, 6))
pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True, node_size=3000, node_color="lightblue", font_size=10, font_weight="bold")
edge_labels = nx.get_edge_attributes(G, 'label')
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels, font_color="red")
buf = BytesIO()
plt.savefig(buf, format="png")
plt.close()
buf.seek(0)
return buf
# Define the Gradio interface
with gr.Blocks() as demo:
gr.Markdown("## Knowledge Graph Builder")
gr.Markdown("Enter entities (comma-separated) and relationships (in the format `entity1,entity2,label` separated by semicolons).")
entities_input = gr.Textbox(label="Entities (Comma-separated)", placeholder="e.g., SCIEKore, AI, Education")
relationships_input = gr.Textbox(label="Relationships (Semicolon-separated)", placeholder="e.g., SCIEKore,AI,uses; SCIEKore,Education,offers")
output_image = gr.Image(label="Knowledge Graph")
submit_button = gr.Button("Build Graph")
submit_button.click(
visualize_knowledge_graph,
inputs=[entities_input, relationships_input],
outputs=output_image
)
# Launch the Gradio app
if __name__ == "__main__":
demo.launch(debug=True)