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

108-基于Python的中国古诗词数据可视化分析系统

基于Python的中国古诗词数据可视化分析系统 - 技术实现与架构设计

作者:码界筑梦坊
发布时间:2025年
技术栈:Python + Django + Vue.js + MySQL + 智谱AI

📖 目录

  • 项目概述
  • 技术架构
  • 核心功能
  • 数据库设计
  • 前端实现
  • 后端API设计
  • AI智能写诗
  • 数据可视化
  • 部署与运维
  • 项目特色
  • 技术难点与解决方案
  • 未来规划
  • 项目目录结构
  • API索引(已实现)
  • 常见问题FAQ
  • 最佳实践与总结
  • 联系方式
  • 致谢

🎯 项目概述

本项目是一个基于Python技术栈的中国古诗词数据可视化分析系统,集成了诗词浏览、AI智能写诗、数据可视化分析等功能。系统采用前后端分离架构,后端使用Django REST Framework提供API服务,前端使用Vue.js构建用户界面,数据库采用MySQL存储诗词数据。

项目背景

随着传统文化的复兴,古诗词作为中华文化的重要组成部分,其数字化展示和智能分析需求日益增长。本项目旨在构建一个现代化的古诗词数据平台,通过技术手段让传统文化焕发新的活力。

设计理念

  • 文化传承:通过数字化手段保护和传承中华诗词文化
  • 技术创新:结合AI技术,实现智能诗词创作
  • 用户体验:提供直观友好的界面,让用户轻松浏览和交互
  • 数据驱动:通过可视化分析,挖掘诗词数据的内在价值

项目演示

💭项目源码获取,码界筑梦坊各大平台同名,博客底部含联系方式卡片,欢迎咨询!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

🏗️ 技术架构

技术栈详情

后端技术栈
# 核心框架
Django==4.2.7                    # Web框架
Django REST Framework==3.14.0     # API框架
django-simpleui==2024.4.1         # 后台管理美化
django-cors-headers==4.3.1        # 跨域处理# 数据库
MySQL==8.0                        # 关系型数据库
mysqlclient==2.2.0                # MySQL驱动# AI集成
requests==2.31.0                  # HTTP客户端,用于调用智谱AI
python-decouple==3.8              # 环境变量管理# 其他工具
Pillow==10.1.0                    # 图像处理
前端技术栈
// 核心框架
Vue.js 3.x                        // 渐进式JavaScript框架
Vue Router 4.x                    // 路由管理
Vuex 4.x                          // 状态管理// UI组件库
Element Plus 2.x                  // Vue 3 UI组件库// 样式处理
SCSS                              // CSS预处理器
Axios                             // HTTP客户端// 构建工具
Vue CLI                           // 项目脚手架
数据库设计
-- 主要数据表结构
CREATE TABLE poetry_author (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(100) NOT NULL,dynasty VARCHAR(50),avatar_url TEXT,famous_quotes_count INT DEFAULT 0,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);CREATE TABLE poetry_poetry (id INT PRIMARY KEY AUTO_INCREMENT,title VARCHAR(200) NOT NULL,content TEXT NOT NULL,author_id INT,cipai_id INT,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,FOREIGN KEY (author_id) REFERENCES poetry_author(id),FOREIGN KEY (cipai_id) REFERENCES poetry_cipai(id)
);

系统架构图

展示层
数据层
后端层
前端层
数据可视化
MySQL数据库
智谱AI服务
Django REST API
后台管理
用户界面
Vue.js前端

🚀 核心功能

1. 用户管理系统

用户注册与登录
# users/models.py
class User(AbstractUser):"""自定义用户模型"""avatar = models.ImageField(upload_to='avatars/', null=True, blank=True)bio = models.TextField(max_length=500, blank=True)created_at = models.DateTimeField(auto_now_add=True)class Meta:verbose_name = '用户'verbose_name_plural = '用户'
身份验证
# poetry_system/authentication.py
class SessionAuthentication(authentication.SessionAuthentication):"""自定义会话认证"""def authenticate(self, request):user = getattr(request, 'user', None)if not user or not user.is_active:return Nonereturn (user, None)

2. 诗词数据管理

数据模型设计
# poetry/models.py
class Author(models.Model):"""作者模型"""name = models.CharField(max_length=100, verbose_name='姓名')dynasty = models.CharField(max_length=50, verbose_name='朝代')avatar_url = models.TextField(blank=True, verbose_name='头像URL')famous_quotes_count = models.IntegerField(default=0, verbose_name='名句数量')class Meta:verbose_name = '作者'verbose_name_plural = '作者'ordering = ['-famous_quotes_count']class Poetry(models.Model):"""诗词模型"""title = models.CharField(max_length=200, verbose_name='标题')content = models.TextField(verbose_name='内容')author = models.ForeignKey(Author, on_delete=models.CASCADE, verbose_name='作者')cipai = models.ForeignKey('CiPai', on_delete=models.SET_NULL, null=True, verbose_name='词牌')class Meta:verbose_name = '诗词'verbose_name_plural = '诗词'ordering = ['-id']

3. AI智能写诗

智谱AI集成
# ai_poetry/poem_generator.py
import requests
import jsondef generate_poem_zhipuai(prompt, model_type, line_type):"""调用智谱AI生成诗词"""api_key = "your_zhipuai_api_key"url = "https://open.bigmodel.cn/api/paas/v4/chat/completions"# 根据参数构建提示词if model_type == "Tang":style = "唐诗"elif model_type == "Song":style = "宋词"else:style = "元曲"if line_type == "5":line_style = "五言"else:line_style = "七言"system_prompt = f"你是一位精通{style}的诗人,请根据关键词'{prompt}'创作一首{line_style}{style}。要求:1. 符合{style}的格律要求 2. 意境优美,用词精炼 3. 体现关键词的意境"headers = {"Authorization": f"Bearer {api_key}","Content-Type": "application/json"}data = {"model": "glm-4","messages": [{"role": "system", "content": system_prompt},{"role": "user", "content": f"请以'{prompt}'为主题创作一首{line_style}{style}"}],"temperature": 0.8,"max_tokens": 200}try:response = requests.post(url, headers=headers, json=data)response.raise_for_status()result = response.json()if 'choices' in result and len(result['choices']) > 0:content = result['choices'][0]['message']['content']return {'success': True,'content': content,'model_type': model_type,'line_type': line_type}else:return {'success': False, 'error': 'AI生成失败'}except Exception as e:return {'success': False, 'error': str(e)}
前端AI写诗界面
<!-- frontend/src/views/AiPoetry.vue -->
<template><div class="ai-poetry-container"><div class="hero-section"><h1>AI智能写诗</h1><p>输入关键词,选择体裁,让AI为您创作优美的古诗词</p></div><div class="form-section"><el-form :model="form" label-width="100px"><el-form-item label="关键词"><el-input v-model="form.keywords" placeholder="请输入创作关键词"class="custom-input"/></el-form-item><el-form-item label="诗体类型"><el-select v-model="form.model_type" placeholder="选择诗体"><el-option label="唐诗" value="Tang" /><el-option label="宋词" value="Song" /><el-option label="元曲" value="Yuan" /></el-select></el-form-item><el-form-item label="句式类型"><el-select v-model="form.line_type" placeholder="选择句式"><el-option label="五言" value="5" /><el-option label="七言" value="7" /></el-select></el-form-item><el-form-item><el-button type="primary" @click="generatePoem":loading="loading":disabled="!isLoggedIn">开始创作</el-button></el-form-item></el-form></div><div v-if="result" class="result-section"><h3>创作结果</h3><div class="poem-card"><h4>{{ result.title }}</h4><p class="poem-content">{{ result.content }}</p><div class="poem-meta"><span>体裁:{{ getModelTypeName(form.model_type) }}</span><span>句式:{{ getLineTypeName(form.line_type) }}</span></div></div></div></div>
</template><script>
import axios from 'axios'export default {name: 'AiPoetry',data() {return {form: {keywords: '',model_type: 'Tang',line_type: '7'},result: null,loading: false,isLoggedIn: false}},methods: {async generatePoem() {if (!this.form.keywords.trim()) {this.$message.warning('请输入关键词')return}this.loading = truetry {const response = await axios.post('/api/ai/ai-poems/generate_zhipuai/', {prompt: this.form.keywords,model_type: this.form.model_type,line_type: this.form.line_type}, {withCredentials: true})if (response.data.success) {this.result = {title: this.form.keywords,content: response.data.content}this.$message.success('诗词创作成功!')} else {this.$message.error(response.data.error || '创作失败')}} catch (error) {this.$message.error('网络错误,请稍后重试')} finally {this.loading = false}}}
}
</script>

4. 数据可视化

高频词统计
# poetry/views.py
from collections import Counter
import jiebaclass PoetryAnalysisViewSet(viewsets.ModelViewSet):"""诗词分析视图集"""@action(detail=False, methods=['get'])def word_frequency(self, request):"""获取高频词统计"""# 获取所有诗词内容poems = Poetry.objects.all()all_text = ' '.join([poem.content for poem in poems])# 使用jieba分词words = jieba.cut(all_text)# 过滤停用词和短词stop_words = {'的', '了', '在', '是', '我', '有', '和', '就', '不', '人', '都', '一', '一个', '上', '也', '很', '到', '说', '要', '去', '你', '会', '着', '没有', '看', '好', '自己', '这'}filtered_words = [word for word in words if len(word) > 1 and word not in stop_words]# 统计词频word_count = Counter(filtered_words)top_words = word_count.most_common(50)return Response({'words': [word for word, count in top_words],'counts': [count for word, count in top_words]})
热门作者排行
@action(detail=False, methods=['get'])
def popular_authors(self, request):"""获取热门作者排行"""authors = Author.objects.annotate(poem_count=Count('poetry')).order_by('-poem_count')[:20]return Response({'authors': [author.name for author in authors],'counts': [author.poem_count for author in authors]})

5. 后台管理系统

Django SimpleUI配置
# poetry_system/settings.py
INSTALLED_APPS = ['simpleui',  # 必须在django.contrib.admin之前'django.contrib.admin',# ... 其他应用
]# SimpleUI配置
SIMPLEUI_CONFIG = {'system_keep': False,'menu_display': ['诗词管理', '用户管理', 'AI写诗管理'],'dynamic': True,'menus': [{'name': '诗词管理','icon': 'fas fa-book','models': [{'name': '作者管理','url': 'poetry/author/','icon': 'fas fa-user'},{'name': '诗词管理','url': 'poetry/poetry/','icon': 'fas fa-file-alt'},{'name': '词牌管理','url': 'poetry/cipai/','icon': 'fas fa-tags'}]}]
}

📊 数据可视化展示

词云图示例

[词云图展示区域]
- 唐诗高频词云
- 宋词高频词云
- 元曲高频词云

作者作品统计

[柱状图展示区域]
- 热门作者作品数量排行
- 朝代分布统计
- 词牌使用频率

诗词风格分析

[雷达图展示区域]
- 不同朝代的诗词风格特征
- 作者创作风格对比
- 题材分布分析

🔧 部署与运维

环境要求

# Python环境
Python 3.8+
pip 20.0+# 数据库
MySQL 8.0+# Node.js环境
Node.js 14.0+
npm 6.0+

快速部署

# 1. 克隆项目
git clone https://github.com/your-repo/chinese-poetry-system.git
cd chinese-poetry-system# 2. 安装后端依赖
pip install -r requirements.txt# 3. 配置数据库
python manage.py migrate# 4. 创建超级用户
python manage.py createsuperuser# 5. 安装前端依赖
cd frontend
npm install# 6. 启动服务
# 后端
python manage.py runserver# 前端
npm run serve

Docker部署

# Dockerfile
FROM python:3.9-slimWORKDIR /appCOPY requirements.txt .
RUN pip install -r requirements.txtCOPY . .EXPOSE 8000CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

🎨 项目特色

1. 文化传承与技术创新

  • 结合传统文化与现代技术
  • AI智能创作,让古诗词焕发新活力
  • 数据可视化展示诗词之美

2. 用户体验优化

  • 响应式设计,支持多端访问
  • 直观友好的操作界面
  • 丰富的交互功能

3. 技术架构先进

  • 前后端分离架构
  • RESTful API设计
  • 模块化代码组织

4. 数据安全可靠

  • 完善的用户权限管理
  • 数据备份与恢复机制
  • 安全的API调用

🚧 技术难点与解决方案

1. AI模型集成

难点:本地AI模型部署复杂,资源消耗大

解决方案

  • 采用智谱AI云服务
  • 实现动态提示词构建
  • 完善的错误处理机制
# 错误处理示例
try:response = requests.post(url, headers=headers, json=data, timeout=30)response.raise_for_status()result = response.json()if 'choices' in result and len(result['choices']) > 0:content = result['choices'][0]['message']['content']return {'success': True, 'content': content}else:return {'success': False, 'error': 'AI生成失败'}except requests.exceptions.Timeout:return {'success': False, 'error': '请求超时'}
except requests.exceptions.RequestException as e:return {'success': False, 'error': f'网络错误: {str(e)}'}
except Exception as e:return {'success': False, 'error': f'未知错误: {str(e)}'}

2. 跨域认证问题

难点:前后端分离架构下的会话认证

解决方案

# settings.py
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOWED_ORIGINS = ["http://localhost:8080","http://127.0.0.1:8080",
]# 前端配置
axios.defaults.withCredentials = true

3. 数据可视化性能

难点:大量诗词数据的实时分析

解决方案

  • 使用缓存机制
  • 异步处理大数据
  • 分页加载优化

🔮 未来规划

短期目标(3-6个月)

  • 增加更多AI模型支持
  • 优化移动端体验
  • 增加诗词朗读功能
  • 完善用户反馈系统

中期目标(6-12个月)

  • 开发诗词创作社区
  • 增加诗词翻译功能
  • 支持多语言界面
  • 开发移动端APP

长期目标(1年以上)

  • 构建诗词知识图谱
  • 开发智能推荐系统
  • 建立诗词创作比赛平台
  • 拓展到其他文学体裁

📁 项目目录结构

chinese-poetry-master/
├── poetry_system/          # Django项目配置与入口(settings/urls/asgi/wsgi)
├── poetry/                 # 诗词模块:模型、序列化、视图、路由
├── ai_poetry/              # AI写诗模块:智谱AI集成与生成接口
├── users/                  # 用户模块:注册/登录/资料
├── frontend/               # Vue3前端:页面、组件、路由、状态、样式
├── data/                   # 原始数据:唐诗/宋诗/元曲/五代/千家诗等
├── spider/                 # 爬虫脚本:作者/词牌抓取
├── spider_output/          # 爬虫输出
├── static/                 # 静态资源:logo/截图/可视化图片
├── images/                 # 其他图片资源(支付等)
├── requirements.txt        # 后端依赖
├── start_system.bat        # 一键启动(Windows)
└── README.md               # 项目说明

🧭 API索引(已实现)

  • 基础说明:所有接口基于REST风格,统一前缀与路由如下
    • 后端主路由:poetry_system/urls.py
    • 统一前缀:
      • 诗词模块:/api/poetry/
      • 用户模块:/api/users/
      • AI模块:/api/ai/

1) AI写诗模块 ai_poetry/urls.py

  • POST /api/ai/ai-poems/generate_zhipuai/:生成诗词(参数:promptmodel_typeline_type
  • GET /api/ai/ai-poems/:AI生成诗词列表
  • GET /api/ai/ai-poems/{id}/:AI生成诗词详情
  • GET /api/ai/configs/:生成配置列表
  • GET /api/ai/configs/active/:获取激活配置

2) 诗词模块 poetry/urls.py

  • GET /api/poetry/:诗词列表(支持searchordering、分页)
  • GET /api/poetry/{id}/:诗词详情
  • GET /api/poetry/random/?count=10:随机诗词
  • GET /api/poetry/popular/:热门诗词
  • GET /api/poetry/authors/:作者列表
  • GET /api/poetry/authors/hot/:热门作者
  • GET /api/poetry/cipai/:词牌列表
  • GET /api/poetry/comments/?poetry_id={id}:评论列表
  • POST /api/poetry/comments/add/:新增评论(需登录)
  • GET /api/poetry/favorites/:我的收藏(需登录)
  • POST /api/poetry/favorites/toggle/:收藏/取消收藏(需登录)
  • GET /api/poetry/dynasties/:朝代列表
  • GET /api/poetry/categories/:分类列表
  • GET /api/poetry/chart_data/:数据概览(用于可视化)
  • GET /api/poetry/analysis/{poetry_id}/:单篇诗词深度分析
  • GET /api/poetry/authors/{author_id}/works/:某作者作品
  • GET /api/poetry/dynasty_stats/:朝代统计
  • GET /api/poetry/word_frequency/:高频词统计(支持按朝代/作者筛选)

3) 用户模块 users/urls.py

  • POST /api/users/register/:注册
  • POST /api/users/login/:登录(会话)
  • POST /api/users/logout/:退出
  • GET /api/users/profile/:个人资料
  • POST /api/users/profile/update/:更新资料

提示:部分接口需登录;前端需设置 axioswithCredentials: true;后端需开启 CORS_ALLOW_CREDENTIALS=True 并设置白名单。

❓ 常见问题FAQ

  • 401未授权(已登录仍提示未登录)
    • 后端:CORS_ALLOW_ALL_ORIGINS=False、配置 CORS_ALLOWED_ORIGINSCORS_ALLOW_CREDENTIALS=True
    • 前端:所有请求添加 { withCredentials: true }
  • AI返回结构解析失败(取不到data
    • 智谱AI返回在choices[0].message.content,不是data字段
  • 管理后台访问404或权限问题
    • 使用自定义AdminSite:访问 http://localhost:8000/admin/
    • 确保注册了 GroupPermission 模型到自定义站点
  • Element Plus 输入框样式不一致
    • 使用 ::v-deep 覆盖内层 .el-input__inner 背景、边框、阴影
  • 分页总数与前端展示不一致
    • 前端走后端分页参数:pagepage_size;后端用DRF分页器或自定义分页

🧠 最佳实践与总结

  • 配置管理:敏感信息使用环境变量(如 ZHIPUAI_API_KEY
  • 会话认证:统一使用Session Auth,前端全局withCredentials
  • API一致性:保持请求参数与返回结构稳定,定义统一的错误码/消息
  • 可视化性能:聚合统计尽量在后端完成,前端只做渲染
  • AI提示词工程:根据体裁/句式动态拼装Prompt并限制max_tokens
  • 数据质量:导入前做去重、清洗;字符集统一使用utf8mb4
  • 前端UX:表单与搜索框样式统一,分页置底居中;移动端适配
  • 日志与排错:后端统一日志;关键路径加监控(AI调用、收藏/评论)

📞 联系方式

  • 各大平台同名:码界筑梦坊
  • 欢迎在任一平台私信/留言交流合作与技术问题

🙏 致谢

  • 开源社区与数据集贡献者
  • 智谱AI开放平台(GLM系列)
  • Django / DRF / Vue3 / Element Plus / ECharts 等优秀开源项目
  • 参与测试与反馈的每一位同学

📚 参考资料

  1. Django官方文档
  2. Vue.js官方文档
  3. 智谱AI开放平台
  4. Element Plus组件库
  5. MySQL官方文档

感谢阅读!如果本文对您有帮助,请给个⭐️支持一下!

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

相关文章:

  • 第二章:变量与简单数据类型
  • JVM管理数据的方式
  • 深入解析Prompt缓存机制:原理、优化与最佳实践
  • k8s之CSI 卷挂载问题:同一Pod中挂载多个相同远程存储的隐含限制
  • 2025面试题——(12)
  • Vue3从入门到精通:3.1 性能优化策略深度解析
  • 思科交换机的不同级别IOS软件有什么区别?
  • android 换肤框架详解1-换肤逻辑基本
  • R语言机器学习算法实战系列(二十七)LASSO 与 Adaptive LASSO 在特征选择中的比较与应用
  • 为什么TEXT不区分大小写,而BLOB严格区分?
  • 剑桥大学最新研究:基于大语言模型(LLM)的分子动力学模拟框架,是MD的GPT时刻还是概念包装?
  • Selenium竞品价格监控爬虫(代理防封版)
  • C语言模拟 MCU 上电后程序的执行顺序 + 回调函数机制 + 程序计数器(PC)和堆栈的作用
  • PID 控制算法 | stm32 直流电机控制
  • 从零开始的云计算生活——项目实战容器化
  • 当生产环境卡成 PPT:Spring Boot 线程 Dump 捉妖指南 - 第544篇
  • AI入门学习--如何写好prompt?
  • STM32学习笔记7-TIM输入捕获模式
  • 1000w小时语音数据!语音模型Higgs Audio V2情感能力跃迁;MathCaptcha10k提升验证码识别技术
  • 主DNS部署+辅助DNS服务器部署
  • 嵌入式学习(Day24)fread/fwrite
  • 【华为机试】208. 实现 Trie (前缀树)
  • 钓鱼鱼饵制作的方式
  • 【项目测试】:问卷考试系统项目测试报告
  • FlinkSql(详细讲解一)
  • C#中如何运用JWT用户认证
  • AT24C02C-SSHM-T用法
  • 什么情况下会导致日本服务器变慢?解决办法
  • 系统编程——消息队列
  • 前端实现 MD5 + AES 加密的安全登录请求