news-classifier/IFLOW.md

11 KiB

项目上下文文档

项目概述

项目名称: 基于Tauri的新闻文本类别分类系统设计与实现

项目类型: 毕业设计项目 - 工程型系统设计 + 算法对比验证

项目定位: 在真实工程约束下,设计并实现一个"能用、好用、轻量"的新闻文本自动分类系统,并对分类方案进行对比与验证。

一句话总结: 设计并实现了一个基于 Tauri 的新闻文本分类系统,在系统中对比了多种文本分类方案的效果与性能,验证了在桌面端环境下混合分类策略的实用性。


项目结构

D:\tmp\write\news-classifier\
├── backend/              # 后端 Spring Boot 服务
├── client/               # 前端 Tauri + Vue3 桌面应用
├── crawler-module/       # 新闻爬虫模块 (Python)
├── ml-module/            # 机器学习分类模块 (Python)
├── docs/                 # 文档和数据库脚本
└── docker/               # Docker 部署配置

技术栈

后端技术栈

  • 核心框架: Spring Boot 3.5.6
  • Java版本: JDK 17
  • 数据库: MySQL 8.0
  • ORM: Spring Data JPA
  • 安全认证: Spring Security 6.x + JWT (jjwt 0.11.5)
  • API文档: Springdoc OpenAPI 2.2.0
  • 工具库: Lombok
  • HTML解析: Jsoup 1.17.2
  • HTTP客户端: Apache HttpClient 5

前端技术栈

  • 桌面框架: Tauri 2.x (基于 Rust)
  • UI框架: Vue 3.5.21 + Composition API + TypeScript
  • 状态管理: Pinia 2.2.6
  • 路由: Vue Router 4.5.0
  • 样式: Tailwind CSS 4.1.13
  • UI组件: Reka UI (shadcn-vue 风格)
  • 图标: Lucide Vue Next
  • HTTP客户端: Axios 1.7.9
  • 构建工具: Vite 7.1.7
  • 包管理器: pnpm 10.17.1+

爬虫模块技术栈

  • 语言: Python 3.9+
  • HTTP请求: requests 2.31.0
  • HTML解析: BeautifulSoup4 4.12.3 + lxml 5.1.0
  • 动态页面: Selenium 4.16.0
  • 数据库: pymysql 1.1.0 + DBUtils 3.0.3
  • 配置管理: pyyaml 6.0.1

机器学习模块

  • 语言: Python 3.9+
  • 传统ML: Scikit-learn 1.4.0 (朴素贝叶斯、SVM)
  • 深度学习: PyTorch 2.0+ + Transformers 4.30+ + BERT-Chinese
  • NLP: jieba 0.42.1 (中文分词)
  • 数据处理: NumPy 1.24.0+, Pandas 2.0.0+
  • 模型保存: joblib 1.3.0+
  • API服务: FastAPI 0.100.0 + Uvicorn
  • 数据可视化: Matplotlib 3.7.0, Seaborn 0.12.0

数据库设计

数据库信息

  • 数据库名: news_classifier
  • 字符集: utf8mb4
  • 排序规则: utf8mb4_unicode_ci

核心表结构

表名 用途 关键字段
sys_user 用户表 id, username, password, role (ADMIN/USER), status
news_category 新闻分类表 id, name, code, description, sort_order
news 新闻表 id, url, title, content, category_id, category_code, publish_time, source, author
news_tag 标签表 id, name, color, use_count
news_tag_relation 新闻标签关联表 news_id, tag_id
user_collect 用户收藏表 user_id, news_id
user_history 用户浏览历史表 user_id, news_id, view_time, duration
sys_log 操作日志表 user_id, operation, method, ip, status, execute_time
sys_config 系统配置表 config_key, config_value, group

初始化数据

  • 默认管理员: admin / admin123
  • 默认分类: 娱乐、体育、财经、科技、军事、汽车、政务、健康、AI

构建和运行

环境要求

  • Java 17+
  • Node.js 18.x+
  • Python 3.9+
  • MySQL 8.0+
  • Rust 1.70+ (Tauri需要)
  • pnpm 10.17.1+

后端启动

cd D:\tmp\write\news-classifier\backend

# 1. 配置数据库连接
# 编辑 src/main/resources/application.yml
# 修改数据库URL、用户名、密码

# 2. 初始化数据库
mysql -u root -p < D:\tmp\write\news-classifier\docs\schema.sql

# 3. 启动后端服务
mvn spring-boot:run

后端服务地址: http://localhost:8080 API文档: http://localhost:8080/swagger-ui.html

前端启动

cd D:\tmp\write\news-classifier\client

# 1. 安装依赖
pnpm install

# 2. 开发模式运行
pnpm run tauri:dev

# 3. 构建桌面应用
pnpm run tauri:build

爬虫模块启动

cd D:\tmp\write\news-classifier\crawler-module

# 1. 安装依赖
pip install -r requirements.txt

# 2. 配置数据库连接
# 编辑 config/config.yaml

# 3. 初始化数据库
# 执行 docs/database.md 中的SQL脚本

# 4. 运行爬虫
# 列出所有可用爬虫
python -m src.cli.main --list

# 运行单个爬虫
python -m src.cli.main netease:tech

# 运行所有爬虫
python -m src.cli.main --all

# 指定最大文章数
python -m src.cli.main netease:tech --max 5

机器学习模块启动

cd D:\tmp\write\news-classifier\ml-module

# 1. 创建虚拟环境
python -m venv venv
venv\Scripts\activate  # Windows

# 2. 安装依赖
pip install -r requirements.txt

# 3. 从MySQL拉取训练数据
python src/utils/data_loader.py

# 4. 训练BERT模型
python train_bert.py

# 5. 启动API服务
python src/api/server.py

使用 Docker

cd D:\tmp\write\news-classifier\docker

# 启动所有服务 (MySQL + Redis + Elasticsearch + Backend)
docker-compose up -d

# 停止服务
docker-compose down

开发规范

后端开发规范

  • 架构模式: 分层架构 (Controller -> Service -> Repository)
  • API设计: RESTful 风格
  • 统一响应: 使用 RestBean<T> 包装返回结果
  • 异常处理: 全局异常处理器
  • 日志记录: 使用 SLF4J + Logback
  • 代码生成: 使用 Lombok 简化代码

前端开发规范

  • 组件风格: Composition API + <script setup>
  • 类型安全: 严格使用 TypeScript
  • 状态管理: Pinia stores (stores/news.ts, stores/user.ts)
  • 路由: Vue Router 4.x
  • 样式: Tailwind CSS 原子类
  • 代码格式: ESLint + Prettier

命名约定

  • Java: 驼峰命名 (camelCase), 类名大驼峰 (PascalCase)
  • TypeScript: 驼峰命名 (camelCase), 接口以 I 开头
  • 数据库: 下划线命名 (snake_case)
  • API路径: kebab-case (如 /api/v1/news/list)

核心功能模块

1. 用户认证模块

  • 用户注册/登录
  • JWT令牌认证
  • 权限控制 (ADMIN/USER)
  • 刷新令牌

2. 新闻爬取模块 (Python)

  • 多源新闻抓取 (网易、36氪等)
  • 静态页面和动态页面(Selenium)支持
  • HTML解析和内容提取
  • 文本清洗和去重
  • 批量存储到数据库
  • 模块化设计,易于扩展

3. 文本分类模块

  • 方案一: TF-IDF + 朴素贝叶斯/SVM (传统机器学习)
  • 方案二: BERT-Chinese 微调 (深度学习)
  • 方案三: 混合策略 (规则 + 置信度阈值动态切换)
  • GPU/CPU自动检测
  • 动态参数调整

4. 新闻管理模块

  • 新闻列表分页查询
  • 新闻详情展示
  • 全文搜索
  • 按分类筛选
  • 批量导入/导出

5. 数据可视化模块

  • 分类统计图表
  • 热门新闻排行
  • 趋势分析
  • ECharts 图表展示

6. 后台管理模块

  • 用户管理
  • 新闻审核
  • 分类管理
  • 系统配置
  • 操作日志

文本分类算法

分类映射

娱乐 -> ENTERTAINMENT
体育 -> SPORTS
财经 -> FINANCE
科技 -> TECHNOLOGY
军事 -> MILITARY
汽车 -> AUTOMOTIVE
政务 -> GOVERNMENT
健康 -> HEALTH
AI -> ARTIFICIAL_INTELLIGENCE

分类器接口

  • 传统机器学习分类器 (朴素贝叶斯、SVM)
  • BERT深度学习分类器
  • 混合策略分类器

分类结果

{
  "categoryCode": "TECHNOLOGY",
  "categoryName": "科技",
  "confidence": 0.8756,
  "classifierType": "HYBRID",
  "probabilities": {...},
  "duration": 125
}

项目配置

后端配置文件

  • 主配置: backend/src/main/resources/application.yml

关键配置项

server:
  port: 8080

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/news_classifier
    username: root
    password: root

classifier:
  mode: hybrid  # traditional, deep_learning, hybrid
  confidence-threshold: 0.75

jwt:
  secret: news-classifier-secret-key-2024
  expiration: 86400000  # 24小时

前端配置文件

  • 环境变量: client/.env.development
  • Tauri配置: client/src-tauri/tauri.conf.json
  • Vite配置: client/vite.config.ts

爬虫配置文件

  • 主配置: crawler-module/config/config.yaml

机器学习配置文件

  • 主配置: ml-module/config.yaml

API文档

认证接口

  • POST /api/v1/user/register - 用户注册
  • POST /api/v1/user/login - 用户登录
  • GET /api/v1/user/info - 获取用户信息 (需要认证)

分类接口

  • GET /api/v1/categories - 获取所有分类
  • GET /api/v1/categories/with-count - 获取分类及新闻数量
  • GET /api/v1/categories/{id} - 获取分类详情
  • POST /api/v1/categories - 创建分类
  • PUT /api/v1/categories/{id} - 更新分类
  • DELETE /api/v1/categories/{id} - 删除分类

新闻接口

  • GET /api/v1/news/list - 分页查询新闻
  • GET /api/v1/news/{id} - 获取新闻详情
  • GET /api/v1/news/search - 搜索新闻
  • GET /api/v1/news/category/{categoryId} - 按分类获取新闻
  • GET /api/v1/news/latest - 获取最新新闻
  • GET /api/v1/news/statistics - 获取新闻统计数据
  • POST /api/v1/news - 创建新闻
  • PUT /api/v1/news - 更新新闻
  • DELETE /api/v1/news/{id} - 删除新闻
  • DELETE /api/v1/news/batch - 批量删除新闻

ML模块API接口

  • POST /api/predict - 单条预测
  • POST /api/batch-predict - 批量预测

预期成果

系统能力

  • 能稳定导入1000+条新闻
  • 分类准确率达到75%以上 (目标 > 85%)
  • 单条分类响应时间 < 2秒
  • 支持至少9个新闻类别
  • 界面友好,操作流畅

毕业设计要求

  • 完整的系统设计章节
  • 清晰的算法对比实验
  • 充分的数据分析
  • 规范的论文格式
  • 不少于1.5万字

常见问题

Q1: 如何启动完整系统?

# 1. 启动数据库
mysql -u root -p < docs/schema.sql

# 2. 启动后端
cd backend
mvn spring-boot:run

# 3. 启动前端
cd client
pnpm run tauri:dev

# 4. (可选) 启动爬虫
cd crawler-module
python -m src.cli.main --all

# 5. (可选) 启动ML模块
cd ml-module
python src/api/server.py

Q2: 默认管理员账号是什么?

  • 用户名: admin
  • 密码: admin123

Q3: 如何训练分类模型?

cd ml-module
python src/utils/data_loader.py  # 拉取训练数据
python train_bert.py             # 训练BERT模型

Q4: 分类模式有哪些?

  • traditional: 传统机器学习 (朴素贝叶斯/SVM)
  • deep_learning: 深度学习 (BERT)
  • hybrid: 混合策略 (推荐)

Q5: 如何添加新的爬虫?

  1. crawler-module/src/crawlers/ 下创建新的爬虫类
  2. 继承 StaticCrawlerDynamicCrawler
  3. config/config.yaml 中添加配置
  4. src/cli/main.py 中注册爬虫

项目作者

姓名: 张俊恒 学院: 软件学院 班级: 22级11班 学号: 2210121328


许可证

MIT License