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

基于 Protege 与 Neo4j 的教育领域知识图谱构建及可视化

基于 Protege 构建本体、通过 Neo4j 导入 RDF 数据并导出 JSON,最后利用 Python 处理数据并使用 Echarts 进行前端可视化的完整流程。涵盖工具安装、OWL 转 Turtle、RDF 导入配置、数据清洗及 Python 脚本转换示例,适用于教育领域知识图谱项目的实现。

氛围发布于 2026/4/6更新于 2026/5/2436 浏览
基于 Protege 与 Neo4j 的教育领域知识图谱构建及可视化

Protege+Neo4j+前端可视化知识图谱项目(教育领域)

1、工具下载

1.1 Protege 的安装

版本说明:Protégé-5.5.0

了解其基本使用。

1.2 Neo4j 的安装

注意 JDK 版本的切换。

2、Neo4j 导入 Protege 文件

2.1 启动 Neo4j

版本:JDK11 win+R 输入 cmd

neo4j.bat console

2.2 Protege 导出 OWL 文件转 Turtle 文件

在 Protege 中导出 owl 文件后,需转换为 turtle 文件。若遇到生成失败或文件为 0KB 的情况,可尝试手动配置多 Java 版本并切换环境变量 JAVA_HOME。

在文件夹内打开 PowerShell,输入指令转换(源文件为 creature.owl,输出为 creature.turtle):

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

确认转化后的文件大小不为 0KB 即表示成功。

2.3 导入 Neo4j

1. 清除数据库中的所有数据
MATCH (n) DETACH DELETE n;
2. 初始化 RDF 导入配置
CALL n10s.graphconfig.init();
3. 导入 RDF 数据
CALL n10s.rdf.import.fetch("file:///E:/BaiduNetdiskDownload/owl 导入 neo4j/第一单元_test.turtle", "RDF/XML", {handleVocabUris: "IGNORE"})

注意修改你自己的文件地址

4. 查询所有(部分)数据
MATCH (n) WHERE n:`节点名称 1` OR n:`节点名称 2` OR n:`节点名称 3` RETURN n LIMIT 500;
5. 查询边关系
MATCH ()-[r]->() RETURN DISTINCT type(r) AS relationshipType
6. 一些细节

节点信息的 URI 有较长前缀,可使用以下指令清理:

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

注意更换你自己的 uri 前缀

3、Neo4j 导出 JSON 文件

导出 JSON 文件的目的是方便后续利用 Echarts 进行可视化。需要借助 APOC 库。

检验是否下载成功:

RETURN apoc.version()

导出文件:

CALL apoc.export.json.query(
  "MATCH (n) WHERE n:`节点名称 1` OR n:`节点名称 2` OR n:`节点名称 3` 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'}
)

代码主体包括:查询所有节点 + 匹配关系 + 返回所有信息;导出文件路径及文件名称;指定导出的格式为 PLAIN(简单 JSON 格式)

至此,原始数据已经获得。下面将进行数据的处理,然后利用 Echarts 和 Vue 实现前端可视化。

4、可视化前的操作

4.1 利用 Python 对数据进行处理

从 Neo4j 导出的 JSON 文件并不符合 Echarts 的数据格式,需要利用 Python 进行处理。

以下是原始的 JSON 数据示例(不符合 Echarts 格式):

{
  "n": {
    "type": "node",
    "id": "2",
    "labels": ["Resource", "课名称", "owl__NamedIndividual"],
    "properties": {
      "描述": "算法的多分支结构,判断闰年的规则",
      "编号": 3.3,
      "名称": "闰年平年我知道(1)"
    }
  },
  "r": {
    "id": "69",
    "type": "relationship",
    "label": "父子",
    "start": { "id": "2" },
    "end": { "id": "101" }
  }
}

Python 转换脚本如下(记得修改输入和输出文件的地址):

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"E:\neo4j\neo4j-community-4.4.41\import\output_4.0.json"
    output_file = "converted_data2.0.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}")

最后输出的 JSON 数据将包含 nodes 和 links 数组,符合 Echarts 格式。

4.2 学习 Vue & Echarts

完成数据处理后,结合 Vue 框架与 Echarts 库即可实现前端可视化展示。

目录

  1. Protege+Neo4j+前端可视化知识图谱项目(教育领域)
  2. 1、工具下载
  3. 1.1 Protege 的安装
  4. 1.2 Neo4j 的安装
  5. 2、Neo4j 导入 Protege 文件
  6. 2.1 启动 Neo4j
  7. 2.2 Protege 导出 OWL 文件转 Turtle 文件
  8. 2.3 导入 Neo4j
  9. 1. 清除数据库中的所有数据
  10. 2. 初始化 RDF 导入配置
  11. 3. 导入 RDF 数据
  12. 4. 查询所有(部分)数据
  13. 5. 查询边关系
  14. 6. 一些细节
  15. 3、Neo4j 导出 JSON 文件
  16. 4、可视化前的操作
  17. 4.1 利用 Python 对数据进行处理
  18. 4.2 学习 Vue & Echarts
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • 5 分钟快速上手 gif-h:轻量级 C++ GIF 动画生成指南
  • Lostlife2.0 角色对话系统升级:基于 LLama-Factory 微调剧情模型
  • 基于 Git 和 Termux 实现 Obsidian 平板多端同步方案
  • 开源 ASR 新选择:Fun-ASR 与 Whisper 对比评测
  • Arcade-plus 专业谱面制作入门与进阶指南
  • Python Msgpack:高效二进制序列化库
  • OpenClaw 16 款 AI Agent 选型指南
  • OpenClaw 龙虾图鉴:16 款 AI Agent 选型指南
  • 多模态 AI 技术解析:视觉与语言融合的新范式
  • Edge 边栏 Copilot 图标消失的修复方案
  • MCP 模型上下文协议详解及在 IDE 与 Spring AI 中的应用
  • C++ 模板与 string 类使用指南
  • JDK 1.8 (8u202) 下载与安装配置指南
  • CameraLink 图像输出与采集时序详解(FPGA 开发)
  • JavaScript window.location 对象详解
  • 微调模型成本太高,用 RAG 技术实现低成本 AI 升级
  • Cloudflare 配合 GitHub Pages 部署 MoonTV 静态站点指南
  • Llama-Recipes 增量备份与快照技术详解
  • 链表核心算法实战:从基础操作到复杂结构
  • GitHub Copilot 在 VS Code 中的使用指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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