TODO.md 11 KB

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-thresholdperformance.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)

  1. Excel表格提取

    • ✅ 创建ExcelTextExtractionService
    • ✅ 支持.xlsx和.xls格式
    • ✅ 提取表格数据为文本格式
    • ✅ 集成到ParseService
  2. 版面分析

    • ✅ 创建LayoutAnalysisService
    • ✅ 识别文档结构(标题、段落、表格等)
    • ✅ 提取位置信息
    • ✅ 集成到ParseService,结果保存到任务选项

✅ 已完成(P2)

  1. 异步任务优化(MQ)

    • ✅ 创建RabbitMQ配置和消息队列
    • ✅ 支持MQ和线程池两种模式
    • ✅ 支持任务优先级和重试
    • ✅ 支持降级处理
  2. 错误处理和重试机制

    • ✅ 创建RetryUtil和ErrorCategory
    • ✅ OCR调用自动重试
    • ✅ 详细错误日志和分类
    • ✅ 错误信息保存到任务
  3. 性能优化

    • ✅ 大文件分块处理
    • ✅ 内存优化
    • ✅ 文件大小检测

📌 注意事项

  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中实现了TextStorageControllerTextStorageService
    • 自动计算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和性能配置