摘要 : 大数据时代,数据之间的关系 往往比数据本身更有价值。传统的 SQL 数据库在处理复杂关系(如社交网络、推荐系统、风控分析)时显得力不从心,而 知识图谱 和 图数据库 Neo4j 正是为此而生。本文将带你从 0 基础出发,理解知识图谱核心概念,安装 Neo4j 环境,并手把手教你用 Python 代码构建一个生动的人物关系图谱。拒绝枯燥理论,全是实战干货!
一、 什么是知识图谱与 Neo4j?
在动手写代码之前,我们先用大白话把两个核心概念捋清楚。
1. 什么是知识图谱 (Knowledge Graph)?
不要被高大上的名字吓到。知识图谱本质上就是把世界上的事物(节点)和它们之间的联系(关系)画成一张巨大的网。
-
Excel 思维: 罗列数据。例如:张三,25岁;李四,30岁。
-
图谱思维: 链接数据。例如:
(张三)--[朋友]-->(李四)。
它由三要素组成:
-
实体 (Entity/Node): 比如"周杰伦"、"昆凌"。
-
关系 (Relationship): 比如"夫妻"、"代言"。
-
属性 (Property): 比如周杰伦的"年龄:40+"。
2. 什么是 Neo4j?
如果说 SQL 是关系型数据库的霸主,那么 Neo4j 就是图数据库(Graph Database)的王者。
-
特点: 原生支持图存储,查询关联数据速度极快(秒杀 MySQL)。
-
查询语言: 使用 Cypher 语言(类似 SQL,但更直观)。
一句话总结: 我们用 Python 处理数据,把数据喂给 Neo4j,最终形成可视化的知识图谱。
二、 环境搭建:Neo4j Desktop 安装
对于初学者,我强烈推荐使用 Neo4j Desktop(桌面版),不仅免费,而且图形化界面非常友好,免去了复杂的命令行配置。
步骤 1:下载与安装
-
进入 Neo4j 官网下载中心。
-
填写基本信息后下载 Neo4j Desktop。
-
像安装普通软件一样安装并运行。
步骤 2:创建项目与数据库
-
打开 Neo4j Desktop,点击 "New Project"。
-
在右侧点击 "Add" -> "Local DBMS"。
-
关键设置: 设置一个密码(比如
123456),一定要记住! -
点击 Create ,然后点击 Start 启动数据库。
步骤 3:进入浏览器控制台
当状态灯变绿后,点击 Open 或者在浏览器输入 http://localhost:7474。
-
用户名:
neo4j -
密码:你刚才设置的(如
123456) -

三、 快速上手:Cypher 语言初体验
在用 Python 之前,我们先在 Neo4j 浏览器的输入框里敲一行代码,感受一下图的魅力。
输入以下命令并按回车(或点击播放按钮):
Cypher
CREATE (p1:Person {name: '孙悟空', title: '齐天大圣'})
CREATE (p2:Person {name: '唐僧', title: '师傅'})
CREATE (p1)-[:PROTECT {role: '保镖'}]->(p2)
RETURN p1, p2
你会看到屏幕上出现了两个圆圈(节点)和一条连线。这就是最简单的图谱!
四、 实战:使用 Python 构建知识图谱
在实际工作中,我们不可能手动一条条敲 Cypher 命令,而是通过 Python 读取文件(CSV/Excel)并批量写入。
1. 安装 Python 驱动
打开终端或 CMD,运行:
Bash
pip install neo4j
2. 编写核心代码
下面我编写了一个通用的连接类,你可以直接复制使用。我们将构建一个简单的 "西游记人物关系图谱"。
新建一个 build_graph.py 文件:
Python
from neo4j import GraphDatabase
class KnowledgeGraph:
def __init__(self, uri, user, password):
"""
连接 Neo4j 数据库
"""
self.driver = GraphDatabase.driver(uri, auth=(user, password))
def close(self):
"""
关闭连接
"""
self.driver.close()
def create_node_and_relationship(self, person1, relation, person2):
"""
创建节点和关系
使用 MERGE 关键字,保证节点不被重复创建
"""
with self.driver.session() as session:
# Cypher 语句说明:
# 1. 查找或创建名为 person1 的节点
# 2. 查找或创建名为 person2 的节点
# 3. 建立两者之间的关系
query = """
MERGE (p1:Character {name: $name1})
MERGE (p2:Character {name: $name2})
MERGE (p1)-[r:RELATION {type: $rel}]->(p2)
RETURN p1, p2, r
"""
session.run(query, name1=person1, name2=person2, rel=relation)
print(f"成功构建:{person1} --[{relation}]--> {person2}")
def clear_data(self):
"""
(可选) 清空数据库,方便测试
"""
with self.driver.session() as session:
session.run("MATCH (n) DETACH DELETE n")
print("数据库已清空!")
# --- 主程序执行 ---
if __name__ == "__main__":
# 1. 配置数据库连接 (请修改你的密码)
URI = "bolt://localhost:7687"
USER = "neo4j"
PASSWORD = "123456" # 替换为你自己的密码
# 2. 准备数据 (模拟从 Excel 读取的数据)
data = [
("唐僧", "师徒", "孙悟空"),
("唐僧", "师徒", "猪八戒"),
("唐僧", "师徒", "沙僧"),
("孙悟空", "师兄弟", "猪八戒"),
("孙悟空", "师兄弟", "沙僧"),
("孙悟空", "结拜兄弟", "牛魔王"),
("牛魔王", "夫妻", "铁扇公主"),
("铁扇公主", "母子", "红孩儿")
]
# 3. 开始构建
kg = KnowledgeGraph(URI, USER, PASSWORD)
try:
# 先清空旧数据,防止重复
kg.clear_data()
print("开始构建知识图谱...")
for p1, rel, p2 in data:
kg.create_node_and_relationship(p1, rel, p2)
print("\n图谱构建完成!请去 Neo4j Browser 查看效果。")
except Exception as e:
print(f"发生错误: {e}")
finally:
kg.close()
3. 运行效果
运行上述脚本,控制台会输出:
Plaintext
数据库已清空!
开始构建知识图谱...
成功构建:唐僧 --[师徒]--> 孙悟空
成功构建:唐僧 --[师徒]--> 猪八戒
...
图谱构建完成!
五、 见证奇迹的时刻:可视化展示
现在回到你的 Neo4j Browser (http://localhost:7474)。
在顶部输入框输入以下命令查询所有数据:
Cypher
MATCH (n) RETURN n
点击播放按钮。 你将看到一张错综复杂、可以拖拽的人物关系网!

你可以尝试:
-
点击"孙悟空"节点,改变它的颜色。
-
拖动节点,感受力导向图的物理效果。
-
鼠标悬停在连线上,查看关系类型。
六、 总结与展望
恭喜你!你已经完成了从 0 到 1 的知识图谱构建。 我们通过 Python 的 neo4j 库,成功将结构化的数据转化为了图谱。
本文学到了什么?
-
理解了图数据库与传统数据库的区别。
-
学会了安装 Neo4j Desktop。
-
掌握了 Python 连接 Neo4j 并批量写入数据的核心代码。
下一步可以做什么? 构建图谱只是第一步。有了这个图谱,我们不仅可以"看",还可以让 AI 去"理解"。 在下一篇文章中,我将分享 《进阶篇:如何结合 BERT 模型与 Neo4j 实现智能问答系统 (KBQA)》,让 AI 能回答"孙悟空的结拜兄弟的老婆是谁?"这种复杂问题。
如果你觉得这篇文章对你有帮助,欢迎点赞、收藏、关注三连!有任何报错问题,请在评论区留言,我会第一时间解答!