|
|
|
@ -8,9 +8,19 @@ from Config import Config
|
|
|
|
|
graph = Graph(Config.NEO4J_URI, auth=Config.NEO4J_AUTH)
|
|
|
|
|
|
|
|
|
|
# 查询所有知识点节点和关系
|
|
|
|
|
# query = """
|
|
|
|
|
# MATCH (n:KnowledgePoint)-[r]->(m)
|
|
|
|
|
# RETURN n, r, m
|
|
|
|
|
# """
|
|
|
|
|
query = """
|
|
|
|
|
MATCH (n:KnowledgePoint)-[r]->(m)
|
|
|
|
|
RETURN n, r, m
|
|
|
|
|
MATCH (n:KnowledgePoint)
|
|
|
|
|
OPTIONAL MATCH (n)-[r1:PREREQUISITE]->(p)
|
|
|
|
|
OPTIONAL MATCH (n)-[r2:RELATED]->(r)
|
|
|
|
|
OPTIONAL MATCH (n)-[r3:HAS_SUB_POINT]->(s)
|
|
|
|
|
RETURN n,
|
|
|
|
|
COLLECT(DISTINCT {type: 'PREREQUISITE', node: p, rel: r1}) AS prerequisites,
|
|
|
|
|
COLLECT(DISTINCT {type: 'RELATED', node: r, rel: r2}) AS relateds,
|
|
|
|
|
COLLECT(DISTINCT {type: 'HAS_SUB_POINT', node: s, rel: r3}) AS sub_points
|
|
|
|
|
"""
|
|
|
|
|
data = graph.run(query).data()
|
|
|
|
|
|
|
|
|
@ -18,6 +28,7 @@ data = graph.run(query).data()
|
|
|
|
|
net = Network(height="750px", width="100%", notebook=True, cdn_resources='in_line')
|
|
|
|
|
|
|
|
|
|
# 添加节点和边
|
|
|
|
|
# 修改后的添加节点和边逻辑
|
|
|
|
|
for item in data:
|
|
|
|
|
node_label = item['n'].get('name', '未命名')
|
|
|
|
|
net.add_node(item['n'].identity,
|
|
|
|
@ -25,15 +36,32 @@ for item in data:
|
|
|
|
|
name=node_label,
|
|
|
|
|
font={'size': 14, 'face': 'SimHei'})
|
|
|
|
|
|
|
|
|
|
node_label = item['m'].get('name', '未命名')
|
|
|
|
|
net.add_node(item['m'].identity,
|
|
|
|
|
label=node_label,
|
|
|
|
|
name=node_label,
|
|
|
|
|
font={'size': 14, 'face': 'SimHei'})
|
|
|
|
|
# 处理先修知识关系
|
|
|
|
|
for pre in item['prerequisites']:
|
|
|
|
|
if pre['node']:
|
|
|
|
|
net.add_node(pre['node'].identity,
|
|
|
|
|
label=pre['node'].get('name', '未命名'),
|
|
|
|
|
name=pre['node'].get('name', '未命名'),
|
|
|
|
|
font={'size': 14, 'face': 'SimHei'})
|
|
|
|
|
net.add_edge(item['n'].identity, pre['node'].identity, title='PREREQUISITE')
|
|
|
|
|
|
|
|
|
|
# 处理相关知识关系
|
|
|
|
|
for rel in item['relateds']:
|
|
|
|
|
if rel['node']:
|
|
|
|
|
net.add_node(rel['node'].identity,
|
|
|
|
|
label=rel['node'].get('name', '未命名'),
|
|
|
|
|
name=rel['node'].get('name', '未命名'),
|
|
|
|
|
font={'size': 14, 'face': 'SimHei'})
|
|
|
|
|
net.add_edge(item['n'].identity, rel['node'].identity, title='RELATED')
|
|
|
|
|
|
|
|
|
|
net.add_edge(item['n'].identity,
|
|
|
|
|
item['m'].identity,
|
|
|
|
|
title=type(item['r']).__name__)
|
|
|
|
|
# 处理子知识点关系
|
|
|
|
|
for sub in item['sub_points']:
|
|
|
|
|
if sub['node']:
|
|
|
|
|
net.add_node(sub['node'].identity,
|
|
|
|
|
label=sub['node'].get('name', '未命名'),
|
|
|
|
|
name=sub['node'].get('name', '未命名'),
|
|
|
|
|
font={'size': 14, 'face': 'SimHei'})
|
|
|
|
|
net.add_edge(item['n'].identity, sub['node'].identity, title='HAS_SUB_POINT')
|
|
|
|
|
|
|
|
|
|
# 生成HTML文件
|
|
|
|
|
with open("knowledge_graph.html", "w", encoding='utf-8') as f:
|
|
|
|
|