TODO.md 8.8 KB

parse-service 待完善清单

📋 总体状态

完成度:约 95%(P0和P1任务已完成)

✅ 已完成功能

  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(依赖已添加)
    • 使用消息队列处理解析任务
    • 支持任务重试机制
    • 支持任务优先级
  • 文件位置
    • ParseTaskExecutor.java(当前使用线程池)
    • ParseService.java:223(TODO标记)
  • 优先级:P2

7. 错误处理和重试机制 ⚠️ 基础实现

  • 当前状态:有基础错误处理,但缺少重试机制
  • 需要完善
    • OCR调用失败重试
    • 文件处理异常重试
    • 更详细的错误日志
    • 错误分类和处理策略
  • 优先级:P2

8. 性能优化 ⚠️ 待优化

  • 当前状态:单线程处理,符合GPU约束
  • 需要优化
    • 大文件分块处理
    • 内存优化(PDF处理)
    • 并发控制优化
  • 优先级:P2

📝 代码中的TODO标记

ParseService.java

  1. 第128行:调用 graph-service 或 document-service 记录 text_storage 信息 - 已完成
  2. 第218行:根据实际返回结构提取文字内容(OCR结果解析) - 已完成
  3. 第222行:实现版面分析 - 已完成
  4. 第223行:实现异步任务处理(MQ / 线程池等) - P2优先级

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)(P2)
  2. ⚠️ 错误处理和重试机制(P2)
  3. ⚠️ 性能优化(P2)

📌 注意事项

  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)

更新的文件

  • 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