1. 项目概述:基于Django与DeepSeek的古诗词智能分析系统
这个毕业设计项目融合了现代Web开发框架与大语言模型技术,构建了一个功能完整的古诗词智能分析平台。系统以Django作为后端框架,整合DeepSeek大模型的NLP能力,实现了从古诗词情感分析到个性化推荐的全流程处理。知识图谱技术的引入,则为古诗词间的关系挖掘提供了结构化表示方式。
项目最核心的价值在于将传统文学研究与前沿AI技术相结合。通过情感分析算法,我们可以量化解读古诗词中的情感倾向;知识图谱构建技术则揭示了诗人、朝代、题材间的复杂关联;而可视化界面让这些分析结果直观呈现。整套系统不仅具有学术研究价值,也能为古诗词爱好者提供全新的阅读体验。
从技术架构看,项目涉及三大关键模块:基于Django的Web应用框架负责业务逻辑处理和前端展示;DeepSeek大模型提供诗词理解和分析能力;Neo4j等图数据库则存储和查询知识图谱数据。这种组合既保证了系统的扩展性,也确保了处理复杂NLP任务时的准确性。
2. 系统架构设计与技术选型
2.1 整体架构设计
系统采用典型的三层架构设计,分为表现层、业务逻辑层和数据层。表现层使用Django模板引擎结合ECharts等可视化库,实现数据的前端展示;业务逻辑层包含核心的情感分析、推荐算法和知识图谱构建模块;数据层则整合了关系型数据库(MySQL)和图数据库(Neo4j),分别存储结构化数据和图谱关系。
这种分层设计的主要考虑是:
- 解耦各功能模块,便于后期维护和扩展
- 充分发挥不同类型数据库的优势
- 平衡系统性能和开发效率
2.2 关键技术选型分析
Django框架的选择基于以下几个因素:
- 自带ORM系统,简化数据库操作
- 完善的Admin后台,适合快速开发
- 丰富的第三方插件生态
- 清晰的MVC架构,适合团队协作
DeepSeek大模型相比其他开源模型具有以下优势:
- 对中文文本特别是古文有更好的理解能力
- API接口稳定,响应速度快
- 支持细粒度的情感分析任务
- 知识抽取能力较强
Neo4j图数据库在知识图谱存储方面表现突出:
- 直观的图数据模型
- 高效的关联查询性能
- Cypher查询语言适合关系挖掘
- 与Python生态集成良好
提示:在实际部署时,建议使用Django的缓存框架对频繁访问的图谱数据进行缓存,可以显著提升系统响应速度。
3. 核心功能实现细节
3.1 古诗词情感分析模块
情感分析是本项目的核心技术之一,其实现流程如下:
数据预处理:
- 去除标点、停用词
- 古文分词处理
- 词性标注
- 命名实体识别
情感特征提取:
def extract_sentiment_features(text): # 使用DeepSeek API获取基础情感得分 base_score = deepseek.sentiment_analysis(text)['score'] # 自定义特征提取 positive_words = count_matching_words(text, POSITIVE_LEXICON) negative_words = count_matching_words(text, NEGATIVE_LEXICON) rhetorical_devices = detect_rhetorical_devices(text) # 特征组合 combined_score = base_score * 0.6 + (positive_words - negative_words) * 0.3 + rhetorical_devices * 0.1 return normalize_score(combined_score)- 情感维度划分: 我们采用二维情感模型,将诗词情感划分为:
- 愉悦度(Valence):正向/负向情感强度
- 激活度(Arousal):情感表达的强烈程度
3.2 知识图谱构建流程
知识图谱构建是本项目的另一核心技术,主要步骤包括:
实体识别与抽取:
- 诗人实体
- 朝代实体
- 地点实体
- 意象实体(如"月亮"、"杨柳"等)
- 情感标签实体
关系类型定义:
关系类型 说明 示例 CREATED_BY 诗词创作关系 《静夜思》-CREATED_BY->李白 BELONGS_TO 朝代归属关系 李白-BELONGS_TO->唐代 CONTAINS_IMAGE 包含意象关系 《静夜思》-CONTAINS_IMAGE->月亮 EXPRESSES 情感表达关系 《静夜思》-EXPRESSES->思乡 图谱存储与查询: 使用Neo4j的Cypher查询语言进行数据操作:
// 查询表达特定情感的诗词 MATCH (p:Poem)-[r:EXPRESSES]->(s:Sentiment) WHERE s.name = '思乡' RETURN p.title, p.author ORDER BY r.strength DESC LIMIT 103.3 推荐系统实现
推荐算法结合了协同过滤和内容相似度两种方法:
基于用户的协同过滤:
- 构建用户-诗词评分矩阵
- 计算用户相似度
- 生成推荐列表
基于内容的推荐:
- 提取诗词特征向量(情感、意象、朝代等)
- 计算余弦相似度
- 获取最相似诗词
混合推荐策略:
def hybrid_recommend(user_id, poem_id, alpha=0.7): cf_score = collaborative_filtering(user_id, poem_id) cb_score = content_based(poem_id) # 加权混合 final_score = alpha * cf_score + (1 - alpha) * cb_score return final_score4. 可视化展示方案
4.1 情感分布可视化
使用ECharts实现多维情感数据的可视化展示:
- 情感雷达图:展示单首诗词在不同情感维度上的得分
- 散点矩阵图:呈现诗词集合在愉悦度-激活度二维空间中的分布
- 时间趋势图:分析特定情感随历史朝代的变化趋势
4.2 知识图谱可视化
采用以下两种方式展示知识图谱:
力导向图:直观展示实体间的关系网络
- 节点大小表示实体重要性
- 边粗细表示关系强度
- 颜色区分实体类型
Sunburst旭日图:层次化展示诗词分类体系
- 第一层:朝代
- 第二层:诗人
- 第三层:诗词作品
5. 系统部署与性能优化
5.1 部署架构
建议采用以下生产环境部署方案:
+-----------------+ | Nginx (SSL) | +--------+--------+ | +--------v--------+ | Gunicorn | | Django App | +--------+--------+ | +------------------+------------------+ | | | +--------v--------+ +-------v-------+ +--------v--------+ | MySQL | | Neo4j | | Redis | | (结构化数据) | | (知识图谱) | | (缓存) | +-----------------+ +---------------+ +-----------------+5.2 性能优化技巧
数据库优化:
- 为频繁查询的字段建立索引
- 使用select_related和prefetch_related减少DB查询
- 分页加载大量数据
缓存策略:
- 使用Redis缓存热点数据
- 实现视图级缓存
- 设置合理的缓存过期时间
异步任务:
- 将耗时的分析任务放入Celery队列
- 使用WebSocket推送任务结果
6. 常见问题与解决方案
6.1 DeepSeek API调用问题
问题1:API响应速度慢
- 解决方案:实现本地缓存机制,对相同文本的重复请求直接返回缓存结果
问题2:古文理解不准确
- 解决方案:构建领域特定的Prompt模板,明确指定分析任务和要求
def analyze_poem(poem_text): prompt = f""" 这是一首古诗词分析任务,请严格按照要求执行: 1. 识别诗词中的主要意象 2. 分析诗词表达的情感倾向 3. 情感分析结果请用0-1之间的数值表示 诗词内容:{poem_text} """ return deepseek.completion(prompt)6.2 知识图谱构建挑战
问题:实体歧义(如"李白"既指诗人也可能指酒名)
- 解决方案:
- 基于上下文消歧
- 构建领域实体白名单
- 人工校验关键实体
6.3 推荐系统冷启动
问题:新用户/新诗词缺乏历史数据
- 解决方案:
- 基于内容的推荐作为兜底策略
- 收集显式用户反馈(评分/收藏)
- 利用人口统计学信息分组推荐
7. 项目扩展方向
在实际开发过程中,可以考虑以下几个扩展方向:
- 多模态分析:引入书法、绘画等关联艺术作品,构建更丰富的文化知识图谱
- 时空可视化:在地图上展示诗词创作地点,结合时间轴呈现文学传播路径
- 社交功能:允许用户创建诗集、分享解读,形成社区互动
- 教育应用:开发基于知识图谱的智能问答系统,辅助古诗文教学
这个项目最让我印象深刻的是知识图谱与情感分析的结合方式。通过将抽象的情感标签实体化并纳入图谱,我们能够发现许多有趣的模式,比如特定意象与情感倾向的关联规律。在实际操作中,合理设置关系权重对推荐质量影响很大,需要多次调整测试才能获得理想效果。