FAIE / data /load_full_graph.py
abuz8studios's picture
FAIE engine code + docs (no weights)
421f9b7 verified
Raw History Blame Contribute Delete
1.49 kB
"""Load the complete Quranic root graph from the pre-built JSON."""
import json
from pathlib import Path
import networkx as nx
GRAPH_PATH = Path(__file__).parent / "full_graph.json"
def load_graph(path=None):
path = path or GRAPH_PATH
with open(path, "r", encoding="utf-8") as f:
data = json.load(f)
G = nx.DiGraph()
for node_id, attrs in data["nodes"].items():
G.add_node(node_id, **attrs)
for edge in data["edges"]:
src = edge.pop("source")
tgt = edge.pop("target")
G.add_edge(src, tgt, **edge)
return G
def graph_stats(G):
roots = [n for n, d in G.nodes(data=True) if d.get("type") == "root"]
derived = [n for n, d in G.nodes(data=True) if d.get("type") == "derived"]
deriv_edges = sum(1 for _, _, d in G.edges(data=True) if d.get("relation") == "derivation")
sem_edges = sum(1 for _, _, d in G.edges(data=True) if d.get("relation") == "semantic")
top_roots = sorted(roots, key=lambda n: G.nodes[n].get("frequency", 0), reverse=True)[:20]
return {
"total_nodes": G.number_of_nodes(),
"root_nodes": len(roots),
"derived_nodes": len(derived),
"total_edges": G.number_of_edges(),
"derivation_edges": deriv_edges,
"semantic_edges": sem_edges,
"top_roots": [
{"root": r, "frequency": G.nodes[r].get("frequency", 0),
"summary": G.nodes[r].get("summary", "")[:80]}
for r in top_roots
],
}