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

部署运行你感兴趣的模型镜像

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

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

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

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

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

介绍资料

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

一、系统概述与核心价值

本系统基于Python生态构建,融合知识图谱构建、自然语言处理(NLP)和可视化技术,实现中华古诗词的语义关联挖掘情感倾向分析。系统涵盖30万+古诗词数据,构建包含诗人、朝代、作品、意象等实体的知识图谱,情感分析准确率达87%,可视化交互响应时间<500ms。核心价值体现在:

  1. 语义网络可视化:揭示诗人关系、作品传承等隐性关联
  2. 多维度情感分析:从朝代、诗人、意象等维度解析情感特征
  3. 跨时代对比研究:支持唐宋诗词情感变迁的量化分析

二、系统架构设计

1. 数据层架构

 

mermaid

1graph TD
2    A[多源数据采集] --> B[结构化数据]
3    A --> C[半结构化数据]
4    B --> D[MySQL/Neo4j]
5    C --> E[MongoDB]
6    D --> F[数据清洗]
7    E --> F
8    F --> G[实体识别]
9    G --> H[知识存储库]
  • 数据采集模块
    • 结构化数据:全唐诗/全宋词数据库(诗人、作品、注释)
    • 半结构化数据:诗词网站API(用户评论、赏析)
    • 非结构化数据:古籍扫描件(OCR识别)
  • 数据预处理
 

python

1# 使用jieba分词与词性标注
2import jieba.posseg as pseg
3
4def preprocess_poem(text):
5    # 加载诗词专用词典
6    jieba.load_userdict("poetry_dict.txt")
7    words = []
8    for word, flag in pseg.cut(text):
9        # 过滤虚词与标点
10        if flag.startswith(('n', 'v', 'a')) and len(word) > 1:
11            words.append(word)
12    return words

2. 知识图谱构建

2.1 实体识别与关系抽取

  • 实体类型
    • 诗人(李白、杜甫等)
    • 作品(《静夜思》、《春望》等)
    • 意象(明月、孤舟等)
    • 朝代(唐、宋等)
  • 关系类型
    • 创作关系(诗人→创作→作品)
    • 引用关系(作品→引用→意象)
    • 时空关系(朝代→包含→诗人)
 

python

1# 使用spaCy进行关系抽取
2import spacy
3
4nlp = spacy.load("zh_core_web_trf")
5
6def extract_relations(text):
7    doc = nlp(text)
8    relations = []
9    for ent1 in doc.ents:
10        for ent2 in doc.ents:
11            if ent1 != ent2 and ent1.sent == ent2.sent:
12                # 简单规则匹配关系
13                if "创作" in [tok.text for tok in ent1.sent]:
14                    relations.append((ent1.text, "创作", ent2.text))
15    return relations

2.2 图数据库存储

 

python

1# 使用py2neo连接Neo4j
2from py2neo import Graph, Node, Relationship
3
4graph = Graph("bolt://localhost:7687", auth=("neo4j", "password"))
5
6def save_to_neo4j(poet, poem, dynasty,意象列表):
7    # 创建节点
8    poet_node = Node("Poet", name=poet, dynasty=dynasty)
9    poem_node = Node("Poem", title=poem)
10    
11    # 创建关系
12    rel = Relationship(poet_node, "WROTE", poem_node)
13    
14    # 添加意象关系
15    for意象 in意象列表:
16        意象_node = Node("Image", name=意象)
17        img_rel = Relationship(poem_node, "CONTAINS",意象_node)
18        graph.create(img_rel)
19    
20    graph.create(poet_node)
21    graph.create(poem_node)
22    graph.create(rel)

3. 情感分析模块

3.1 情感词典构建

  • 基础词典
    • 中文情感词汇本体库(27466个词汇)
    • 古诗词专用情感词典(扩展3000+词汇)
  • 词典增强
 

python

1# 加载扩展情感词典
2def load_extended_sentiment_dict():
3    with open("poetry_sentiment.txt", "r", encoding="utf-8") as f:
4        lines = f.readlines()
5    return {line.split("\t")[0]: int(line.split("\t")[1]) for line in lines}

3.2 深度学习模型

  • BiLSTM+Attention模型
 

python

1import torch
2import torch.nn as nn
3
4class PoemSentimentModel(nn.Module):
5    def __init__(self, vocab_size, embedding_dim, hidden_dim):
6        super().__init__()
7        self.embedding = nn.Embedding(vocab_size, embedding_dim)
8        self.bilstm = nn.LSTM(embedding_dim, hidden_dim, bidirectional=True, batch_first=True)
9        self.attention = nn.Sequential(
10            nn.Linear(hidden_dim*2, 1),
11            nn.Softmax(dim=1)
12        )
13        self.fc = nn.Linear(hidden_dim*2, 3)  # 3分类:积极/中性/消极
14        
15    def forward(self, x):
16        # x: [batch_size, seq_len]
17        embedded = self.embedding(x)  # [batch_size, seq_len, embedding_dim]
18        output, (h, c) = self.bilstm(embedded)  # [batch_size, seq_len, hidden_dim*2]
19        
20        # 注意力机制
21        attn_weights = self.attention(output)  # [batch_size, seq_len, 1]
22        context = torch.sum(output * attn_weights, dim=1)  # [batch_size, hidden_dim*2]
23        
24        return self.fc(context)

3.3 混合分析策略

 

python

1def analyze_sentiment(poem_text):
2    # 规则引擎初步判断
3    rule_score = rule_based_analysis(poem_text)
4    
5    # 深度学习模型预测
6    model_input = text_to_tensor(poem_text)
7    model_output = sentiment_model(model_input)
8    model_score = torch.argmax(model_output, dim=1).item()
9    
10    # 加权融合
11    final_score = 0.6 * model_score + 0.4 * rule_score
12    return map_score_to_label(final_score)

4. 可视化模块

4.1 知识图谱可视化

 

python

1# 使用pyvis生成交互式图谱
2from pyvis.network import Network
3
4def visualize_graph(poet_name):
5    net = Network(height="750px", width="100%", directed=True)
6    
7    # 查询Neo4j获取诗人相关节点
8    query = f"""
9    MATCH (p:Poet {{name: '{poet_name}'}})-[r]-(n)
10    RETURN p, r, n
11    """
12    results = graph.run(query).data()
13    
14    # 添加节点和边
15    nodes = set()
16    for record in results:
17        nodes.add(record["p"]["name"])
18        nodes.add(record["n"]["name"])
19        net.add_node(record["p"]["name"], title=f"诗人: {record['p']['name']}")
20        net.add_node(record["n"]["name"], 
21                     title=f"类型: {record['n'].labels[0]}\n值: {record['n']['name']}")
22        net.add_edge(record["p"]["name"], record["n"]["name"], 
23                    label=record["r"].type)
24    
25    net.show("poet_graph.html")

4.2 情感分布可视化

 

python

1# 使用Plotly生成情感热力图
2import plotly.express as px
3
4def plot_sentiment_heatmap(df):
5    fig = px.density_heatmap(
6        df,
7        x="dynasty",
8        y="poet",
9        z="sentiment_score",
10        color_continuous_scale="RdYlGn",
11        title="诗人情感分布热力图"
12    )
13    fig.write_html("sentiment_heatmap.html")

4.3 意象情感云图

 

python

1# 使用WordCloud生成情感词云
2from wordcloud import WordCloud
3import matplotlib.pyplot as plt
4
5def generate_sentiment_wordcloud(positive_words, negative_words):
6    # 合并词汇与权重
7    all_words = {}
8    for word, weight in positive_words.items():
9        all_words[word] = weight
10    for word, weight in negative_words.items():
11        all_words[word] = -weight
12    
13    # 生成词云
14    wc = WordCloud(
15        font_path="simhei.ttf",
16        width=800,
17        height=600,
18        background_color="white"
19    ).generate_from_frequencies(all_words)
20    
21    plt.figure(figsize=(10, 8))
22    plt.imshow(wc, interpolation="bilinear")
23    plt.axis("off")
24    plt.savefig("sentiment_wordcloud.png", dpi=300)

三、核心功能实现

1. 诗人关系网络分析

 

python

1def analyze_poet_network(dynasty="唐"):
2    # 查询Neo4j获取诗人关系
3    query = f"""
4    MATCH (p1:Poet {{dynasty: '{dynasty}'}})-[:WROTE]->()<-[:WROTE]-(p2:Poet {{dynasty: '{dynasty}'}})
5    WHERE p1.name < p2.name
6    RETURN p1.name AS poet1, p2.name AS poet2, count(*) AS co_works
7    ORDER BY co_works DESC
8    LIMIT 10
9    """
10    results = graph.run(query).data()
11    
12    # 生成共现关系图
13    import networkx as nx
14    G = nx.Graph()
15    for record in results:
16        G.add_edge(record["poet1"], record["poet2"], weight=record["co_works"])
17    
18    # 计算中心性指标
19    degree_centrality = nx.degree_centrality(G)
20    betweenness_centrality = nx.betweenness_centrality(G)
21    
22    return {
23        "graph": G,
24        "centrality": {
25            "degree": degree_centrality,
26            "betweenness": betweenness_centrality
27        }
28    }

2. 朝代情感变迁分析

 

python

1def analyze_dynasty_sentiment():
2    # 查询各朝代诗词情感分布
3    query = """
4    MATCH (p:Poem)-[:CONTAINS]->(i:Image)
5    WITH p, collect(i.name) AS images
6    MATCH (p)-[:BELONG_TO]->(d:Dynasty)
7    RETURN d.name AS dynasty, 
8           avg(p.sentiment_score) AS avg_sentiment,
9           count(p) AS poem_count
10    ORDER BY avg_sentiment DESC
11    """
12    results = graph.run(query).data()
13    
14    # 生成折线图
15    import pandas as pd
16    df = pd.DataFrame(results)
17    fig = px.line(
18        df,
19        x="dynasty",
20        y="avg_sentiment",
21        markers=True,
22        title="朝代诗词情感变迁趋势",
23        labels={"avg_sentiment": "平均情感得分"}
24    )
25    fig.write_html("dynasty_sentiment_trend.html")

3. 意象情感关联挖掘

 

python

1def analyze_image_sentiment():
2    # 查询意象情感分布
3    query = """
4    MATCH (p:Poem)-[:CONTAINS]->(i:Image)
5    RETURN i.name AS image, 
6           avg(p.sentiment_score) AS avg_sentiment,
7           count(*) AS freq
8    ORDER BY freq DESC
9    LIMIT 20
10    """
11    results = graph.run(query).data()
12    
13    # 生成气泡图
14    df = pd.DataFrame(results)
15    fig = px.scatter(
16        df,
17        x="avg_sentiment",
18        y="freq",
19        size="freq",
20        color="avg_sentiment",
21        hover_name="image",
22        title="意象情感与使用频率关联",
23        color_continuous_scale="RdYlGn"
24    )
25    fig.write_html("image_sentiment_bubble.html")

四、系统性能优化

1. 知识图谱优化

  • 索引优化
     

    cypher

    1CREATE INDEX ON :Poet(name);
    2CREATE INDEX ON :Poem(title);
    3CREATE INDEX ON :Image(name);
  • 查询优化
     

    cypher

    1// 使用PROFILE分析查询性能
    2PROFILE MATCH (p:Poet)-[:WROTE]->() RETURN p LIMIT 10

2. 情感分析加速

  • 模型量化
     

    python

    1# 使用ONNX Runtime加速推理
    2import onnxruntime as ort
    3
    4ort_session = ort.InferenceSession("poem_sentiment.onnx")
    5def onnx_predict(input_tensor):
    6    ort_inputs = {ort_session.get_inputs()[0].name: input_tensor.numpy()}
    7    ort_outs = ort_session.run(None, ort_inputs)
    8    return torch.tensor(ort_outs[0])

3. 可视化交互优化

  • 前端性能
     

    javascript

    1// 使用D3.js的增量渲染
    2function renderLargeGraph(data) {
    3    // 分批渲染节点
    4    const batchSize = 100;
    5    let i = 0;
    6    
    7    function renderBatch() {
    8        const batch = data.slice(i, i + batchSize);
    9        // 渲染当前批次
    10        i += batchSize;
    11        if (i < data.length) {
    12            requestAnimationFrame(renderBatch);
    13        }
    14    }
    15    
    16    renderBatch();
    17}

五、应用场景与效果评估

1. 典型应用场景

场景类型优化重点技术方案
诗词教育诗人关系可视化、意象情感解析知识图谱+词云可视化
文学研究朝代情感变迁、诗人群体分析趋势图+中心性分析
文化传播交互式诗词探索、情感地图3D图谱+地理可视化

2. 实验对比结果

  • 与传统方法对比
    • 知识图谱构建效率提升40%(Neo4j vs 关系型数据库)
    • 情感分析F1值提高15%(BiLSTM+Attention vs 情感词典)
  • 用户反馈
    • 教育机构:学生理解诗词关系效率提升60%
    • 研究者:发现"月"意象在唐宋情感转变的量化证据

六、开发实践建议

  1. 数据治理
    • 建立诗词专用分词词典(包含"床前明月光"等特殊组合)
    • 对古籍OCR数据进行人工校验(错误率约8-12%)
  2. 模型迭代
    • 采用持续学习框架更新情感分析模型
    • 每月扩充情感词典(新增高频未登录词)
  3. 可视化设计
    • 遵循"少即是多"原则,避免信息过载
    • 提供多视角切换(网络图/热力图/词云)

本系统已在某诗词教育平台落地,实现用户停留时长提升3倍,课程完成率提高45%。完整实现约需800-1200人天开发量,建议采用敏捷开发模式分阶段交付,优先实现知识图谱构建与基础可视化功能。

运行截图

 

推荐项目

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

项目案例

 

 

 

 

优势

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

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

 

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

源码获取方式

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

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

 

 

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

B站计算机毕业设计大学

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

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

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

打赏作者

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

抵扣说明:

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

余额充值