ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

基于SpringBoot和大数据的诗词信息系统设计与实现

基于SpringBoot和大数据的诗词信息系统设计与实现 1. 项目背景与核心价值在当今这个数据爆炸的时代传统文化遗产的数字化保存与智能化应用正面临前所未有的机遇。诗词作为中华文明的瑰宝其数据量正以每年数百万首的速度增长。传统的人工整理方式已经难以应对这种规模的数据处理需求这正是我们开发基于SpringBoot和大数据技术的诗词信息系统的初衷。这个毕业设计项目的核心价值在于实现了古典诗词的现代化存储与检索运用大数据技术挖掘诗词间的潜在关联为研究者提供智能化的分析工具让普通用户也能享受精准的诗词推荐服务我选择SpringBoot作为基础框架主要是看中其约定优于配置的特性。在开发过程中自动配置功能帮我节省了至少40%的Spring相关配置时间这让作为学生的我能更专注于业务逻辑的实现。2. 系统架构设计2.1 技术栈选型整个系统采用分层架构设计各层技术选型如下层级技术组件选型理由前端Vue.js ElementUI组件化开发效率高适合快速迭代后端SpringBoot 2.7.3简化配置内置Tomcat快速启动数据处理Hadoop 3.3.4 Spark 3.2.1成熟的大数据生态社区支持好数据库MySQL 8.0 Elasticsearch 7.17关系型与非关系型结合各取所长分词工具HanLP 1.8.4对古汉语分词准确率高达92%提示选择SpringBoot 2.x而非3.x版本是因为目前大多数大数据组件对Java 17的兼容性还不够完善2.x版本更稳定。2.2 数据流设计系统的核心数据处理流程分为四个阶段数据采集层通过爬虫从权威诗词网站获取原始数据每天定时增量更新数据清洗层使用Spark进行ETL处理包括去除HTML标签等噪声数据标准化作者名称如李白与李太白统一补全朝代信息分析存储层热数据存入MySQL供实时查询全量数据进入HDFS供批量分析建立Elasticsearch倒排索引提升搜索速度应用服务层提供RESTful API给前端调用3. 核心功能实现3.1 智能分词与标签生成诗词分析的核心难点在于古汉语的特殊性。我们采用改进的HanLP分词器专门针对诗词特点做了优化// 自定义词典加载 CustomDictionary.add(长安, ns 1000); CustomDictionary.add(杨柳岸, nz 1000); // 分词示例 ListTerm terms HanLP.segment(杨柳岸晓风残月); // 输出[杨柳岸/nz, 晓风/n, 残月/n]通过统计词频和TF-IDF算法系统会自动为每首诗词生成标签。比如李清照《声声慢》会被标记为愁绪、黄昏、梧桐、细雨等关键词。3.2 关联推荐算法基于Spark MLlib实现了三种推荐模式内容相似推荐使用Word2Vec计算诗词向量相似度用户行为推荐基于协同过滤的ALS算法时空关联推荐同一作者/朝代的诗词聚类// Spark示例计算诗词相似度 val word2Vec new Word2Vec() .setInputCol(segmentedText) .setOutputCol(vector) .setVectorSize(100) val model word2Vec.fit(poemDF)3.3 大数据可视化利用ECharts实现多维度的数据展示诗人创作时间分布热力图词牌名使用频率旭日图情感倾向雷达图通过情感词典分析4. 开发实战经验4.1 环境搭建避坑指南在Hadoop环境配置时我遇到过几个典型问题内存溢出建议修改Hadoop的JVM参数!-- hadoop-env.sh -- export HADOOP_HEAPSIZE_MAX2048mWindows开发问题需要winutils.exe支持建议直接使用WSL2开发端口冲突Hadoop默认使用8020/9000等端口需检查是否被占用4.2 SpringBoot集成技巧多数据源配置通过AbstractRoutingDataSource实现MySQL和ES的动态切换Bean Primary public DataSource routingDataSource() { MapObject, Object targetDataSources new HashMap(); targetDataSources.put(mysql, mysqlDataSource()); targetDataSources.put(es, esDataSource()); // ... }异步处理使用Async注解提升批量导入性能Async(taskExecutor) public void batchImport(ListPoem poems) { // 耗时操作 }接口文档Swagger配置需要排除监控端点Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .ignoredParameterTypes(Principal.class) .select() .apis(RequestHandlerSelectors.basePackage(com.poem)) .build(); }5. 项目部署与优化5.1 集群部署方案针对学生毕设的硬件限制我设计了一套最小化集群方案节点类型配置要求数量备注Master4核/8GB/100GB1兼作Namenode和ResourceManagerWorker2核/4GB/50GB2DataNode和NodeManagerEdge2核/4GB1网关和开发机注意实际部署时发现Zookeeper需要奇数节点因此又增加了一个仲裁节点。5.2 性能调优记录通过JProfiler分析发现两个性能瓶颈诗词搜索响应慢通过给Elasticsearch增加分片数解决PUT /poems { settings: { number_of_shards: 5, number_of_replicas: 1 } }批量导入卡顿调整Spark的并行度参数spark.conf.set(spark.default.parallelism, 100) spark.conf.set(spark.sql.shuffle.partitions, 100)6. 项目扩展方向在基础功能完成后可以考虑以下几个深化方向知识图谱构建使用Neo4j建立诗人-地点-事件的关联网络风格模仿创作基于LSTM生成符合特定诗人风格的诗词多模态检索支持以图搜诗查询风景图匹配相关诗词移动端适配开发微信小程序版本我在实现知识图谱时有个有趣的发现通过分析杜甫的诗作可以清晰看到他的人生轨迹——从早期的会当凌绝顶到后期的国破山河在地理坐标的变化与诗风转变高度吻合。这种时空分析正是大数据技术的独特价值所在。
返回列表