简历与岗位要求相似度分析系统

简历与岗位要求相似度分析系统

一、系统概述

本系统是一个基于 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 功能扩展

  • 集成 Spring Security + JWT 完整认证
  • 支持简历文件上传解析(PDF/Word)
  • 批量简历匹配分析
  • 智能推荐相似岗位
  • 数据可视化报表

7.2 技术扩展

  • 引入 Redis 缓存热点数据
  • 使用 Elasticsearch 全文检索
  • 接入 AI 大模型优化分析结果
  • 微服务拆分(用户服务、分析服务)
  • Docker + K8s 容器化部署

八、参考资料

  1. Spring Boot 官方文档
  2. Vue 3 官方文档
  3. Element Plus 组件库
  4. HanLP 自然语言处理
  5. TF-IDF 算法详解
  6. 余弦相似度

相关推荐
小北方城市网21 小时前
Spring Boot 接口开发实战:RESTful 规范、参数校验与全局异常处理
java·jvm·数据库·spring boot·后端·python·mysql
千寻技术帮21 小时前
10399_基于SpringBoot的智慧养老院管理系统
java·spring boot·后端·源码·安装·代码
m0_5649149221 小时前
Altium Designer,AD如何修改原理图右下角图纸标题栏?如何自定义标题栏?自定义原理图模版的使用方法
java·服务器·前端
飞升不如收破烂~21 小时前
# Spring Boot 跨域请求未到达后端问题排查记录
java·spring boot·后端
AllData公司负责人21 小时前
【亲测好用】数据集成管理能力演示
java·大数据·数据库·开源
阿蒙Amon21 小时前
C#每日面试题-值传递和引用传递的区别
java·面试·c#
aloha_78921 小时前
乐信面试准备
java·spring boot·python·面试·职场和发展·maven
Knight_AL1 天前
Spring Boot 多模块项目中优雅实现自动配置(基于 AutoConfiguration.imports)
java·spring boot·mybatis
短剑重铸之日1 天前
《RocketMQ研读》面试篇
java·后端·面试·职场和发展·rocketmq
haluhalu.1 天前
从 Linux 线程控制到 pthread 库
java·linux·服务器