当前位置: 首页 > news >正文

图数据库:基于历史学科的全球历史知识图谱构建,使用Neo4j图数据库实现中国历史与全球历史的关联查询。

目录

  • 一、图数据库建模设计(Cypher)
  • 二、时间轴查询示例(Cypher)
    • 1. 查询中国某朝代时期的全球事件
    • 2. 查询特定中国事件时的全球背景
    • 3. 跨文明关联分析
  • 三、Python可视化分析
  • 四、典型应用场景
    • 1. 比较文明发展(Python实现)
    • 2. 历史影响路径分析
    • 3. 时间轴重叠可视化(Python)
  • 五、知识图谱扩展建议
    • 1.添加更多维度数据​​
    • 2.​​实现时空查询函数​​
    • 3.构建GDS图算法分析​​
  • 六、小结
  • 七、欢迎纠错
  • 八、免费爬虫
  • 九、论文写作/Python 学习智能体

一、图数据库建模设计(Cypher)

// 1. 创建中国历史节点(朝代->时期->事件)
CREATE (china:Country {name:"中国"})// 1.1 创建中国朝代节点
CREATE (xia:Dynasty {name:"夏朝", start:-2070, end:-1600, capital:"阳城"}),(shang:Dynasty {name:"商朝", start:-1600, end:-1046, capital:"殷"}),(zhou:Dynasty {name:"周朝", start:-1046, end:-256, capital:"镐京/洛邑"}),(han:Dynasty {name:"汉朝", start:-202, end:220, capital:"长安/洛阳"}),(tang:Dynasty {name:"唐朝", start:618, end:907, capital:"长安"}),(song:Dynasty {name:"宋朝", start:960, end:1279, capital:"开封/临安"}),(ming:Dynasty {name:"明朝", start:1368, end:1644, capital:"南京/北京"})// 1.2 创建中国历史事件
CREATE (battle_of_red_cliffs:Event {name:"赤壁之战", year:208, description:"三国时期著名战役"}),(an_shi_rebellion:Event {name:"安史之乱", year:755, description:"唐朝由盛转衰的转折点"}),(zheng_he_voyages:Event {name:"郑和下西洋", start_year:1405, end_year:1433, description:"明朝航海壮举"})// 1.3 创建中国历史人物
CREATE (cao_cao:Person {name:"曹操", lifespan:"155-220", title:"三国时期政治家"}),(li_bai:Person {name:"李白", lifespan:"701-762", title:"唐代诗人"}),(zheng_he:Person {name:"郑和", lifespan:"1371-1433", title:"明朝航海家"})// 2. 创建全球历史节点
CREATE (rome:Country {name:"罗马帝国"}),(england:Country {name:"英格兰"}),(arab:Country {name:"阿拉伯帝国"})// 2.1 创建全球历史事件
CREATE (punic_wars:Event {name:"布匿战争", start_year:-264, end_year:-146, description:"罗马与迦太基的战争"}),(magna_carta:Event {name:"大宪章签署", year:1215, description:"英国限制王权的法律文件"}),(crusades:Event {name:"十字军东征", start_year:1096, end_year:1291, description:"基督教东征运动"})// 3. 建立中国历史关系
// 3.1 朝代更替关系
CREATE (xia)-[:NEXT]->(shang),(shang)-[:NEXT]->(zhou),(zhou)-[:NEXT]->(han),(han)-[:NEXT]->(tang),(tang)-[:NEXT]->(song),(song)-[:NEXT]->(ming)// 3.2 事件与朝代关系
CREATE (battle_of_red_cliffs)-[:OCCURRED_IN]->(han),(an_shi_rebellion)-[:OCCURRED_IN]->(tang),(zheng_he_voyages)-[:OCCURRED_IN]->(ming)// 3.3 人物关系
CREATE (cao_cao)-[:LIVED_IN]->(han),(li_bai)-[:LIVED_IN]->(tang),(zheng_he)-[:LIVED_IN]->(ming),(zheng_he)-[:RELATED_TO]->(zheng_he_voyages)// 4. 建立全球关联关系
// 4.1 时间平行关系(汉朝与罗马帝国同期)
CREATE (han)-[:CONTEMPORARY_WITH {relation:"同期文明"}]->(rome)// 4.2 事件关联(郑和下西洋与欧洲大航海时代前)
CREATE (zheng_he_voyages)-[:BEFORE {years:70}]->(columbus_voyage:Event {name:"哥伦布发现美洲", year:1492
})// 4.3 跨文明交流(唐朝与阿拉伯帝国)
CREATE (tang)-[:HAD_TRADE_WITH {route:"丝绸之路"}]->(arab)

二、时间轴查询示例(Cypher)

1. 查询中国某朝代时期的全球事件

// 查询唐朝时期(618-907)全球重大事件
MATCH (c:Dynasty {name:"唐朝"})
MATCH (globalEvent:Event)
WHERE globalEvent.year >= c.start AND globalEvent.year <= c.end
RETURN globalEvent.name AS event, globalEvent.year AS year,globalEvent.description AS description
ORDER BY globalEvent.year

2. 查询特定中国事件时的全球背景

// 查询郑和下西洋时期(1405-1433)全球事件
MATCH (chinaEvent:Event {name:"郑和下西洋"})
MATCH (worldEvent:Event)
WHERE worldEvent.year >= chinaEvent.start_year AND worldEvent.year <= chinaEvent.end_year
RETURN worldEvent.name AS concurrent_event,worldEvent.year AS year,CASE WHEN worldEvent.year < chinaEvent.start_year THEN "之前" ELSE "同期" END AS time_relation
ORDER BY worldEvent.year

3. 跨文明关联分析

// 查找与中国有直接关联的全球事件
MATCH (china:Country {name:"中国"})<-[:OCCURRED_IN]-(chinaEvent:Event)
MATCH (chinaEvent)-[r]-(worldEvent:Event)
RETURN chinaEvent.name AS chinese_event,type(r) AS relation_type,worldEvent.name AS world_event,chinaEvent.year AS china_year,worldEvent.year AS world_year
ORDER BY chinaEvent.year

三、Python可视化分析

import pandas as pd
import matplotlib.pyplot as plt
from pyvis.network import Networkdef visualize_timeline(start_year, end_year):# 连接Neo4j获取数据query = """MATCH (e:Event)WHERE e.year >= $start AND e.year <= $endOPTIONAL MATCH (e)-[:OCCURRED_IN]->(c:Country)RETURN e.name AS event, e.year AS year, e.description AS description,coalesce(c.name, '全球') AS countryORDER BY year"""df = pd.DataFrame([dict(record) for record in session.run(query, start=start_year, end=end_year)])# 创建时间轴图plt.figure(figsize=(12, 8))colors = {'中国': 'red', '罗马帝国': 'blue', '英格兰': 'green'}for _, row in df.iterrows():plt.plot(row['year'], 0, 'o', color=colors.get(row['country'], 'gray'),markersize=10)plt.text(row['year'], 0.1, f"{row['event']}\n({row['year']})",ha='center', va='bottom', rotation=45)plt.title(f"全球历史时间轴 ({start_year}-{end_year})")plt.yticks([])plt.xlabel("年份")plt.grid(axis='x')plt.tight_layout()plt.savefig('global_timeline.png', dpi=300)def create_interactive_network():# 创建交互式知识图谱query = """MATCH (c:Dynasty)-[r]-(e:Event)OPTIONAL MATCH (e)-[r2]-(ge:Event)RETURN *LIMIT 100"""results = session.run(query)net = Network(height="800px", width="100%", bgcolor="#222222", font_color="white")for record in results:# 添加节点if 'Dynasty' in record['c'].labels:net.add_node(record['c'].id, label=record['c']['name'], group='dynasty', title=record['c']['capital'])elif 'Event' in record['e'].labels:net.add_node(record['e'].id, label=record['e']['name'], group='event', title=record['e']['description'])# 添加边if record['r'] is not None:net.add_edge(record['r'].start, record['r'].end, title=type(record['r']).__name__)net.show("history_network.html")

四、典型应用场景

1. 比较文明发展(Python实现)

def compare_civilizations(dynasty_name):query = """MATCH (d:Dynasty {name: $name})MATCH (d)-[:CONTEMPORARY_WITH]->(c:Country)MATCH (c)<-[:OCCURRED_IN]-(e:Event)RETURN c.name AS civilization, count(e) AS event_count,collect(e.name)[..3] AS sample_events"""df = pd.DataFrame([dict(record) for record in session.run(query, name=dynasty_name)])# 生成对比图表df.plot.bar(x='civilization', y='event_count', title=f'{dynasty_name}时期文明对比')plt.ylabel('重大事件数量')plt.tight_layout()plt.savefig(f'{dynasty_name}_civilization_comparison.png')

2. 历史影响路径分析

// 查找从汉朝到罗马帝国的知识传播路径
MATCH path = (han:Dynasty {name:"汉朝"})-[:HAD_TRADE_WITH*..3]->(rome:Country {name:"罗马帝国"})
RETURN [n IN nodes(path) | n.name] AS path_nodes,[r IN relationships(path) | type(r)] AS relationships
LIMIT 5

3. 时间轴重叠可视化(Python)

def plot_parallel_timelines():query = """MATCH (c:Dynasty)-[:NEXT*]->(d:Dynasty)WITH collect(DISTINCT c) + collect(DISTINCT d) AS dynastiesUNWIND dynasties AS dMATCH (d)<-[:OCCURRED_IN]-(e:Event)RETURN d.name AS dynasty, d.start AS start, d.end AS end,collect({name:e.name, year:e.year}) AS events"""fig, axes = plt.subplots(figsize=(15, 8))# 绘制朝代时间条for i, record in enumerate(session.run(query)):axes.barh(i, width=record['end']-record['start'], left=record['start'], alpha=0.6)axes.text(record['start'], i, record['dynasty'], ha='left', va='center')# 标注事件for event in record['events']:axes.plot(event['year'], i, 'ro')axes.text(event['year'], i+0.1, event['name'], rotation=45, ha='right')axes.set_yticks([])axes.set_xlabel("年份")axes.set_title("中国朝代与重大事件时间轴")plt.tight_layout()plt.savefig('dynasty_timeline.png', dpi=300)

五、知识图谱扩展建议

1.添加更多维度数据​​

// 添加科技发展节点
CREATE (papermaking:Technology {name:"造纸术", origin:"中国", century:2}),(printing:Technology {name:"印刷术", origin:"中国", century:8})// 建立技术传播路径
MATCH (c:Dynasty {name:"汉朝"}), (t:Technology {name:"造纸术"})
CREATE (c)-[:INVENTED]->(t)
CREATE (t)-[:SPREAD_TO {century:8}]->(:Country {name:"阿拉伯帝国"})

2.​​实现时空查询函数​​

// 创建自定义函数(需安装APOC库)
CALL apoc.custom.asFunction('events.around','MATCH (e:Event) WHERE e.year >= $year - 50 AND e.year <= $year + 50RETURN e','READ',[['e', 'NODE']],true,'查找某年份前后50年的相关事件'
)

3.构建GDS图算法分析​​

// 发现历史关键转折点(使用PageRank算法)
CALL gds.graph.create('history', ['Event', 'Dynasty', 'Country'], ['OCCURRED_IN', 'CONTEMPORARY_WITH', 'HAD_TRADE_WITH']
)CALL gds.pageRank.stream('history')
YIELD nodeId, score
RETURN gds.util.asNode(nodeId).name AS name, score
ORDER BY score DESC LIMIT 10

六、小结

这套方案通过:
​​时空双重维度建模​​:精确到年的历史事件定位
​​跨文明关联网络​​:揭示文明交流的隐藏模式
​​多层级结构​​:国家->朝代->事件->人物的知识体系
​​交互式可视化​​:直观展示复杂历史关系
典型查询示例:“当中国处于宋朝(960-1279)时,欧洲正在发生哪些重大事件?这些事件如何通过丝绸之路与中国产生关联?”

七、欢迎纠错

  欢迎纠错,随时更新。
  联系方式:评论、私信,或 企鹅 :179 0042 182 。
  码字不易,如觉得还可以,请给个免费的 zan 和 soucang ,让我有动力继续写下去。

八、免费爬虫

https://affiliate
.bazhuayu
.com
/M8lKUC

九、论文写作/Python 学习智能体

https://chatglm.cn/share/WF2C5ree


  • 以下关于 Markdown 编辑器

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

++ 新的改变

我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法1 功能;
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表 功能。

++ 功能快捷键

撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G

++ 合理的创建标题,有助于目录的生成

直接输入1次+,并按下space后,将生成1级标题。
输入2次+,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

++ 如何改变文本的样式

强调文本 强调文本

加粗文本 加粗文本

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

++ 插入链接与图片

链接: link.

图片: Alt

带尺寸的图片: Alt

居中的图片: Alt

居中并且带尺寸的图片: Alt

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

++ 如何插入一段漂亮的代码片

去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

++ 生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

++ 创建一个表格
一个简单的表格是这么创建的:

项目Value
电脑$1600
手机$12
导管$1

+++ 设定内容居中、居左、居右
使用:---------:居中
使用:----------居左
使用----------:居右

第一列第二列第三列
第一列文本居中第二列文本居右第三列文本居左

+++ SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPEASCIIHTML
Single backticks'Isn't this fun?'‘Isn’t this fun?’
Quotes"Isn't this fun?"“Isn’t this fun?”
Dashes-- is en-dash, --- is em-dash– is en-dash, — is em-dash

++ 创建一个自定义列表
Markdown
: Text-to-HTML conversion tool

Authors
John
Luke

++ 如何创建一个注脚

一个具有注脚的文本。2

++ 注释也是必不可少的

Markdown将文本转换为 HTML

++ KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ(n)=(n−1)!∀n∈N\Gamma(n) = (n-1)!\quad\forall n\in\mathbb NΓ(n)=(n1)!nN 是通过欧拉积分

Γ(z)=∫0∞tz−1e−tdt.\Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

你可以找到更多关于的信息 LaTeX 数学表达式here.

++ 新的甘特图功能,丰富你的文章

2014-01-072014-01-092014-01-112014-01-132014-01-152014-01-172014-01-192014-01-21已完成 进行中 计划一 计划二 现有任务Adding GANTT diagram functionality to mermaid
  • 关于 甘特图 语法,参考 这儿,

++ UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:

张三李四王五你好!李四, 最近怎么样?你最近怎么样,王五?我很好,谢谢!我很好,谢谢!李四想了很长时间, 文字太长了不适合放在一行.打量着王五...很好... 王五, 你怎么样?张三李四王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

++ FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.3.0开始我的操作确认?结束yesno
  • 关于 Flowchart流程图 语法,参考 这儿.

++ 导出与导入

+++ 导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

+++ 导入
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. mermaid语法说明 ↩︎

  2. 注脚的解释 ↩︎

http://www.dtcms.com/a/430824.html

相关文章:

  • conda建立虚拟环境,并在jupyter notebook中显示,查看与已安装包是否冲突
  • 美食网站策划书新网站如何让百度收录
  • [创业之路-642]:新质生产力、硬科技与数字经济深度融合
  • 今日分享 浮点数二分
  • DataTool.vip官网入口 - 多平台视频与音频免费下载器工具
  • 文心雕龙:DIFY 工作流驱动的Word自动化生成与规范排版方案
  • asp sql做学生信息网站中国建设银行演示网站
  • windows10 系统添加第二块硬盘(解决硬盘盘符丢失问题)
  • java-代码随想录第48天|739. 每日温度、496.下一个更大元素 I、503.下一个更大元素II
  • 在嘉立创的泰山派上也能运行Easysearch
  • JSP 点击量统计
  • 应用网站如何做外贸网站建设哪里做得好
  • Kubernetes证书管理实战:cert-manager部署与CRD导出
  • [Java]PTA: jmu-Java-02基本语法-08-ArrayList入门
  • 网站建设背景及目的搜索优化的培训免费咨询
  • 2012 年真题配套词汇单词笔记(考研真相)
  • Ubuntu20.04 按照飞浆paddle 3.2遇到的问题
  • 网站建设推荐郑国华做网站ps图片都是多大
  • 探索 Docker/K8s 部署 MySQL 的创新实践与优化技巧
  • 线程属性的相关设置详解
  • 深圳公明网站建设桂林北站到阳朔
  • maven的概述以及在mac安装配置
  • 【复习】计网强化第一章
  • 【微信公众平台】小程序如何查找菜单?如何通过自定义的菜单路径生成小程序二维码?小程序二维码指定生成
  • 瑞萨M85内核芯片再出1GHz旗舰双核新品RA8T2,两个千兆以太网MAC,集成EtherCAT从机接口,面向高端电机控制
  • 海洋公园网站建设方案网站开发加设计要多少钱
  • KingbaseES 的 SQL Server 兼容性测试
  • 基于ps2021实现1寸相纸的打印
  • [论文阅读] AI + 软件工程 | 从“事后补救”到“实时防控”,SemGuard重塑LLM代码生成质量
  • 购物网站修改文案常见的网络推广方法有几种