跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI大前端java算法

Protege 构建知识图谱并接入 Neo4j 与前端可视化实战

Protege 构建本体模型,经 Turtle 格式转换后导入 Neo4j 图数据库。通过 Cypher 语句及 APOC 库导出 JSON 数据,利用 Python 脚本清洗适配 ECharts 格式,最终结合 Vue 实现教育领域知识图谱的前端可视化展示。过程中需注意 JDK 版本兼容性与 URI 前缀清理。

1739658202发布于 2026/4/8更新于 2026/5/2321 浏览
Protege 构建知识图谱并接入 Neo4j 与前端可视化实战

Protege 构建知识图谱并接入 Neo4j 与前端可视化实战

本文记录了一个完整的教育领域知识图谱项目流程,从本体建模到图数据库存储,再到前端的可视化展示。主要涉及 Protégé、Neo4j、Python 数据处理以及 Vue+ECharts 技术栈。

工具准备

1. Protégé 安装

推荐使用版本:Protégé-5.5.0。安装后需熟悉基本操作,如创建本体、定义类与属性等。

2. Neo4j 安装

Neo4j 对 JDK 版本有一定要求,建议配置 JDK 11。若本地存在多个 Java 版本,需确保环境变量 JAVA_HOME 指向正确的版本,避免启动报错。

数据导入流程

1. 启动 Neo4j

在命令行输入以下命令启动控制台模式:

neo4j.bat console

启动成功后,访问浏览器中的 Neo4j Browser。

2. 格式转换(OWL 转 Turtle)

Protégé 导出的 .owl 文件通常需转换为 .turtle 格式才能被 Neo4j 高效读取。如果直接生成失败或文件大小为 0KB,可尝试使用命令行工具手动转换。

在项目目录下打开 PowerShell,执行以下指令(注意替换文件名):

java -jar rdf2rdf-1.0.1-2.3.1.jar creature.owl creature.turtle

转换完成后检查文件大小,非空即表示成功。

3. 导入 Neo4j

进入 Neo4j Browser,依次执行以下 Cypher 语句。

清除旧数据

MATCH (n) DETACH DELETE n;

初始化 RDF 插件配置

CALL n10s.graphconfig.init();

导入 RDF 数据 请根据实际路径修改文件地址:

CALL n10s.rdf.import.fetch("file:///E:/BaiduNetdiskDownload/owl 导入 neo4j/第一单元_test.turtle", "RDF/XML", {handleVocabUris: "IGNORE"})

验证数据 查询部分节点信息:

MATCH (n) WHERE n:`课名称` OR n:`知识元` RETURN n LIMIT 500;

查询关系类型:

MATCH ()-[r]->() RETURN DISTINCT type(r) AS relationshipType

清理 URI 前缀 导入后的节点 URI 可能包含冗长的命名空间前缀,可使用以下语句简化:

MATCH (n) SET n.uri = REPLACE(n.uri, 'http://www.semanticweb.org/florence/ontologies/2025/1/untitled-ontology-9#', '') RETURN n

导出 JSON 数据

为了在前端进行可视化,需要将图数据导出为 JSON 格式。这需要借助 APOC 库。

首先确认 APOC 是否安装成功:

RETURN apoc.version()

使用 apoc.export.json.query 导出指定范围的数据:

CALL apoc.export.json.query(
  "MATCH (n) WHERE n:`课名称` OR n:`知识元` OPTIONAL MATCH (n)-[r]->(m) RETURN n, r, m LIMIT 500",
  "file:///E:/neo4j/neo4j-community-4.4.41/import/output_3.0.json",
  {format: 'PLAIN'}
)

此步骤生成的原始 JSON 结构并不直接符合 ECharts 的 nodes 和 links 格式,需要进行清洗。

前端可视化处理

1. Python 数据清洗

Neo4j 导出的 JSON 包含大量嵌套信息,我们需要编写 Python 脚本将其转换为 ECharts 所需的扁平化结构。

以下是处理脚本示例,请注意修改输入输出路径:

import json

def convert_to_echarts_data(file_path):
    # 加载 Neo4j 导出的 JSON 数据
    with open(file_path, 'r', encoding='utf-8') as f:
        neo4j_data = json.load(f)

    # 初始化 ECharts 数据结构
    echarts_data = {
        "nodes": [],
        "links": []
    }

    # 节点处理:用于去重和避免重复添加
    node_map = {}

    for item in neo4j_data:
        # 处理主节点
        node = item.get("n", None)
        if node:
            node_id = node.get("id")
            node_labels = node.get("labels", [])
            node_properties = node.get("properties", {})
            node_name = node_properties.get("名称", node_properties.get("name", node_id))
            node_uri = node_properties.get("uri", node_id)

            if node_id not in node_map:
                echarts_node = {
                    "id": node_id,
                    "name": node_name,
                    "category": node_labels[1] if len(node_labels) > 1 else "其他",
                    "value": node_uri,
                    "properties": node_properties
                }
                echarts_data["nodes"].append(echarts_node)
                node_map[node_id] = echarts_node

        # 处理关联节点
        m_node = item.get("m", None)
        if m_node:
            node_id = m_node.get("id")
            node_labels = m_node.get("labels", [])
            node_properties = m_node.get("properties", {})
            node_name = node_properties.get("名称", node_properties.get("name", node_id))
            node_uri = node_properties.get("uri", node_id)

            if node_id not in node_map:
                echarts_node = {
                    "id": node_id,
                    "name": node_name,
                    "category": node_labels[1] if len(node_labels) > 1 else "其他",
                    "value": node_uri,
                    "properties": node_properties
                }
                echarts_data["nodes"].append(echarts_node)
                node_map[node_id] = echarts_node

    # 边处理
    for item in neo4j_data:
        relationship = item.get("r", None)
        if relationship:
            start_node = relationship.get("start")
            end_node = relationship.get("end")
            start_id = start_node.get("id")
            end_id = end_node.get("id")
            relationship_label = relationship.get("label")

            echarts_link = {
                "source": start_id,
                "target": end_id,
                "value": relationship_label
            }
            echarts_data["links"].append(echarts_link)

    return echarts_data

if __name__ == "__main__":
    input_file = r"<你的输入文件路径>"
    output_file = "converted_data.json"
    
    echarts_data = convert_to_echarts_data(input_file)
    
    with open(output_file, 'w', encoding='utf-8') as f:
        json.dump(echarts_data, f, ensure_ascii=False, indent=4)
    
    print(f"数据已成功转换并保存到 {output_file}")

转换后的数据将包含标准的 nodes 和 links 数组,可直接用于 ECharts 渲染。

2. 前端集成

最后一步是学习 Vue 框架结合 ECharts 实现交互。由于本项目聚焦于教育领域的知识图谱,可根据具体业务需求调整节点样式与交互逻辑。完成上述所有步骤后,即可形成自己的可视化知识图谱应用。

目录

  1. Protege 构建知识图谱并接入 Neo4j 与前端可视化实战
  2. 工具准备
  3. 1. Protégé 安装
  4. 2. Neo4j 安装
  5. 数据导入流程
  6. 1. 启动 Neo4j
  7. 2. 格式转换(OWL 转 Turtle)
  8. 3. 导入 Neo4j
  9. 导出 JSON 数据
  10. 前端可视化处理
  11. 1. Python 数据清洗
  12. 2. 前端集成
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • FastAPI:Python 高性能 Web 框架深度解析
  • 极客大挑战 2025 Web 题目复现
  • GitHub Copilot 配置指南与实战技巧
  • New API 详解:开源大模型统一网关与 AI 资产管理系统
  • OverLoCK: 先概览后细看的卷积神经网络与上下文混合动态核
  • Cursor 配置网络代理的方法与验证
  • 利用 NotebookLM 快速生成 PPT 与动漫风格漫画
  • 库卡机器人编程工具 OrangeEdit 2.0.14.95 安装与应用指南
  • PX4 与 ROS 无人机 Offboard 控制模式解析及实战实现
  • AstrBot 开源 AI 聊天机器人部署与配置指南
  • RTX 4090 本地部署腾讯混元与阿里通义万相视频生成模型
  • 数据结构:栈与队列定义及 C 语言实现
  • Spring MVC 快速入门:响应内容与状态码设置
  • CANN 生态 cann-dataset:AIGC 大模型全链路数据管理方案
  • AI 视频生成模型构建、实现与调试指南
  • 基于 Multi-Agent、Skills 与 Spring AI 构建自主决策智能体
  • Python 版本选择指南:3.10 至 3.13 特性对比与推荐
  • Java 面试题及答案汇总
  • 基于 Docker 部署开源人机协作平台 DeskClaw
  • AI 视频生成技术迈入实用阶段:解析央视短片背后的技术路径

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online