Python+Neo4j构建知识图谱全攻略
好的!下面是从零开始使用 Python 和 Neo4j 构建知识图谱的保姆级教程,帮助你一步步完成第一个知识图谱项目。
1. 环境准备
1.1 安装 Neo4j
- 下载 Neo4j Desktop:访问 Neo4j 官网,下载适合你操作系统的版本(推荐使用 Desktop 版本,方便管理)。
- 创建数据库:打开 Neo4j Desktop,点击
New Project→Add Database→ 选择Local DBMS(设置数据库名称和密码,例如用户neo4j,密码test)。
1.2 安装 Python 驱动
在终端运行以下命令安装 Py2neo(Neo4j 的 Python 客户端):
pip install py2neo
2. 数据准备
假设我们要构建一个“电影-演员-导演”知识图谱,数据以 CSV 格式存储:
# movies.csv
id,title,genre
1,The Matrix,Sci-Fi
2,Inception,Thriller
# persons.csv
id,name,born
1,Keanu Reeves,1964
2,Tom Hanks,1956
# relations.csv
movie_id,person_id,relation
1,1,ACTED_IN
2,2,ACTED_IN
1,3,DIRECTED # 假设导演是 Lana Wachowski(需补充到 persons.csv)
3. 知识图谱建模
在 Neo4j 中,数据以 节点(Node) 和 关系(Relationship) 存储:
- 节点:表示实体(如
Movie、Person)。 - 关系:表示实体间的连接(如
ACTED_IN、DIRECTED)。
4. 使用 Python 导入数据
4.1 连接 Neo4j
from py2neo import Graph, Node, Relationship
# 替换你的 Neo4j 连接信息
graph = Graph("bolt://localhost:7687", auth=("neo4j", "test"))
graph.run("MATCH (n) DETACH DELETE n") # 清空数据库(谨慎使用!)
4.2 创建节点
# 读取 movies.csv 并创建 Movie 节点
movies = [
{"id": 1, "title": "The Matrix", "genre": "Sci-Fi"},
{"id": 2, "title": "Inception", "genre": "Thriller"}
]
for m in movies:
node = Node("Movie", id=m["id"], title=m["title"], genre=m["genre"])
graph.create(node)
4.3 创建关系和 Person 节点
# 创建 Person 节点和关系
relations = [
{"movie_id": 1, "person_id": 1, "relation": "ACTED_IN"},
{"movie_id": 2, "person_id": 2, "relation": "ACTED_IN"}
]
for rel in relations:
# 查找电影节点
movie = graph.nodes.match("Movie", id=rel["movie_id"]).first()
# 创建或查找演员节点
actor = Node("Person", id=rel["person_id"], name="Keanu Reeves", born=1964)
# 创建关系
graph.create(Relationship(actor, rel["relation"], movie))
5. 查询知识图谱
5.1 使用 Cypher 查询
在 Neo4j 浏览器中访问 http://localhost:7474,输入以下查询:
// 查询所有电影
MATCH (m:Movie) RETURN m.title, m.genre
// 查询参演《The Matrix》的演员
MATCH (p:Person)-[:ACTED_IN]->(m:Movie {title: 'The Matrix'}) RETURN p.name
5.2 通过 Python 查询
result = graph.run("MATCH (p:Person)-[:ACTED_IN]->(m:Movie) RETURN p.name, m.title")
for record in result:
print(f"{record['p.name']} 参演了 {record['m.title']}")
6. 可视化结果
在 Neo4j 浏览器中,输入查询后点击 Graph 视图,即可看到类似下图的结构:
7. 扩展建议
- 数据源:从 API(如 Wikidata)、网页爬虫或结构化数据库补充数据。
- 数据清洗:使用 Pandas 或 OpenRefine 处理缺失值和格式。
- NLP 整合:用 spaCy 或 NLTK 从文本中提取实体和关系。
通过以上步骤,你已经成功构建了一个简单的知识图谱!接下来可以尝试更复杂的数据模型(如添加“导演”、“编剧”角色)或探索 Neo4j 的高级功能(如路径查询、图算法)。





