# 基于Tauri的新闻文本分类系统 - 流程图 ## 1. 系统整体架构图 ```mermaid graph TB subgraph "客户端层 - Tauri Desktop" Client[桌面客户端
Tauri + Vue3] end subgraph "后端服务层 - Spring Boot" API[API 网关] Auth[认证模块
Spring Security + JWT] NewsSvc[新闻服务] UserSvc[用户服务] ClassifySvc[分类服务] CrawlerSvc[爬虫服务] StatisticsSvc[统计服务] end subgraph "数据存储层" MySQL[(MySQL数据库)] Redis[(Redis缓存)] end subgraph "机器学习模块" ML[传统ML分类器
朴素贝叶斯/SVM] DL[深度学习分类器
BERT
可选] Hybrid[混合分类器
置信度融合] end Client -->|HTTP/WebSocket| API API --> Auth API --> NewsSvc API --> UserSvc API --> ClassifySvc API --> CrawlerSvc API --> StatisticsSvc NewsSvc --> MySQL NewsSvc --> Redis UserSvc --> MySQL UserSvc --> Redis ClassifySvc --> ML ClassifySvc --> DL ClassifySvc --> Hybrid CrawlerSvc -->|抓取新闻| ClassifySvc CrawlerSvc -->|存储| MySQL ML --> MySQL DL --> MySQL Hybrid --> MySQL style Client fill:#e1f5ff style API fill:#fff4e6 style MySQL fill:#f0f0f0 style Redis fill:#f0f0f0 style ML fill:#e8f5e9 style DL fill:#e8f5e9 style Hybrid fill:#e8f5e9 ``` ## 2. 用户登录认证流程 ```mermaid sequenceDiagram participant C as 桌面客户端 participant API as 后端API participant Auth as 认证模块 participant DB as MySQL数据库 participant Redis as Redis缓存 C->>API: POST /auth/login
{username, password} API->>Auth: 转发登录请求 Auth->>DB: 查询用户信息 DB-->>Auth: 返回用户数据 alt 用户存在且密码正确 Auth->>Auth: 验证通过
生成JWT Token Auth->>Redis: 缓存用户会话 Auth-->>API: 返回Token和用户信息 API-->>C: 200 OK
{token, user} C->>C: 存储Token到localStorage else 用户不存在或密码错误 Auth-->>API: 401 Unauthorized API-->>C: 登录失败 end Note over C,Redis: 后续请求携带Token C->>API: 请求其他接口
Authorization: Bearer {token} API->>Auth: 验证Token Auth->>Redis: 检查Token有效性 Redis-->>Auth: Token有效 Auth-->>API: 验证通过 API-->>C: 返回请求数据 ``` ## 3. 新闻爬取与自动分类流程 ```mermaid flowchart TD Start([定时任务触发
每30分钟]) --> Crawl[新闻爬虫模块] Crawl -->|并行抓取| Source1[今日头条] Crawl -->|并行抓取| Source2[腾讯新闻] Crawl -->|并行抓取| Source3[新浪新闻] Crawl -->|可配置| SourceN[其他新闻源...] Source1 --> Clean1[数据清洗] Source2 --> Clean2[数据清洗] Source3 --> Clean3[数据清洗] SourceN --> CleanN[数据清洗] Clean1 --> Merge{合并数据} Clean2 --> Merge Clean3 --> Merge CleanN --> Merge Merge --> Dedup[去重处理] Dedup --> Validate[数据验证] Validate -->|标题和内容完整| Classify[文本分类服务] Validate -->|数据不完整| Discard[丢弃] Classify --> Hybrid{混合分类器} Hybrid --> ML1[传统ML分类器
关键词匹配] Hybrid --> ML2[深度学习分类器
BERT
可选] ML1 --> Confidence[置信度计算] ML2 --> Confidence Confidence --> Threshold{置信度 >= 0.75?} Threshold -->|是| Success[分类成功] Threshold -->|否| Default[使用默认分类
科技类] Success --> Save[保存到数据库] Default --> Save Save --> Cache[更新Redis缓存] Cache --> End([流程结束]) Discard --> Log[记录日志] Log --> End style Start fill:#e3f2fd style End fill:#e8f5e9 style Classify fill:#fff3e0 style Save fill:#f3e5f5 style Cache fill:#f3e5f5 ``` ## 4. 新闻浏览与展示流程 ```mermaid sequenceDiagram participant U as 用户 participant C as 客户端 participant Cache as Redis缓存 participant API as 后端API participant DB as MySQL数据库 participant ML as 分类服务 U->>C: 点击新闻列表 C->>Cache: 查询缓存 alt 缓存命中 Cache-->>C: 返回缓存数据 C-->>U: 展示新闻列表 else 缓存未命中 C->>API: GET /news/list
?page=1&size=20 API->>DB: 分页查询新闻 DB-->>API: 返回新闻数据 API->>Cache: 写入缓存 Cache-->>API: 写入成功 API-->>C: 返回新闻列表 C-->>U: 展示新闻列表 end U->>C: 点击某条新闻 C->>API: GET /news/{id} API->>DB: 查询新闻详情 DB-->>API: 返回详情数据 API->>DB: 增加浏览量+1 API-->>C: 返回详情 C-->>U: 展示新闻详情 U->>C: 按分类筛选 C->>API: GET /news/category
?categoryCode=TECHNOLOGY API->>DB: 按分类查询 DB-->>API: 返回分类新闻 API-->>C: 返回结果 C-->>U: 展示分类新闻 U->>C: 搜索新闻 C->>API: GET /news/search
?keyword=人工智能 API->>DB: 全文搜索 alt 使用Elasticsearch API->>DB: ES搜索引擎 end DB-->>API: 返回搜索结果 API-->>C: 返回结果 C-->>U: 展示搜索结果 ``` ## 5. 手动发布新闻与分类流程 ```mermaid flowchart TD Start([管理员登录]) --> Verify{验证管理员权限} Verify -->|权限不足| Deny[提示权限不足] Verify -->|权限通过| Access[进入管理后台] Access --> Click[点击发布新闻] Click --> Form[填写新闻表单] Form --> Input[输入标题、内容、
选择分类、上传封面] Input --> Option{是否自动分类?} Option -->|是| AutoClassify[调用分类API] Option -->|否| ManualClassify[手动选择分类] AutoClassify --> ClassifySvc[文本分类服务] ClassifySvc --> Hybrid{混合分类器} Hybrid --> ML[传统ML分类] Hybrid --> DL[深度学习分类
可选] ML --> Result[获取分类结果
+ 置信度] DL --> Result Result --> ShowResult[显示推荐分类
置信度: 0.85] ShowResult --> Confirm{管理员确认?} Confirm -->|修改| ManualClassify Confirm -->|确认| Validate[验证数据] ManualClassify --> Validate Validate --> Check{数据是否完整?} Check -->|否| Error[提示错误信息] Check -->|是| Save[保存到数据库] Save --> Status[状态: 已发布] Status --> UpdateCache[更新Redis缓存] UpdateCache --> Log[记录操作日志] Log --> End([发布成功]) Error --> Form Deny --> End style Start fill:#e3f2fd style End fill:#e8f5e9 style ClassifySvc fill:#fff3e0 style Save fill:#f3e5f5 style UpdateCache fill:#f3e5f5 ``` ## 6. 数据可视化统计流程 ```mermaid flowchart LR subgraph "数据采集" DB[(MySQL数据库)] Cache[(Redis缓存)] end subgraph "统计计算" Count[分类统计] Trend[趋势分析] Hot[热门排行] Accuracy[准确率分析] end subgraph "数据返回" JSON[JSON数据] end subgraph "前端展示" Pie[饼图
分类分布] Line[折线图
发布趋势] Bar[柱状图
热门排行] Gauge[仪表盘
准确率] end DB --> Count Cache --> Count Count --> JSON DB --> Trend Trend --> JSON DB --> Hot Cache --> Hot Hot --> JSON DB --> Accuracy Accuracy --> JSON JSON --> Pie JSON --> Line JSON --> Bar JSON --> Gauge style DB fill:#f0f0f0 style Cache fill:#f0f0f0 style JSON fill:#e1f5ff style Pie fill:#fff3e0 style Line fill:#fff3e0 style Bar fill:#fff3e0 style Gauge fill:#fff3e0 ``` ## 7. 系统状态流转图 ```mermaid stateDiagram-v2 [*] --> 未登录 未登录 --> 已登录: 登录成功 未登录 --> 未登录: 登录失败 已登录 --> 浏览新闻: 查看列表 浏览新闻 --> 已登录: 返回 已登录 --> 查看详情: 点击新闻 查看详情 --> 已登录: 返回 已登录 --> 搜索新闻: 输入关键词 搜索新闻 --> 已登录: 返回 已登录 --> 查看统计: 点击统计页 查看统计 --> 已登录: 返回 已登录 --> 管理员后台: 角色为ADMIN 管理员后台 --> 已登录: 返回 管理员后台 --> 发布新闻: 填写表单 发布新闻 --> 管理员后台: 发布成功 管理员后台 --> 管理分类: 分类管理 管理分类 --> 管理员后台: 返回 管理员后台 --> 管理用户: 用户管理 管理用户 --> 管理员后台: 返回 已登录 --> 未登录: 登出/Token过期 ``` ## 8. 文本分类算法决策流程 ```mermaid flowchart TD Input[输入: 新闻标题 + 内容] --> Preprocess{文本预处理} Preprocess --> Clean[去除HTML标签
去除特殊字符
统一编码] Clean --> Segment[中文分词
jieba] Segment --> Parallel{并行分类} Parallel --> Trad[传统ML分类器
TF-IDF + 朴素贝叶斯] Parallel --> Deep[深度学习分类器
BERT
可选] Trad --> TradResult[结果1: 科技
置信度: 0.82] Deep --> DeepResult[结果2: 科技
置信度: 0.88] TradResult --> Compare[置信度比较] DeepResult --> Compare Compare --> Select{选择最高置信度} Select --> CheckThreshold{置信度 >= 0.75?} CheckThreshold -->|是| Return[返回分类结果
科技, 0.88, HYBRID] CheckThreshold -->|否| Default[返回默认分类
科技, 0.50, HYBRID] Return --> Output[输出分类结果] Default --> Output style Input fill:#e3f2fd style Output fill:#e8f5e9 style Parallel fill:#fff3e0 style Compare fill:#f3e5f5 style Return fill:#c8e6c9 style Default fill:#ffccbc ``` ## 9. 缓存更新策略流程 ```mermaid flowchart TD Request[请求到达] --> CheckCache{检查Redis缓存} CheckCache -->|命中| Hit[返回缓存数据] CheckCache -->|未命中| Miss[查询MySQL数据库] Miss --> QueryDB[执行SQL查询] QueryDB --> Result[获取查询结果] Result --> WriteCache[写入Redis缓存] WriteCache --> SetExpire[设置过期时间
30分钟] SetExpire --> Return[返回数据] Hit --> Return Return --> End[请求结束] style CheckCache fill:#fff3e0 style WriteCache fill:#f3e5f5 style Hit fill:#c8e6c9 style Miss fill:#ffccbc ``` ## 10. 新闻爬虫详细工作流程 ```mermaid flowchart TD Trigger[定时任务触发
Cron: 0 */30 * * * ?] --> Config{读取配置} Config --> GetSources[获取启用的新闻源列表] GetSources --> Loop{遍历每个新闻源} Loop --> Fetch[发送HTTP请求] Fetch --> CheckResp{响应状态码 200?} CheckResp -->|否| ErrorLog[记录错误日志] CheckResp -->|是| Parse[解析HTML
Jsoup] Parse --> Extract[提取新闻数据
标题/内容/链接/时间] Extract --> ValidateData{数据验证} ValidateData -->|标题为空| ErrorLog ValidateData -->|内容为空| ErrorLog ValidateData -->|数据完整| Continue[继续处理] Continue --> CheckDup{检查URL是否重复?} CheckDup -->|已存在| Skip[跳过该新闻] CheckDup -->|不存在| Process[处理新闻] Process --> Classify[调用分类服务] Classify --> SaveDB[保存到MySQL] SaveDB --> UpdateCache[更新Redis缓存] UpdateCache --> Next{还有新闻源?} ErrorLog --> Next Skip --> Next Next -->|是| Loop Next -->|否| Summary[生成爬取报告] Summary --> Finish([任务结束]) style Trigger fill:#e3f2fd style Finish fill:#e8f5e9 style Classify fill:#fff3e0 style SaveDB fill:#f3e5f5 style UpdateCache fill:#f3e5f5 ``` --- ## 流程图说明 ### 关键模块交互说明 1. **客户端-后端交互** - 使用RESTful API进行通信 - JWT Token进行身份认证 - 响应格式统一: `{code, message, data, timestamp}` 2. **文本分类流程** - 支持传统机器学习(朴素贝叶斯/SVM) - 可选深度学习(BERT) - 混合分类器选择置信度最高的结果 - 置信度低于阈值时使用默认分类 3. **缓存策略** - Redis缓存热点数据 - 缓存过期时间: 30分钟 - Cache-Aside模式 4. **数据流转** - 爬虫 → 分类 → 数据库 → 缓存 → 客户端 - 管理员操作 → 数据库 → 缓存更新 - 用户浏览 → 缓存/数据库 → 展示