Files
intelligence_system/readme.md
T
2025-10-17 17:59:28 +08:00

157 lines
8.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 情报收集系统设计
### 参考文档
https://alidocs.dingtalk.com/i/nodes/NZQYprEoWoexdo1ohPdxXvDbJ1waOeDk?utm_scene=team_space
### 程序框架
```angular2html
intelligence_system/
├── collectors/ # 数据采集层
│ ├── weibo_spider.py # 黑猫爬虫
│ ├── rss_subscriptions.py # rss订阅
│ ├── news_api.py # 新闻接口
│ │
│ └── internal/ # 内部数据收集
│ ├── jian_dao_cloud.py # 简道云表单收集器
├── processors/ # 数据处理层
│ ├── data_cleaner.py # 数据清洗(去重/标准化)
│ ├── schema_mapper.py # 数据结构转换器
│ ├── text_parser.py # 文本解析(PDF/HTML等)
│ ├── image_analyzer.py # 图像识别(OpenCV集成)
│ ├── video_processor.py # 音视频分离分析
│ │
│ └── ai_engine/ # AI分析核心
│ ├── nlp_processor.py # 自然语言处理引擎
│ ├── sentiment_analyzer.py # 情感分析模型
│ └── topic_modeler.py # LDA主题建模工具
├── services/ # 应用服务层
│ ├── monitoring/ # 舆情监控
│ │ ├── opinion_monitor.py # 实时舆情追踪
│ │ └── brand_reputation.py # 品牌口碑分析
│ │
│ ├── analysis/ # 竞品分析
│ │ ├── competitor_tracker.py # 竞品动态监控
│ │ └── swot_generator.py # SWOT分析报告
│ │
│ ├── reporting/ # 报告服务
│ │ ├── daily_reporter.py # 自动化日报生成
│ │ └── weekly_digest.py # 周报汇编系统
│ │
│ └── alert/ # 预警服务
│ ├── alert_trigger.py # 动态阈值告警
│ └── notification_center.py # 邮件/短信通知
├── system_management/ # 系统管理层
│ ├── scheduler/ # 任务调度
│ │ └── task_scheduler.py # 任务调度器
│ │
│ └── monitor/ # 系统监控
│ ├── health_monitor.py # 服务健康检测
│ └── performance_watcher.py # 资源占用监控
├── utils/ # 工具库
│ ├── file_handler.py # 通用文件操作
│ ├── logger.py # 日志系统
│ ├── mysql_agent.py # MySQL读写管理器
│ └── datetime_parser.py # 时间格式处理
├── config.py # 配置加载与管理
└── main.py # 系统入口(启动所有服务)
```
### 程序设计原则
1. 所有程序尽可能在py文件中运行,尽量避免使用命令行执行
2. 配置需要在配置类中定义
3. 密钥等信息直接放在配置类中
4. 数据存储遵循"结构化存MySQL,非结构化存MinIO"原则,通过元数据关联
### 主程序设计
主程序需要一次启动,一直运行,启动时运行一次(在代码中可取消),之后每天定时生成一次报告
主程序包含爬虫/api调度器。该调度器通过查询mysql中任务调度情况按需执行,db文件中应包含任务名称、
任务路径、任务执行频率(支持按天、按周,按分钟)、上次执行时间、下次执行时间等信息
主程序应包含数据处理调度器,根据数据类别分别处理,如文本数据处理调度器、图片数据处理调度器等,
每天定时拉取db获取到的原始数据,分别进行处理,处理完成后将结果保存到mysql中
主程序应包含日报、周报等生成,根据时间定时生成报告,报告需要存储
### 日志设计
日志系统兼容Windows、Mac、Linux平台,以`log`文件形式存储,超过20MB自动压缩。新增存储相关日志内容:
- MySQL操作:批量插入行数、表结构变更、事务状态
- MinIO操作:文件上传/下载状态、路径、大小、耗时
- 关联日志:MySQL记录与MinIO对象的绑定关系(如"ID:123 关联文件: collector/images/xxx.jpg"
- 异常日志:MySQL连接失败、MinIO上传超时、数据关联不一致等告警信息
### 存储系统设计(MinIO+MySQL
#### 核心存储分工
| 存储类型 | 适用数据 | 核心作用 |
|----------|----------|----------|
| MySQL | 结构化数据、元数据、关系型数据 | 存储业务逻辑数据、非结构化数据的索引信息、任务调度信息等 |
| MinIO | 非结构化数据 | 存储图片、视频、PDF文档、原始爬取文件等二进制/大文件数据 |
#### 核心存储配置
1. **MySQL配置**
- 数据库名称:`intelligence_system`
- 连接管理:通过`utils/mysql_agent.py`封装线程安全的连接池,提供结构化数据的增删改查及SQL执行能力
- 适配特性:支持多平台(Windows/macOS/Linux)的超时配置和批处理优化
2. **MinIO配置**
- 存储桶命名规则:按数据类型划分,如`collector-images`(采集层图片)、`processor-videos`(处理层视频)
- 连接管理:通过`utils/minio_agent.py`封装客户端,提供对象上传、下载、删除、查询URL等能力
- 路径规则:`{数据层}/{来源}/{时间戳}_{唯一ID}.{后缀}`(例:`collector/weibo_spider/20240520_12345.jpg`
#### 表命名规则(扩展)
- 数据采集类:以`collector_`为前缀(存储采集到的结构化数据及MinIO对象元数据)
- 数据处理类:以`processor_`为前缀(存储处理结果的结构化数据及MinIO处理后对象的元数据)
- 数据存储类:以`storage_`为前缀(存储MinIO对象的索引信息,如哈希、大小、访问权限等)
- 应用层类:以`application_`为前缀(对应业务应用数据)
- 系统类:如任务调度表等采用功能命名(如`main_task`
#### 核心表结构
1. `collector_news_api`:新闻API采集数据表(存储新闻标题、内容等结构化数据)
2. `collector_complaint_spider`:投诉信息爬虫数据表(含投诉文本、附件MinIO路径`attachment_minio_path`等)
3. `collector_image_source`:采集层图片元数据表(存储图片URL、MinIO路径、格式、大小等)
4. `processor_text_processor`:文本处理结果表(存储NLP分析结果、关联原文ID等)
5. `processor_image_processor`:图片处理结果表(存储识别标签、特征向量、处理后图片MinIO路径`result_minio_path`等)
6. `storage_object_index`:MinIO对象索引表(存储所有对象的MinIO路径、哈希值、创建时间、过期时间等)
7. `main_task`:任务调度表(存储任务名称、路径、执行频率、上次/下次执行时间等)
8. `application_reporter_daily`:日报数据表(存储日报结构化内容、报表文件MinIO路径等)
9. `application_reporter_monthly`:月报数据表(存储月报结构化内容、报表文件MinIO路径等)
#### 数据交互特性
1. **MySQL交互**
- 支持DataFrame直接读写,提供分块处理(`chunksize`)和批量插入能力
- 自动适配平台特性(如Windows小批次写入优化)
- 完善的事务机制确保结构化数据一致性
2. **MinIO交互**
- 支持大文件分片上传、断点续传
3. **联动机制**
- 非结构化数据存储时,先上传至MinIO获取路径,再将路径及元数据写入MySQL
- 读取非结构化数据时,先从MySQL获取MinIO路径,再通过路径从MinIO下载
- 日志同步记录MySQL操作和MinIO对象操作(如"上传文件至MinIO: {path},关联MySQL记录ID: {id}"
### 数据采集设计
1. 结构化数据(如新闻文本、投诉内容):直接写入对应`collector_`前缀表
2. 非结构化数据(如爬取的图片、附件):
- 调用`minio_agent.py`上传至对应存储桶
- 将MinIO路径、文件大小、格式等元数据写入`collector_`前缀表或`storage_object_index`
3. 每个采集模块(独立py文件,`main`方法入口)需同时处理MySQL和MinIO交互,确保数据关联完整
### 数据处理设计
1. 结构化数据处理:从MySQL读取原始数据,处理后写入`processor_`前缀表
2. 非结构化数据处理:
- 从MySQL获取MinIO路径,通过`minio_agent.py`下载原始文件
- 处理后(如图片识别、视频帧提取)将结果文件上传至MinIO(处理层存储桶)
- 将处理结果的结构化信息(如识别标签)和处理后文件的MinIO路径写入`processor_`前缀表
3. 支持多表关联存储,通过`source_id`关联原始数据与处理结果