计算机毕业设计Python知识图谱中华古诗词可视化 古诗词情感分析 古诗词智能问答系统 AI大模型自动写诗 大数据毕业设计(源码+LW文档+PPT+讲解)

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

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

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

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

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

介绍资料

Python知识图谱中华古诗词可视化与古诗词情感分析技术说明

一、引言

中华古诗词承载着丰富的历史文化内涵和细腻的情感表达,是中华民族文化的瑰宝。随着信息技术的快速发展,利用Python构建知识图谱对古诗词进行可视化展示,并开展情感分析,能够为古诗词的研究、教学与传播提供新的视角和工具。本技术说明将详细介绍利用Python实现中华古诗词知识图谱可视化及情感分析的关键技术步骤。

二、整体技术架构

本技术方案主要分为数据采集与预处理、知识图谱构建、可视化展示以及情感分析四个主要模块。数据采集与预处理模块负责从多种渠道获取古诗词数据并进行清洗和格式化;知识图谱构建模块将处理后的数据转化为结构化的知识图谱;可视化展示模块以直观的图形方式呈现知识图谱;情感分析模块则挖掘古诗词中的情感信息。

三、数据采集与预处理

(一)数据采集

  1. 网络爬虫:使用Python的requests库和BeautifulSoup库编写网络爬虫,从古诗文网、中华诗词库等网站爬取古诗词数据。例如,通过分析网页结构,定位包含诗词原文、作者、朝代等信息的HTML标签,提取相关数据。
 

python

import requests
from bs4 import BeautifulSoup
url = "https://www.gushiwen.org/shiwen/default.aspx"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
poems = soup.find_all('div', class_='sons')
for poem in poems:
title = poem.find('b').text
author = poem.find('p', class_='source').a.text
content = poem.find('div', class_='contson').text.strip()
print(f"标题: {title}, 作者: {author}, 内容: {content}")
  1. 数据库导入:如果已有古诗词数据库,可使用pymysql(针对MySQL数据库)或psycopg2(针对PostgreSQL数据库)等库连接数据库,读取古诗词数据。

(二)数据清洗

  1. 去除噪声:使用正则表达式(re库)去除数据中的HTML标签、特殊字符、多余的空格和换行符等。
 

python

import re
text = "<p>这是一首<b>古诗</b>, 包含很多信息。</p>"
clean_text = re.sub(r'<[^>]+>', '', text).strip()
print(clean_text)
  1. 处理重复数据:通过比较诗词的标题、作者和内容等信息,使用集合(set)或pandas库的drop_duplicates()方法去除重复的古诗词记录。

(三)分词与词性标注

使用jieba库对古诗词文本进行分词,并结合自定义词典和停用词表,去除无意义的停用词。同时,使用jieba.posseg模块进行词性标注。

 

python

import jieba.posseg as pseg
text = "床前明月光,疑是地上霜。"
words = pseg.cut(text)
for word, flag in words:
print(f"{word}({flag})", end=" ")

四、知识图谱构建

(一)实体识别

  1. 基于规则的方法:根据古诗词的特点和语言规律,定义一系列规则来识别实体。例如,通过“朝代 + 人名”的模式识别诗人实体,通过“诗名 + 诗体”的模式识别诗作实体。
  2. 基于机器学习的方法:使用sklearn_crfsuite库实现条件随机场(CRF)模型进行实体识别。将分词和词性标注结果作为特征,训练模型识别诗人、诗作、朝代等实体。
 

python

import sklearn_crfsuite
from sklearn_crfsuite import metrics
# 示例特征函数
def word2features(sent, i):
word = sent[i][0]
postag = sent[i][1]
features = {
'word.lower()': word.lower(),
'word[-3:]': word[-3:],
'word[-2:]': word[-2:],
'word.isupper()': word.isupper(),
'word.istitle()': word.istitle(),
'word.isdigit()': word.isdigit(),
'postag': postag,
'postag[:2]': postag[:2],
}
if i > 0:
word1 = sent[i-1][0]
postag1 = sent[i-1][1]
features.update({
'-1:word.lower()': word1.lower(),
'-1:word.istitle()': word1.istitle(),
'-1:word.isupper()': word1.isupper(),
'-1:postag': postag1,
'-1:postag[:2]': postag1[:2],
})
else:
features['BOS'] = True
if i < len(sent)-1:
word1 = sent[i+1][0]
postag1 = sent[i+1][1]
features.update({
'+1:word.lower()': word1.lower(),
'+1:word.istitle()': word1.istitle(),
'+1:word.isupper()': word1.isupper(),
'+1:postag': postag1,
'+1:postag[:2]': postag1[:2],
})
else:
features['EOS'] = True
return features
# 示例数据
train_sents = [
[('李白', 'PER'), ('创作', 'v'), ('了', 'u'), ('《静夜思》', 'WORK')],
[('杜甫', 'PER'), ('写', 'v'), ('下', 'v'), ('《春望》', 'WORK')]
]
# 提取特征和标签
X_train = [[word2features(s, i) for i in range(len(s))] for s in train_sents]
y_train = [[label for word, label in s] for s in train_sents]
# 训练CRF模型
crf = sklearn_crfsuite.CRF(
algorithm='lbfgs',
c1=0.1,
c2=0.1,
max_iterations=100,
all_possible_transitions=True
)
crf.fit(X_train, y_train)

(二)关系抽取

  1. 规则匹配:通过预先定义的关系规则,从文本中抽取实体之间的关系。例如,根据“诗人创作诗作”的模式,抽取诗人与诗作之间的创作关系。
  2. 基于机器学习的方法:将关系抽取看作一个分类问题,使用标注数据集训练分类模型(如支持向量机、随机森林等),自动识别实体之间的关系。

(三)图谱存储

选择Neo4j图数据库进行知识图谱的存储。使用py2neo库作为Python与Neo4j的交互接口,通过定义节点和边的属性,将实体和关系数据导入到Neo4j数据库中。

 

python

from py2neo import Graph, Node, Relationship
graph = Graph("bolt://localhost:7687", auth=("username", "password"))
# 创建诗人节点
poet = Node("Poet", name="李白", dynasty="唐朝")
graph.create(poet)
# 创建诗作节点
poem = Node("Poem", title="《静夜思》", content="床前明月光,疑是地上霜。")
graph.create(poem)
# 创建关系
relation = Relationship(poet, "CREATED", poem)
graph.create(relation)

五、可视化展示

(一)D3.js可视化

  1. 数据绑定:将Neo4j中的知识图谱数据转换为D3.js可处理的JSON格式,使用D3.js的数据绑定功能,将数据与图形元素(如节点、边)进行关联。
  2. 布局算法:选择力导向布局算法来确定节点和边的位置,使节点分布更加均匀、合理。
  3. 图形渲染:使用D3.js的SVG功能绘制节点和边,并设置节点的颜色、大小、形状,边的粗细、颜色等样式。同时,添加交互功能,如鼠标悬停显示节点和边的详细信息,点击节点展开或收缩相关子图等。

(二)ECharts可视化

  1. 数据加载与展示:将知识图谱数据转换为ECharts所需的数据格式,通过setOption方法将数据加载到图表中。例如,在关系图中,定义节点和边的数据数组,设置节点的名称、类别、符号大小,边的源节点、目标节点、关系类型等属性。
  2. 交互功能实现:利用ECharts的交互事件(如点击事件、鼠标悬停事件)实现用户与图表的交互。例如,点击节点时,通过AJAX请求从后端获取该节点的详细信息,并在图表旁边展示;鼠标悬停在边上时,显示关系的详细描述。

六、古诗词情感分析

(一)基于词典的方法

  1. 构建情感词典:收集通用情感词典,并结合古诗词的特点,添加古诗词中特有的情感词汇,标注其情感极性和强度。
  2. 情感计算:对古诗词中的每个情感词汇进行情感极性打分,根据词汇的情感极性和在诗词中的出现频率,计算整首诗词的情感倾向。

(二)基于机器学习的方法

  1. 特征提取:提取古诗词文本的特征,如情感词、程度副词、否定词等,以及基于词向量(如Word2Vec、GloVe)的语义特征。
  2. 模型训练与预测:选择合适的机器学习算法(如支持向量机、朴素贝叶斯等),利用标注好的数据集进行训练,学习古诗词情感分类的特征和模式,然后对新的古诗词进行情感预测。

(三)基于深度学习的方法

  1. 模型选择:使用长短期记忆网络(LSTM)、双向编码器表示(BERT)等深度学习模型,这些模型能够更好地捕捉古诗词中的上下文信息和语义关系。
  2. 模型训练与微调:在大规模古诗词数据集上预训练模型,然后针对具体的情感分析任务进行微调,提高模型的准确性和泛化能力。例如,使用BERT模型进行古诗词情感分类,通过微调BERT模型的参数,使其适应古诗词的情感分析任务。

七、总结

通过以上技术步骤,利用Python实现了中华古诗词知识图谱的可视化展示和情感分析。数据采集与预处理确保了数据的质量和可用性;知识图谱构建将古诗词数据转化为结构化的知识;可视化展示以直观的方式呈现知识图谱,方便用户理解和探索;情感分析挖掘了古诗词中的情感信息,为古诗词的研究和欣赏提供了新的视角。在实际应用中,可根据具体需求对各模块进行优化和扩展,以进一步提高系统的性能和功能。

运行截图

推荐项目

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

项目案例

优势

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

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

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

源码获取方式

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

B站计算机毕业设计大学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值