温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片!

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片!

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片!

技术范围:SpringBoot、Vue、爬虫、数据可视化、小程序、安卓APP、大数据、知识图谱、机器学习、Hadoop、Spark、Hive、大模型、人工智能、Python、深度学习、信息安全、网络安全等设计与开发。

主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码、文档辅导、LW文档降重、长期答辩答疑辅导、腾讯会议一对一专业讲解辅导答辩、模拟答辩演练、和理解代码逻辑思路。

🍅文末获取源码联系🍅

🍅文末获取源码联系🍅

🍅文末获取源码联系🍅

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及LW文档编写等相关问题都可以给我留言咨询,希望帮助更多的人

信息安全/网络安全 大模型、大数据、深度学习领域中科院硕士在读,所有源码均一手开发!

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人

介绍资料

Python知识图谱中华古诗词可视化技术说明

一、项目概述

本项目旨在通过构建中华古诗词知识图谱,结合Python可视化技术,实现诗词内容、作者关系、历史背景等多维度数据的交互式展示。系统以结构化数据为基础,利用图数据库存储诗词实体及关联关系,通过自然语言处理(NLP)技术提取关键信息,最终以网络图、时间轴、地理分布等形式呈现,帮助用户直观理解古诗词的文化内涵与历史脉络。

二、技术架构与工具链

1. 技术架构

  • 数据层:Neo4j图数据库(存储诗词、作者、朝代、地点等实体及关系) + SQLite(结构化元数据存储)
  • 处理层:Python(NLP处理、图谱构建、可视化生成)
  • 可视化层:PyVis(动态网络图) + PyEcharts(时间轴、地理分布) + Matplotlib/Seaborn(统计分析)
  • 交互层:Streamlit/Gradio(轻量级Web应用框架)

2. 核心工具库

  • 数据采集:Requests(爬取公开诗词数据集) + BeautifulSoup(HTML解析)
  • NLP处理:Jieba(分词) + SnowNLP(情感分析) + Spacy(命名实体识别)
  • 图数据库:Py2Neo(Neo4j Python驱动)
  • 可视化:PyVis(动态力导向图) + PyEcharts(地图/时间轴) + Plotly(交互式图表)

三、知识图谱构建流程

1. 数据采集与预处理

  • 数据来源
    • 公开数据集:如《全唐诗》《全宋词》文本文件、古诗文网API、开源项目(如Chinese-poetry)。
    • 结构化数据:作者生卒年、朝代信息、历史事件时间轴(维基百科数据)。
  • 清洗规则
    • 去除重复诗词(基于标题+内容哈希去重)。
    • 标准化作者名(如“李白”与“李太白”合并)。
    • 提取朝代信息(通过正则匹配“唐·李白”中的“唐”)。

2. 实体与关系抽取

  • 实体类型
    • 诗词(标题、内容、创作年代)
    • 作者(姓名、字号、生卒年、朝代)
    • 地点(诗词中提及的地理名词,如“长安”“扬州”)
    • 意象(高频词汇,如“月”“酒”“雁”)
  • 关系定义
    • 作者-创作-诗词(如“李白→创作→《静夜思》”)
    • 诗词-提及-地点(如“《静夜思》→提及→扬州”)
    • 作者-同朝-作者(如“李白→同朝→杜甫”)
    • 诗词-包含-意象(如“《静夜思》→包含→月”)
  • NLP处理示例
    
      

    python

    1import jieba
    2from py2neo import Graph, Node, Relationship
    3
    4# 分词并提取地点实体
    5poem_text = "故人西辞黄鹤楼,烟花三月下扬州"
    6keywords = [word for word in jieba.cut(poem_text) if len(word) > 1]
    7locations = [word for word in keywords if word in ["黄鹤楼", "扬州"]]  # 简单规则匹配
    8
    9# 构建图谱关系
    10graph = Graph("bolt://localhost:7687", auth=("neo4j", "password"))
    11author = Node("Author", name="李白")
    12poem = Node("Poem", title="《黄鹤楼送孟浩然之广陵》")
    13location_node = Node("Location", name="扬州")
    14graph.create(Relationship(author, "CREATES", poem))
    15graph.create(Relationship(poem, "MENTIONS", location_node))
    16

3. 图数据库存储

  • Neo4j数据模型
    
      

    cypher

    1CREATE (a:Author {name: '李白', dynasty: '唐'})
    2CREATE (p:Poem {title: '《静夜思》', content: '床前明月光...'})
    3CREATE (l:Location {name: '扬州'})
    4CREATE (a)-[:CREATES]->(p)
    5CREATE (p)-[:MENTIONS]->(l)
    6
  • 批量导入优化
    • 使用LOAD CSV命令导入预处理好的CSV数据。
    • 对高频关系(如“同朝”)预先计算并批量创建。

四、可视化实现方案

1. 动态网络图(PyVis)

  • 功能:展示作者-诗词-地点的关联网络,支持缩放、拖拽、点击节点查看详情。
  • 代码示例
    
      

    python

    1from pyvis.network import Network
    2import pandas as pd
    3
    4# 从Neo4j查询数据
    5query = """
    6MATCH (a:Author)-[:CREATES]->(p:Poem)-[:MENTIONS]->(l:Location)
    7RETURN a.name as author, p.title as poem, l.name as location
    8"""
    9df = pd.DataFrame(graph.run(query).data())
    10
    11# 构建PyVis网络图
    12net = Network(height="750px", width="100%", directed=False)
    13for _, row in df.iterrows():
    14    net.add_node(row["author"], title=f"作者: {row['author']}", group="author")
    15    net.add_node(row["poem"], title=f"诗词: {row['poem']}", group="poem")
    16    net.add_node(row["location"], title=f"地点: {row['location']}", group="location")
    17    net.add_edge(row["author"], row["poem"], title="创作")
    18    net.add_edge(row["poem"], row["location"], title="提及")
    19net.show("poetry_network.html", notebook=False)
    20

2. 时间轴与朝代分布(PyEcharts)

  • 功能:按朝代统计诗词数量,展示时间轴上的创作高峰。
  • 代码示例
    
      

    python

    1from pyecharts.charts import Timeline, Bar
    2from pyecharts import options as opts
    3
    4# 统计各朝代诗词数量
    5dynasty_counts = df["dynasty"].value_counts().sort_index()
    6timeline = Timeline()
    7for dynasty, count in dynasty_counts.items():
    8    bar = (
    9        Bar()
    10        .add_xaxis([dynasty])
    11        .add_yaxis("诗词数量", [count])
    12        .set_global_opts(title_opts=opts.TitleOpts(title=f"{dynasty}朝代诗词数量"))
    13    )
    14    timeline.add(bar, dynasty)
    15timeline.render("dynasty_timeline.html")
    16

3. 地理分布(PyEcharts地图)

  • 功能:在地图上标记诗词中提及的地点,热力图展示高频区域。
  • 代码示例
    
      

    python

    1from pyecharts.charts import Map
    2from pyecharts import options as opts
    3
    4# 统计地点出现频率
    5location_counts = df["location"].value_counts().head(20)
    6map_chart = (
    7    Map()
    8    .add("诗词提及地点", [list(z) for z in zip(location_counts.index, location_counts.values)], "china")
    9    .set_global_opts(
    10        title_opts=opts.TitleOpts(title="古诗词中高频地点分布"),
    11        visualmap_opts=opts.VisualMapOpts(max_=location_counts.max())
    12    )
    13)
    14map_chart.render("location_map.html")
    15

4. 意象分析(词云与统计图表)

  • 功能:通过词云展示高频意象,柱状图对比不同作者用词偏好。
  • 代码示例
    
      

    python

    1from wordcloud import WordCloud
    2import matplotlib.pyplot as plt
    3
    4# 合并所有诗词内容并分词
    5all_poems = " ".join(df["content"].dropna())
    6words = [word for word in jieba.cut(all_poems) if len(word) > 1 and word not in ["如此", "何处"]]
    7word_freq = pd.Series(words).value_counts().head(50)
    8
    9# 生成词云
    10wc = WordCloud(font_path="simhei.ttf", width=800, height=600).generate_from_frequencies(word_freq)
    11plt.imshow(wc, interpolation="bilinear")
    12plt.axis("off")
    13plt.savefig("wordcloud.png", dpi=300)
    14

五、交互式Web应用集成

使用Streamlit快速搭建交互界面,整合上述可视化组件:


python

1import streamlit as st
2import pandas as pd
3from pyvis.network import Network
4
5st.title("中华古诗词知识图谱可视化")
6
7# 侧边栏选择可视化类型
8viz_type = st.sidebar.selectbox("选择可视化类型", ["网络图", "时间轴", "地图", "词云"])
9
10if viz_type == "网络图":
11    st.subheader("作者-诗词-地点关联网络")
12    # 实际项目中从Neo4j动态查询并渲染PyVis网络图
13    st.markdown("![网络图示例](https://example.com/network.png)")
14elif viz_type == "时间轴":
15    st.subheader("各朝代诗词数量时间轴")
16    st.markdown("![时间轴示例](https://example.com/timeline.png)")
17# 其他可视化类型类似...
18

六、优化与扩展方向

  1. 性能优化
    • 对大规模图谱使用分页查询或LOD(Level of Detail)技术。
    • 可视化组件采用Web Worker避免主线程阻塞。
  2. 功能扩展
    • 增加诗词情感分析(如用SnowNLP判断悲喜情感)。
    • 实现“以词搜诗”功能(基于Elasticsearch全文检索)。
  3. 数据深化
    • 引入更多元数据(如诗词韵律、典故注释)。
    • 关联历史事件数据(如安史之乱对杜甫创作的影响)。

七、总结

本项目通过Python生态中的图数据库、NLP与可视化工具,构建了可交互的古诗词知识图谱系统。用户可通过网络图理解诗词间的隐含关联,通过时间轴与地图感知文化时空分布,为古典文学研究提供了新的技术视角。未来可结合深度学习模型(如BERT)实现更精准的实体关系抽取,进一步提升图谱质量。

运行截图

推荐项目

上万套Java、Python、大数据、机器学习、深度学习等高级选题(源码+lw+部署文档+讲解等)

项目案例

优势

1-项目均为博主学习开发自研,适合新手入门和学习使用

2-所有源码均一手开发,不是模版!不容易跟班里人重复!

为什么选择我

 博主是CSDN毕设辅导博客第一人兼开派祖师爷、博主本身从事开发软件开发、有丰富的编程能力和水平、累积给上千名同学进行辅导、全网累积粉丝超过50W。是CSDN特邀作者、博客专家、新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流和合作。 

🍅✌感兴趣的可以先收藏起来,点赞关注不迷路,想学习更多项目可以查看主页,大家在毕设选题,项目代码以及论文编写等相关问题都可以给我留言咨询,希望可以帮助同学们顺利毕业!🍅✌

源码获取方式

🍅由于篇幅限制,获取完整文章或源码、代做项目的,拉到文章底部即可看到个人联系方式🍅

点赞、收藏、关注,不迷路,下方查↓↓↓↓↓↓获取联系方式↓↓↓↓↓↓↓↓

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐