phi-knowledge-graph / visualize.py
vietexob's picture
Added LightRAG KG
110ce02
raw
history blame
3.37 kB
import networkx as nx
import rapidjson
import warnings
import os
from pyvis.network import Network
warnings.filterwarnings("ignore")
# Load the GraphML file
file_path = "./cache/graph_chunk_entity_relation.graphml"
assert os.path.exists(file_path), f"File {file_path} does not exist."
G = nx.read_graphml(file_path)
def create_graph(json_data):
"""
Create interactive knowledge graph using pyvis
"""
G = nx.Graph()
# Add nodes with tooltips and error handling for missing keys
for node in json_data['nodes']:
# Get node type with fallback
type = node.get("type", "Entity")
# Get detailed type with fallback
detailed_type = node.get("detailed_type", type)
# Use node ID and type info for the tooltip
G.add_node(node['id'], title=f"{type}: {detailed_type}")
# Add edges with labels
for edge in json_data['edges']:
# Check if the required keys exist
if 'from' in edge and 'to' in edge:
label = edge.get('label', 'related')
G.add_edge(edge['from'], edge['to'], title=label, label=label)
# Create network visualization
network = Network(
width="100%",
height="100vh",
notebook=False,
bgcolor="#f8fafc",
font_color="#1e293b"
)
# Configure network display
network.from_nx(G)
# Customize node appearance
for node in network.nodes:
node['color'] = {'background': '#e0e7ff', 'border': '#6366f1', 'highlight': {'background': '#c7d2fe', 'border': '#4f46e5'}}
node['font'] = {'size': 14, 'color': '#1e293b'}
node['shape'] = 'dot'
node['size'] = 20
# Customize edge appearance
for edge in network.edges:
edge['width'] = 4
edge['color'] = {'color': '#6366f1', 'highlight': '#4f46e5'}
edge['font'] = {'size': 12, 'color': '#4b5563', 'face': 'Arial'}
# Save and display the network
filename_out = "knowledge_graph.html"
network.show(filename_out)
print(f"Knowledge graph saved to {filename_out}")
# Convert the graph to node-link data format
js_graph = nx.node_link_data(G)
js_data = rapidjson.loads(rapidjson.dumps(js_graph))
# print(js_data)
create_graph(js_data)
# # Create a Pyvis network
# network = Network(width="100%",
# height="100vh",
# notebook=True,
# bgcolor="#f8fafc",
# font_color="#1e293b")
# # Convert NetworkX graph to Pyvis network
# network.from_nx(G)
# # Add colors and title to nodes
# for node in network.nodes:
# if "description" in node:
# node["title"] = node["description"]
# node['color'] = {'background': '#e0e7ff', 'border': '#6366f1', 'highlight': {'background': '#c7d2fe', 'border': '#4f46e5'}}
# node['font'] = {'size': 14, 'color': '#1e293b'}
# node['shape'] = 'dot'
# node['size'] = 20
# # Add title to edges
# for edge in network.edges:
# if "description" in edge:
# edge["title"] = edge["description"]
# edge['width'] = 4
# edge['color'] = {'color': '#6366f1', 'highlight': '#4f46e5'}
# edge['font'] = {'size': 12, 'color': '#4b5563', 'face': 'Arial'}
# # Save and display the network
# filename_out = "knowledge_graph.html"
# network.show(filename_out)
# print(f"Knowledge graph saved to {filename_out}")