1. 项目背景与核心功能定位
在数字化阅读日益普及的今天,传统文化爱好者却面临着一个尴尬的现状:古诗词创作与分享缺乏专业的线上平台。大多数文学网站要么过于泛化,要么交互体验陈旧。这正是我们开发"中国古诗词原创文学学习投稿平台"的初衷——用现代技术为传统文化赋能。
这个基于SpringBoot+Vue的全栈项目,本质上是一个垂直领域的UGC(用户生成内容)平台,核心功能模块包括:
- 多角色权限体系(游客、投稿人、编辑、管理员)
- 在线创作与富文本编辑(支持格律校验)
- 作品投稿与审核流程
- 诗词学习资料库
- 社区互动与评论系统
- 电子杂志在线阅览
技术选型思考:为什么没有选择PHP+WordPress这类传统方案?因为Java生态的稳定性更适合文化类平台的长期运营,而Vue的响应式特性能够完美呈现诗词的排版美感。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构设计与实现
2.1 后端SpringBoot核心配置
采用多模块Maven项目结构,关键依赖包括:
xml复制<!-- 核心框架 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 数据库相关 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3</version>
</dependency>
<!-- 特色功能 -->
<dependency>
<groupId>com.hankcs</groupId>
<artifactId>hanlp</artifactId>
<version>portable-1.8.4</version>
</dependency>
数据库设计要点:
- 诗词表包含特殊字段:体裁(五绝/七律等)、平仄模板、押韵要求
- 采用JSON类型存储批注信息
- 建立全文索引优化检索效率
2.2 前端Vue特色实现
针对诗词展示的特殊需求,我们开发了这些组件:
vue复制<template>
<div class="poem-container" :style="{fontFamily: fontType}">
<div v-for="(line, index) in poemLines"
:key="index"
class="poem-line"
:class="{'highlight-rhyme': isRhyme(index)}">
{{ line }}
</div>
</div>
</template>
<script>
export default {
props: {
content: String,
rhymePositions: Array
},
computed: {
poemLines() {
return this.content.split('\\n')
}
},
methods: {
isRhyme(index) {
return this.rhymePositions.includes(index)
}
}
}
</script>
3. 核心业务逻辑实现
3.1 诗词格律校验算法
利用HanLP分词结合自定义规则引擎:
java复制public class MetricalValidator {
private static final Map<String, String> PATTERNS = Map.of(
"五绝仄起", "仄仄平平仄,平平仄仄平。平平平仄仄,仄仄仄平平。",
"七律平起", "平平仄仄平平仄,仄仄平平仄仄平..."
);
public ValidationResult validate(String poemText, String poemType) {
List<Term> terms = HanLP.segment(poemText);
String actualPattern = buildActualPattern(terms);
return new ValidationResult(
PATTERNS.get(poemType).equals(actualPattern),
findWrongPositions(PATTERNS.get(poemType), actualPattern)
);
}
}
3.2 投稿流程状态机
采用Spring State Machine实现多级审核:
java复制@Configuration
@EnableStateMachineFactory
public class SubmissionStateMachineConfig
extends EnumStateMachineConfigurerAdapter<States, Events> {
@Override
public void configure(StateMachineStateConfigurer<States, Events> states)
throws Exception {
states
.withStates()
.initial(States.DRAFT)
.state(States.EDITOR_REVIEW)
.state(States.CHIEF_EDITOR_REVIEW)
.end(States.PUBLISHED)
.end(States.REJECTED);
}
}
4. 特色功能深度解析
4.1 智能推荐系统实现
基于内容的推荐算法:
- 使用TF-IDF提取诗词特征向量
- 计算余弦相似度矩阵
- 结合用户行为数据加权
python复制# 伪代码示例
def recommend_poems(user):
history = get_user_history(user.id)
if not history:
return popular_poems()
tfidf = TfidfVectorizer(tokenizer=classical_tokenizer)
matrix = tfidf.fit_transform(all_poems)
user_vector = average_vectors(history, matrix)
similarities = cosine_similarity(user_vector, matrix)
return sort_by_similarity(similarities)[:10]
4.2 在线协作批注功能
采用Operational Transformation算法解决并发编辑冲突:
- 每个操作赋予唯一ID和时间戳
- 服务端维护操作历史队列
- 客户端同步时进行操作转换
前端使用Quill富文本编辑器定制模块:
javascript复制quill.register('modules/annotation', function(quill, options) {
quill.on('text-change', (delta, oldDelta, source) => {
if (source === 'user') {
socket.emit('text-edit', {
clientId: clientId,
operations: delta.ops
});
}
});
});
5. 性能优化实践
5.1 诗词检索加速方案
传统LIKE查询存在的问题:
- 无法利用索引
- 不支持分词搜索
- 性能随数据量下降明显
我们的解决方案:
- 使用MySQL全文索引 + HanLP分词
- 建立专门的搜索词表
- 引入Redis缓存热门搜索
sql复制-- 创建全文索引
ALTER TABLE poems
ADD FULLTEXT INDEX ft_content (title, content)
WITH PARSER ngram;
5.2 前端渲染性能优化
针对长诗列表的解决方案:
- 虚拟滚动技术
- 按需加载图片
- Web Worker处理格律分析
javascript复制// 使用vue-virtual-scroller
<RecycleScroller
class="scroller"
:items="poems"
:item-size="72"
key-field="id"
v-slot="{ item }"
>
<PoemCard :poem="item" />
</RecycleScroller>
6. 部署与运维实践
6.1 容器化部署方案
Docker Compose编排文件关键配置:
yaml复制version: '3.8'
services:
backend:
build: ./springboot-backend
ports:
- "8080:8080"
environment:
- SPRING_PROFILES_ACTIVE=prod
depends_on:
- db
- redis
frontend:
build: ./vue-frontend
ports:
- "80:80"
db:
image: mysql:8.0
volumes:
- db_data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=secret
- MYSQL_DATABASE=poetry
redis:
image: redis:alpine
6.2 监控与日志收集
ELK技术栈配置要点:
- Filebeat收集SpringBoot日志
- Logstash过滤处理
- Kibana展示仪表盘
关键日志字段:
- 用户操作日志(投稿、评论等)
- 性能指标(响应时间、SQL耗时)
- 异常堆栈信息
7. 项目演进方向
7.1 AI辅助创作功能
正在实验的功能:
- 格律建议:实时提示平仄错误
- 韵脚推荐:根据上下文推荐合适韵脚
- 意境分析:通过NLP评估诗词情感走向
技术路线:
mermaid复制graph LR
A[用户输入] --> B(HanLP分词)
B --> C[格律分析]
B --> D[情感分析]
C --> E[平仄建议]
D --> F[意象推荐]
7.2 移动端适配方案
跨平台开发选择:
- 微信小程序:利用WebView嵌入核心功能
- Uni-app:一套代码多端发布
- Flutter:高性能原生体验
字体渲染特别处理:
- 使用手写风格字体
- 动态字号调整
- 竖排阅读模式
在持续三个月的实际运营中,平台累计收到了1200+首原创诗词投稿,其中通过审核发布的有800余首。最令人惊喜的是,有7位作者通过这个平台出版了个人诗集。技术层面上,我们经历了三次大的架构调整:第一次是引入Redis缓解春节期间的流量高峰,第二次是重写格律校验算法提升准确率,第三次是增加AI辅助功能后的GPU服务器扩容。每次升级都让我更深刻地理解到:技术只是手段,真正的价值在于为传统文化爱好者搭建起这座数字桥梁。
