# parse-service 待完善清单 ## 📋 总体状态 **完成度:约 100%**(P0、P1和P2任务全部完成) ### ✅ 已完成功能 1. **文件上传接口** ✅ - 支持 PDF、Word、Excel、图片上传 - 文件类型识别(MIME类型、扩展名、文件头) - 文件验证和存储 2. **PDF文本提取** ✅ - 分页判断逻辑实现 - 有文本层直接提取 - 无文本层使用OCR(页面转图片) - 自动清理临时文件 3. **OCR集成** ✅ - PaddleOCR客户端实现 - HTTP API调用 - 错误处理 4. **TXT文件存储** ✅ - 文本内容写入SSD硬盘 - 路径管理 5. **解析任务管理** ✅ - 异步任务队列 - 状态跟踪 - 进度查询 --- ## ❌ 待完善功能 ### P0 - 高优先级(阻塞后续开发) #### 1. Word文档文本提取 ✅ **已完成** - **当前状态**:已实现Word文档直接文本提取 - **实现内容**: - ✅ 添加Apache POI依赖 - ✅ 创建WordTextExtractionService - ✅ 支持.docx和.doc格式 - ✅ 提取纯文本内容 - **文件位置**:`WordTextExtractionService.java`,已集成到`ParseService.java` - **优先级**:P0 ✅ #### 2. OCR结果解析 ✅ **已完成** - **当前状态**:已实现通用的JSON解析器 - **实现内容**: - ✅ 创建OcrResultParser使用Jackson解析JSON - ✅ 支持多种JSON格式(text字段、result数组、data对象等) - ✅ 处理数组和嵌套对象 - ✅ 已集成到ParseService和PdfTextExtractionService - **文件位置**:`OcrResultParser.java` - **优先级**:P0 ✅ #### 3. 文本存储路径记录 ✅ **已完成** - **当前状态**:已实现文本存储路径记录功能 - **实现内容**: - ✅ 创建GraphServiceClient(Feign Client) - ✅ 在graph-service中实现TextStorageController和TextStorageService - ✅ 记录text_storage表信息(document_id, file_path, file_size, checksum) - ✅ 在ParseService中调用,自动计算MD5校验和 - **文件位置**: - `GraphServiceClient.java`(Feign Client) - `graph-service/TextStorageController.java` - `graph-service/TextStorageService.java` - 已集成到`ParseService.java` - **优先级**:P0 ✅ --- ### P1 - 中优先级(重要功能) #### 4. Excel表格提取 ✅ **已完成** - **当前状态**:已实现Excel表格直接文本提取 - **实现内容**: - ✅ 使用Apache POI(已添加依赖) - ✅ 创建ExcelTextExtractionService - ✅ 支持.xlsx和.xls格式 - ✅ 提取表格数据为文本格式(保留表格结构) - ✅ 支持多工作表、公式、日期等数据类型 - **文件位置**:`ExcelTextExtractionService.java`,已集成到`ParseService.java` - **优先级**:P1 ✅ #### 5. 版面分析 ✅ **已完成** - **当前状态**:已实现基础版面分析功能 - **实现内容**: - ✅ 创建LayoutAnalysisService - ✅ 识别文档结构(标题、段落、列表、表格行等) - ✅ 提取位置信息(行索引、段落索引、位置坐标等) - ✅ 支持PDF、Word、Excel等不同文件类型 - ✅ 分析结果保存到解析任务选项,供后续图节点构建使用 - **文件位置**:`LayoutAnalysisService.java`,已集成到`ParseService.java` - **优先级**:P1 ✅ - **注意**:当前为基础实现,后续可以使用更精确的版面分析库(如PDFBox的PDFLayoutTextStripper)进行增强 --- ### P2 - 低优先级(优化功能) #### 6. 异步任务处理优化 ✅ **已完成** - **当前状态**:已实现RabbitMQ消息队列支持,同时保留线程池模式 - **实现内容**: - ✅ 创建RabbitMQConfig配置类 - ✅ 创建ParseTaskMessage消息DTO - ✅ 创建ParseTaskMessageConsumer消息消费者 - ✅ 更新ParseTaskExecutor支持MQ和线程池两种模式 - ✅ 支持任务优先级 - ✅ 支持任务重试机制(通过消息队列) - ✅ 支持降级处理(MQ失败时自动降级为线程池) - **文件位置**: - `RabbitMQConfig.java` - RabbitMQ配置 - `ParseTaskMessage.java` - 消息DTO - `ParseTaskMessageConsumer.java` - 消息消费者 - `ParseTaskExecutor.java` - 已更新支持MQ模式 - **配置**:通过`parse.task.use-mq`配置项控制是否使用MQ(默认false) - **优先级**:P2 ✅ #### 7. 错误处理和重试机制 ✅ **已完成** - **当前状态**:已实现完整的错误处理和重试机制 - **实现内容**: - ✅ 创建RetryUtil重试工具类(支持指数退避) - ✅ 创建ErrorCategory错误分类枚举 - ✅ OCR调用失败自动重试(最多3次,指数退避) - ✅ 文件处理异常重试 - ✅ 详细的错误日志(包含错误分类、是否可重试等信息) - ✅ 错误分类和处理策略(网络错误、超时错误、文件错误等) - ✅ 错误信息保存到任务选项 - **文件位置**: - `RetryUtil.java` - 重试工具类 - `ErrorCategory.java` - 错误分类枚举 - `PaddleOcrClient.java` - 已集成重试机制 - `ParseService.java` - 已集成错误分类和详细日志 - **优先级**:P2 ✅ #### 8. 性能优化 ✅ **已完成** - **当前状态**:已实现大文件分块处理,内存优化 - **实现内容**: - ✅ 创建FileChunkProcessor大文件分块处理工具 - ✅ 大文件分块写入(超过50MB自动分块) - ✅ 内存优化(避免大文件一次性加载到内存) - ✅ 单线程处理(符合GPU线性处理约束) - ✅ 文件大小检测和优化策略 - **文件位置**: - `FileChunkProcessor.java` - 大文件分块处理工具 - `ParseService.java` - 已集成分块写入 - **配置**:通过`performance.large-file-threshold`和`performance.chunk-size`配置 - **优先级**:P2 ✅ --- ## 📝 代码中的TODO标记 ### ParseService.java 1. ✅ ~~第128行~~:调用 graph-service 或 document-service 记录 text_storage 信息 - **已完成** 2. ✅ ~~第218行~~:根据实际返回结构提取文字内容(OCR结果解析) - **已完成** 3. ✅ ~~第222行~~:实现版面分析 - **已完成** 4. ✅ ~~第223行~~:实现异步任务处理(MQ / 线程池等) - **已完成** ### PdfTextExtractionService.java 1. ✅ ~~第185行~~:根据实际OCR服务返回的JSON结构解析 - **已完成** --- ## 🔧 需要添加的依赖 ### 已添加 - ✅ Apache PDFBox 3.0.1 - ✅ Apache POI 5.2.5(Word/Excel处理) - ✅ poi(核心库) - ✅ poi-ooxml(.docx, .xlsx) - ✅ poi-scratchpad(.doc, .xls) --- ## 📊 功能覆盖情况 | 文件类型 | 处理方式 | 状态 | |---------|---------|------| | PDF | 分页判断(文本层/OCR) | ✅ 已完成 | | Word (.docx) | 直接文本提取 | ✅ 已完成 | | Word (.doc) | 直接文本提取 | ✅ 已完成 | | Excel (.xlsx) | 直接表格提取 | ✅ 已完成 | | Excel (.xls) | 直接表格提取 | ✅ 已完成 | | 图片 (JPG/PNG/GIF) | OCR | ✅ 已完成 | --- ## 🎯 下一步行动计划 ### ✅ 已完成(P0) 1. ✅ **Word文档文本提取** - ✅ 添加Apache POI依赖 - ✅ 实现WordTextExtractionService - ✅ 集成到ParseService 2. ✅ **OCR结果解析完善** - ✅ 创建OcrResultParser使用Jackson解析JSON - ✅ 支持多种JSON格式 - ✅ 提取文本内容 - ✅ 集成到ParseService和PdfTextExtractionService 3. ✅ **文本存储路径记录** - ✅ 创建GraphServiceClient(Feign Client) - ✅ 在graph-service中实现TextStorageController和TextStorageService - ✅ 在ParseService中调用,自动计算MD5校验和 ### ✅ 已完成(P1) 4. ✅ **Excel表格提取** - ✅ 创建ExcelTextExtractionService - ✅ 支持.xlsx和.xls格式 - ✅ 提取表格数据为文本格式 - ✅ 集成到ParseService 5. ✅ **版面分析** - ✅ 创建LayoutAnalysisService - ✅ 识别文档结构(标题、段落、表格等) - ✅ 提取位置信息 - ✅ 集成到ParseService,结果保存到任务选项 ### ✅ 已完成(P2) 6. ✅ **异步任务优化(MQ)** - ✅ 创建RabbitMQ配置和消息队列 - ✅ 支持MQ和线程池两种模式 - ✅ 支持任务优先级和重试 - ✅ 支持降级处理 7. ✅ **错误处理和重试机制** - ✅ 创建RetryUtil和ErrorCategory - ✅ OCR调用自动重试 - ✅ 详细错误日志和分类 - ✅ 错误信息保存到任务 8. ✅ **性能优化** - ✅ 大文件分块处理 - ✅ 内存优化 - ✅ 文件大小检测 --- ## 📌 注意事项 1. ✅ **OCR服务返回格式**:已实现通用的JSON解析器,支持多种常见格式 2. ✅ **Feign Client**:已创建GraphServiceClient,graph-service已提供接口 3. **性能考虑**:PDF处理可能消耗大量内存,大文件需要优化 4. **GPU资源限制**:当前单线程处理符合GPU线性处理约束,优化时需注意 5. **MD5校验和**:文本存储记录时会自动计算文件MD5,用于文件完整性校验 --- **最后更新**:2026-01-14 --- ## ✅ 本次更新(2026-01-14 - P1任务完成) ### 已完成的功能 1. **Word文档文本提取** ✅ - 创建了`WordTextExtractionService` - 支持.docx和.doc格式 - 已集成到ParseService 2. **OCR结果解析** ✅ - 创建了`OcrResultParser`使用Jackson解析JSON - 支持多种JSON格式(text字段、result数组、data对象等) - 已集成到ParseService和PdfTextExtractionService 3. **文本存储路径记录** ✅ - 创建了`GraphServiceClient`(Feign Client) - 在graph-service中实现了`TextStorageController`和`TextStorageService` - 自动计算MD5校验和 - 已集成到ParseService ### 新增文件 - `parse-service/src/main/java/com/lingyue/parse/service/WordTextExtractionService.java` - `parse-service/src/main/java/com/lingyue/parse/service/OcrResultParser.java` - `parse-service/src/main/java/com/lingyue/parse/client/GraphServiceClient.java` - `graph-service/src/main/java/com/lingyue/graph/service/TextStorageService.java` - `graph-service/src/main/java/com/lingyue/graph/controller/TextStorageController.java` - `parse-service/src/main/java/com/lingyue/parse/service/ExcelTextExtractionService.java`(P1) - `parse-service/src/main/java/com/lingyue/parse/service/LayoutAnalysisService.java`(P1) - `parse-service/src/main/java/com/lingyue/parse/util/RetryUtil.java`(P2) - `parse-service/src/main/java/com/lingyue/parse/util/ErrorCategory.java`(P2) - `parse-service/src/main/java/com/lingyue/parse/util/FileChunkProcessor.java`(P2) - `parse-service/src/main/java/com/lingyue/parse/config/RabbitMQConfig.java`(P2) - `parse-service/src/main/java/com/lingyue/parse/dto/ParseTaskMessage.java`(P2) - `parse-service/src/main/java/com/lingyue/parse/service/ParseTaskMessageConsumer.java`(P2) ### 更新的文件 - `backend/pom.xml` - 添加POI依赖版本管理 - `parse-service/pom.xml` - 添加POI依赖 - `parse-service/src/main/java/com/lingyue/parse/service/ParseService.java` - 集成所有新功能(Word提取、Excel提取、版面分析、文本存储记录、错误处理) - `parse-service/src/main/java/com/lingyue/parse/service/PdfTextExtractionService.java` - 使用OcrResultParser - `parse-service/src/main/java/com/lingyue/parse/service/PaddleOcrClient.java` - 集成重试机制 - `parse-service/src/main/java/com/lingyue/parse/service/ParseTaskExecutor.java` - 支持MQ和线程池两种模式 - `parse-service/src/main/resources/application.yml` - 添加MQ和性能配置