简历与岗位要求相似度分析系统
一、系统概述
本系统是一个基于 NLP(自然语言处理)技术的简历与岗位匹配分析平台,采用 TF-IDF 算法提取关键词,结合余弦相似度计算文本相似度,按多维度加权评估简历与岗位的匹配程度。
页面展示:



二、技术栈
2.1 后端技术
| 技术 |
版本 |
说明 |
| Java |
17+ |
主开发语言,支持新特性 |
| Spring Boot |
3.2.0 |
微服务框架,简化配置 |
| MyBatis-Plus |
3.5.5 |
ORM框架,简化数据库操作 |
| MySQL |
8.0+ |
关系型数据库 |
| HanLP |
1.8.4 |
中文自然语言处理工具包 |
| Knife4j |
4.3.0 |
API文档工具(OpenAPI 3) |
| Lombok |
- |
简化Java代码 |
| HikariCP |
- |
高性能数据库连接池 |
2.2 前端技术
| 技术 |
版本 |
说明 |
| Vue.js |
3.4 |
渐进式JavaScript框架 |
| Vite |
5.0 |
下一代前端构建工具 |
| Element Plus |
2.4 |
Vue 3 UI组件库 |
| Vue Router |
4.2 |
官方路由管理器 |
| Pinia |
2.1 |
新一代状态管理库 |
| Axios |
1.6 |
HTTP客户端 |
| Sass |
1.69 |
CSS预处理器 |
2.3 核心算法
| 算法 |
用途 |
| TF-IDF |
词频-逆文档频率,提取文本关键词及权重 |
| 余弦相似度 |
计算文档向量间的相似程度 |
| HanLP分词 |
中文分词、词性标注、关键词提取 |
三、系统架构图
3.1 整体架构
复制代码
┌─────────────────────────────────────────────────────────────────────────────┐
│ 用户层 (User Layer) │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 浏览器 │ │ 移动端 │ │ API调用 │ │
│ │ (Chrome) │ │ (H5/App) │ │ (第三方) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
└───────────┼──────────────────┼──────────────────┼──────────────────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ 前端层 (Frontend Layer) │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ Vue 3 + Vite │ │
│ ├───────────────────────────────────────────────────────────────────┤ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌──────────┐ │ │
│ │ │ Vue Router │ │ Pinia │ │ Axios │ │ Element │ │ │
│ │ │ 路由管理 │ │ 状态管理 │ │ HTTP请求 │ │ Plus UI │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ └──────────┘ │ │
│ └───────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
│
│ HTTP/HTTPS (RESTful API)
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ 后端层 (Backend Layer) │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ Spring Boot 3.2.0 │ │
│ ├───────────────────────────────────────────────────────────────────┤ │
│ │ │ │
│ │ ┌─────────────────────────────────────────────────────────────┐ │ │
│ │ │ Controller 层 │ │ │
│ │ │ ┌──────────────────┐ ┌──────────────────────────────┐ │ │ │
│ │ │ │ AuthController │ │ SimilarityController │ │ │ │
│ │ │ │ 用户认证 │ │ 相似度分析 │ │ │ │
│ │ │ └──────────────────┘ └──────────────────────────────┘ │ │ │
│ │ └─────────────────────────────────────────────────────────────┘ │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ ┌─────────────────────────────────────────────────────────────┐ │ │
│ │ │ Service 层 │ │ │
│ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │
│ │ │ │ SimilarityServiceImpl │ │ │ │
│ │ │ │ • 多维度文本提取 • TF-IDF向量计算 │ │ │ │
│ │ │ │ • 余弦相似度计算 • 加权得分汇总 │ │ │ │
│ │ │ └──────────────────────────────────────────────────────┘ │ │ │
│ │ └─────────────────────────────────────────────────────────────┘ │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ ┌─────────────────────────────────────────────────────────────┐ │ │
│ │ │ Util 层 │ │ │
│ │ │ ┌────────────────┐ ┌────────────────┐ ┌────────────────┐ │ │ │
│ │ │ │ TfIdfCalculator│ │CosineSimilarity│ │TextProcessorUtil│ │ │ │
│ │ │ │ TF-IDF算法 │ │ 余弦相似度 │ │ 文本预处理 │ │ │ │
│ │ │ └────────────────┘ └────────────────┘ └────────────────┘ │ │ │
│ │ └─────────────────────────────────────────────────────────────┘ │ │
│ │ │ │
│ └───────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
│
│ JDBC (MyBatis-Plus)
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ 数据层 (Data Layer) │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ MySQL 8.0 │ │
│ ├───────────────────────────────────────────────────────────────────┤ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────────┐ ┌─────────────────┐ │ │
│ │ │ sys_user │ │ resume │ │job_requirement│ │ analysis_record │ │ │
│ │ │ 用户表 │ │ 简历表 │ │ 岗位要求表 │ │ 分析记录表 │ │ │
│ │ └──────────┘ └──────────┘ └──────────────┘ └─────────────────┘ │ │
│ └───────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
3.2 核心算法流程
复制代码
┌─────────────────────────────────────────────────────────────────────────────┐
│ 相似度分析流程 │
└─────────────────────────────────────────────────────────────────────────────┘
┌──────────────┐ ┌──────────────┐
│ 简历文本 │ │ 岗位要求文本 │
└──────┬───────┘ └───────┬──────┘
│ │
▼ ▼
┌──────────────────────────────────────────────────────────┐
│ 1. 文本预处理 │
│ ┌────────────┐ ┌────────────┐ ┌────────────────────┐ │
│ │ 清洗文本 │→│ HanLP分词 │→│ 去停用词/过滤噪声 │ │
│ └────────────┘ └────────────┘ └────────────────────┘ │
└──────────────────────────┬───────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────┐
│ 2. 多维度关键词提取 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 技能提取 │ │ 经验提取 │ │ 学历提取 │ │ 专业提取 │ │
│ │ (40%) │ │ (30%) │ │ (15%) │ │ (15%) │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
└───────┼─────────────┼─────────────┼─────────────┼────────┘
│ │ │ │
▼ ▼ ▼ ▼
┌──────────────────────────────────────────────────────────┐
│ 3. TF-IDF 向量化 │
│ │
│ TF = 词频 / 总词数 │
│ IDF = log(文档总数 / (包含该词的文档数 + 1)) + 1 │
│ TF-IDF = TF × IDF │
│ │
│ 简历向量: [w1, w2, w3, ..., wn] │
│ 岗位向量: [v1, v2, v3, ..., vn] │
└──────────────────────────┬───────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────┐
│ 4. 余弦相似度计算 │
│ │
│ A · B │
│ cos(θ) = ───────────────────── │
│ ║A║ × ║B║ │
│ │
│ 各维度相似度: skill_sim, exp_sim, edu_sim, major_sim │
└──────────────────────────┬───────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────┐
│ 5. 加权汇总 │
│ │
│ 总分 = skill_sim × 0.4 + exp_sim × 0.3 │
│ + edu_sim × 0.15 + major_sim × 0.15 │
│ │
└──────────────────────────┬───────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────┐
│ 6. 结果输出 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 总分 │ │ 各维度分 │ │ 匹配词 │ │ 建议 │ │
│ │ 0-100分 │ │ 详情 │ │ 列表 │ │ 文本 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└──────────────────────────────────────────────────────────┘
3.3 前端页面结构
复制代码
┌─────────────────────────────────────────────────────────────────────────────┐
│ 前端页面结构 │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────┐
│ App.vue │
│ (根组件) │
└────────┬────────┘
│
┌──────────────────┼──────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Login.vue │ │ Layout.vue │ │ 404.vue │
│ 登录页面 │ │ 主布局 │ │ 错误页面 │
└─────────────────┘ └────────┬────────┘ └─────────────────┘
│
┌─────────────┴─────────────┐
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ Analysis.vue │ │ History.vue │
│ 简历分析页面 │ │ 历史记录页面 │
└─────────────────┘ └─────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ 状态管理 (Pinia) │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ user.js │ │
│ │ • token: 用户令牌 │ │
│ │ • userInfo: 用户信息 │ │
│ │ • login(): 登录方法 │ │
│ │ • logout(): 登出方法 │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
3.4 API 接口设计
复制代码
┌─────────────────────────────────────────────────────────────────────────────┐
│ RESTful API 设计 │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ 认证模块 /api/v1/auth │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ POST /login 用户登录,返回Token │
│ POST /register 用户注册 │
│ GET /info 获取当前用户信息 │
│ POST /logout 退出登录 │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ 相似度分析模块 /api/v1/similarity │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ POST /analyze 分析简历与岗位要求的相似度 │
│ GET /simple 快速计算两段文本的相似度 │
│ GET /health 健康检查 │
│ GET /history 获取分析历史记录 │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ 统一响应格式 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ { │
│ "code": 200, // 状态码:200成功,400参数错误,401未授权,500错误 │
│ "message": "success", // 响应消息 │
│ "data": { ... }, // 响应数据 │
│ "timestamp": 169999999 // 时间戳 │
│ } │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
四、数据库设计
4.1 ER图
复制代码
┌─────────────────────────────────────────────────────────────────────────────┐
│ 数据库 ER 图 │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ sys_user │ │ resume │ │ job_requirement │
├─────────────────┤ ├─────────────────┤ ├─────────────────┤
│ PK id │───┐ │ PK id │ │ PK id │
│ username │ │ │ FK user_id │←───┐ │ FK user_id │←──┐
│ password │ │ │ title │ │ │ title │ │
│ email │ │ │ content │ │ │ content │ │
│ phone │ │ │ name │ │ │ company │ │
│ avatar │ │ │ education │ │ │ education │ │
│ status │ │ │ major │ │ │ work_years │ │
│ created_time│ │ │ work_years │ │ │ skills │ │
└─────────────────┘ │ │ skills │ │ │ created_time│ │
│ └─────────────────┘ │ └─────────────────┘ │
│ │ │
│ ┌─────────────────┐ │ │
│ │ analysis_record │ │ │
│ ├─────────────────┤ │ │
└────→│ FK user_id │────┘ │
│ FK resume_id │───────────────────────────────┘
│ FK job_id │
│ resume_text │
│ job_text │
│ total_score │
│ skill_score │
│ exp_score │
│ edu_score │
│ major_score │
│ matched_kw │
│ suggestion │
│ created_time│
└─────────────────┘
4.2 核心表结构
| 表名 |
说明 |
核心字段 |
sys_user |
用户表 |
id, username, password, email |
resume |
简历表 |
id, user_id, content, skills |
job_requirement |
岗位要求表 |
id, user_id, content, skills |
analysis_record |
分析记录表 |
id, user_id, total_score, matched_keywords |
sys_config |
系统配置表 |
config_key, config_value |
五、部署架构
5.1 开发环境
复制代码
┌─────────────────────────────────────────────────────────────────────────────┐
│ 开发环境部署 │
└─────────────────────────────────────────────────────────────────────────────┘
开发者机器
┌─────────────────────────────────────────────────────────────────────┐
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ 前端开发服务器 │ Proxy │ 后端开发服务器 │ │
│ │ Vite :3000 │─────────────→│ Spring Boot :8080│ │
│ └─────────────────┘ └────────┬────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ MySQL :3306 │ │
│ │ (本地/Docker) │ │
│ └─────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘
5.2 生产环境
复制代码
┌─────────────────────────────────────────────────────────────────────────────┐
│ 生产环境部署 │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────┐
│ 用户浏览器 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Nginx │
│ (反向代理/SSL) │
└────────┬────────┘
│
┌──────────────────┼──────────────────┐
│ 静态资源 │ API请求 │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ Vue 静态文件 │ │ Spring Boot │
│ (dist目录) │ │ (可部署多实例) │
└─────────────────┘ └────────┬────────┘
│
▼
┌─────────────────┐
│ MySQL 主从 │
│ (读写分离) │
└─────────────────┘
六、安全设计
6.1 安全措施
| 层面 |
措施 |
| 传输安全 |
HTTPS加密传输 |
| 认证安全 |
Token认证,可扩展JWT |
| 密码安全 |
BCrypt加密存储(待实现) |
| 接口安全 |
参数校验、SQL注入防护 |
| 跨域安全 |
CORS白名单配置 |
| 日志审计 |
操作日志、登录日志 |
6.2 认证流程
复制代码
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
│ 用户 │ │ 前端 │ │ 后端 │ │ 数据库 │
└────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘
│ │ │ │
│ 1.输入账号密码 │ │ │
│───────────────→│ │ │
│ │ 2.登录请求 │ │
│ │───────────────→│ │
│ │ │ 3.查询用户 │
│ │ │───────────────→│
│ │ │ 4.返回用户数据 │
│ │ │←───────────────│
│ │ 5.验证通过 │ │
│ │ 返回Token │ │
│ │←───────────────│ │
│ 6.登录成功 │ │ │
│ 存储Token │ │ │
│←───────────────│ │ │
│ │ │ │
│ 7.携带Token │ │ │
│ 请求API │ │ │
│───────────────→│ 8.带Token请求 │ │
│ │───────────────→│ │
│ │ │ 9.验证Token │
│ │ │ 返回数据 │
│ │ 10.返回数据 │ │
│ │←───────────────│ │
│ 11.展示数据 │ │ │
│←───────────────│ │ │
│ │ │ │
七、扩展规划
7.1 功能扩展
7.2 技术扩展
八、参考资料
- Spring Boot 官方文档
- Vue 3 官方文档
- Element Plus 组件库
- HanLP 自然语言处理
- TF-IDF 算法详解
- 余弦相似度