Skip to content
📖0 阅读·🤍0 点赞

TorchV Unstructured:强大的文档解析库

专为 RAG 应用优化的 Java 文档解析库,基于 Apache Tika、Apache POI 和 PDFBox,提供智能表格结构识别和内容提取能力。

📖 项目简介

TorchV Unstructured 是一个功能强大且开发者友好的文档解析库,专为 RAG(检索增强生成)应用优化。该项目基于业界标准的 Java 库(如 Apache Tika、Apache POI 和 PDFBox)构建,提供增强的解析能力,包括智能表格结构识别和内容提取。

🔗 项目链接

✨ 核心特性

1. 🧠 智能表格解析

项目提供先进的表格结构分析能力:

  • 单元格合并检测:准确识别表格中的合并单元格
  • 结构保持:完整保留表格的层次结构
  • HTML 表格生成:生成清洁的 HTML 表格代码
  • Markdown 兼容:支持 Markdown 格式的表格输出

2. 📄 多格式支持

无缝处理各种文档格式:

  • Word 文档:DOC、DOCX 格式完整支持
  • PDF 文档:基于 PDFBox 的 PDF 解析
  • 其他格式:通过 Apache Tika 支持更多格式
  • 自动检测:智能识别文件类型

3. 🎯 RAG 优化输出

专为 AI/ML 管道设计:

  • 结构化内容:清洁、结构化的内容提取
  • 元数据丰富:提取全面的文档元数据
  • 嵌入友好:适合生成嵌入向量的格式
  • 上下文保持:维持文档的语义关系

4. 🖼️ 图像处理

自动处理嵌入图像:

  • 图像提取:自动提取文档中的图像
  • 格式支持:支持多种图像格式
  • 路径管理:智能的图像路径处理

🏗️ 架构设计

核心组件

┌─────────────────────────────────────┐
│         UnstructuredParser           │
│        (统一入口点)                   │
└─────────────────┬───────────────────┘

    ┌─────────────┼─────────────┐
    │             │             │
┌───▼───┐    ┌────▼────┐    ┌───▼───┐
│ Word  │    │  PDF    │    │ Other │
│Parser │    │ Parser  │    │Parser │
└───┬───┘    └────┬────┘    └───┬───┘
    │             │             │
    └─────────────┼─────────────┘

    ┌─────────────▼─────────────┐
    │    Content Handlers       │
    │  (Markdown/HTML输出)       │
    └───────────────────────────┘

主要类结构

  • UnstructuredParser: 主要入口类,提供简单统一的 API
  • UnstructuredWord: 通用 Word 文档解析器
  • WordTableParser: 专门的 Word 表格解析器
  • TableStructureAnalyzer: 智能表格结构识别器
  • CellMergeAnalyzer: 高级单元格合并检测器

💡 使用示例

基础文档解析

java
import com.torchv.infra.unstructured.UnstructuredParser;

// 解析文档为 Markdown(推荐用于 RAG)
String content = UnstructuredParser.toMarkdown("document.docx");
System.out.println(content);

// 解析文档为带 HTML 表格的 Markdown(保留表格结构)
String contentWithTables = UnstructuredParser.toMarkdownWithHtmlTables("document.docx");
System.out.println(contentWithTables);

高级表格提取

java
import com.torchv.infra.unstructured.UnstructuredParser;
import java.util.List;

// 仅提取 Word 文档中的表格
List<String> tables = UnstructuredParser.extractTables("document.docx");
for (int i = 0; i < tables.size(); i++) {
    System.out.println("Table " + (i + 1) + ":");
    System.out.println(tables.get(i));
}

// 获取结构化结果,更多控制
DocumentResult result = UnstructuredParser.toStructuredResult("document.docx");
if (result.isSuccess()) {
    System.out.println("Content: " + result.getContent());
    System.out.println("Tables: " + result.getTables());
}

RAG 应用集成

java
public class RAGDocumentProcessor {
    
    public DocumentChunk processDocument(String filePath) {
        // 解析并保留表格结构,便于更好的上下文理解
        String content = UnstructuredParser.toMarkdownWithHtmlTables(filePath);
        
        // 单独提取表格用于结构化数据处理
        List<String> tables = UnstructuredParser.extractTables(filePath);
        
        return new DocumentChunk(content, tables);
    }
}

批量处理

java
public class BatchProcessor {
    
    public void processBatch(List<String> filePaths) {
        filePaths.parallelStream()
                .filter(UnstructuredUtils::isSupportedFormat)
                .forEach(this::processFile);
    }
    
    private void processFile(String filePath) {
        try {
            String content = UnstructuredParser.toMarkdownWithHtmlTables(filePath);
            // 保存或进一步处理内容
            saveProcessedContent(filePath, content);
        } catch (Exception e) {
            log.error("Failed to process file: {}", filePath, e);
        }
    }
}

🎯 应用场景

RAG 系统

  • 文档预处理:将各种格式的文档转换为适合嵌入的格式
  • 表格数据提取:保持表格结构,便于 AI 理解
  • 批量文档处理:高效处理大量文档

内容管理系统

  • 文档转换:将 Word/PDF 转换为 Web 友好的格式
  • 内容提取:提取文档中的结构化信息
  • 格式标准化:统一不同来源的文档格式

数据分析

  • 表格数据提取:从文档中提取表格数据进行分析
  • 结构化信息:将非结构化文档转换为结构化数据
  • 批量处理:处理大量文档进行数据分析

🌟 技术优势

性能优化

  • 内存高效:流式处理大文档,最小内存占用
  • 快速处理:优化的算法,快速解析
  • 可扩展性:设计用于高吞吐量文档处理

开发友好

  • 简单 API:直观的接口,合理的默认值
  • 可扩展:基于插件的架构,支持自定义内容处理器
  • 生产就绪:经过实战测试,全面的错误处理

质量保证

  • 基于标准:基于 Apache Tika、Apache POI 等成熟库
  • 测试覆盖:全面的测试覆盖
  • 持续维护:活跃的开发和维护

📚 学习资源

  • API 文档:详细的 API 参考文档
  • 示例代码:丰富的使用示例
  • 最佳实践:RAG 应用的最佳实践指南

🤝 贡献与支持

贡献方式

  1. Fork 仓库
  2. 创建功能分支 (git checkout -b feature/amazing-feature)
  3. 提交更改 (git commit -m 'Add some amazing feature')
  4. 推送到分支 (git push origin feature/amazing-feature)
  5. 创建 Pull Request

联系方式

🙏 致谢

感谢以下开源项目的支持:

  • Apache Tika - 内容分析工具包
  • Apache POI - Microsoft 文档 Java API
  • PDFBox - PDF 文档操作库

TorchV Unstructured 是 TorchV 团队用心打造的开源项目,旨在为 RAG 应用提供最佳的文档解析解决方案。无论是个人项目还是企业应用,都能从中受益。

Made with ❤️ by TorchV Team

用代码书写人生 | This site is powered by Netlify