一個強大且開發者友好的文檔解析庫,專為RAG(檢索增強生成)應用優化。基于Apache Tika、Apache POI和PDFBox等業界標準Java庫構建,TorchV Unstructured提供了增強的解析能力,具備智能表格結構識別和內容提取功能。
🚀 核心特性
-
智能表格解析:先進的表格結構分析,支持復雜單元格合并檢測
-
多格式支持:無縫處理DOC、DOCX、PDF等多種文檔格式
-
RAG優化輸出:專為AI/ML管道設計的結構化內容提取
-
Markdown和HTML導出:靈活的輸出格式,保持表格結構完整性
-
圖像提取:自動提取和處理嵌入式圖像
-
內存高效:優化的大文檔處理,最小化內存占用
📦 安裝
Maven
<dependency><groupId>com.torchv.infra</groupId><artifactId>torchv-unstructured</artifactId><version>1.0.0</version> </dependency>
Gradle
implementation 'com.torchv.infra:torchv-unstructured:1.0.0'
🔧 快速開始
基礎文檔解析
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);
高級表格提取
import com.torchv.infra.unstructured.UnstructuredParser; ? import java.io.File; import java.util.List; ? // 僅提取Word文檔中的表格 List<String> tables = UnstructuredParser.extractTables("document.docx"); for (int i = 0; i < tables.size(); i++) {System.out.println("表格 " + (i + 1) + ":");System.out.println(tables.get(i)); } ? // 獲取結構化結果,提供更多控制 DocumentResult result = UnstructuredParser.toStructuredResult("document.docx"); if (result.isSuccess()) {System.out.println("內容: " + result.getContent());System.out.println("表格: " + result.getTables()); }
文件格式支持
import com.torchv.infra.unstructured.UnstructuredParser; import com.torchv.infra.unstructured.util.UnstructuredUtils; ? // 檢查文件格式是否支持 if (UnstructuredUtils.isSupportedFormat("document.docx")) {String content = UnstructuredParser.toMarkdownWithHtmlTables("document.docx");System.out.println("解析成功!"); } else {System.out.println("不支持的文件格式"); } ? // 獲取所有支持的格式 List<String> supportedFormats = UnstructuredUtils.getSupportedFormats(); System.out.println("支持的格式: " + String.join(", ", supportedFormats));
🎯 核心組件
統一入口
-
UnstructuredParser:主要入口類,為所有文檔解析操作提供簡單統一的API
文檔解析器
-
UnstructuredWord:通用Word文檔解析器,支持自動檢測
-
TikaAutoUtils:支持自動檢測的通用文檔解析器(底層實現)
-
WordTableParser:專業的Word文檔表格解析器
-
DocxTableParser:高級DOCX表格結構分析器
內容處理器
-
ToMarkdownWithHtmlTableContentHandler:將文檔轉換為帶HTML表格的Markdown
-
DocMarkdownWithHtmlTableContentHandler:專門的DOC格式處理器
-
DocXMarkdownWithHtmlTableContentHandler:專門的DOCX格式處理器
表格分析
-
TableStructureAnalyzer:智能表格結構識別
-
CellMergeAnalyzer:高級單元格合并檢測
-
HtmlTableBuilder:清潔的HTML表格生成器
實用工具
-
FileMagicUtils:文件類型檢測和驗證
-
ImageExtractParse:嵌入式圖像提取
🔍 高級用法
RAG應用集成
import com.torchv.infra.unstructured.UnstructuredParser; import com.torchv.infra.unstructured.core.DocumentResult; ? // 為RAG應用優化 public class RAGDocumentProcessor { ?public DocumentChunk processDocument(String filePath) {// 解析時保持表格結構以獲得更好的上下文String content = UnstructuredParser.toMarkdownWithHtmlTables(filePath); ?// 單獨提取表格用于結構化數據處理List<String> tables = UnstructuredParser.extractTables(filePath); ?return new DocumentChunk(content, tables);} }
批量處理
import com.torchv.infra.unstructured.UnstructuredParser; import com.torchv.infra.unstructured.util.UnstructuredUtils; ? 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("處理文件失敗: {}", filePath, e);}} }
錯誤處理和驗證
import com.torchv.infra.unstructured.UnstructuredParser; import com.torchv.infra.unstructured.util.UnstructuredUtils; ? public class DocumentValidator {public ProcessingResult validateAndProcess(String filePath) {// 檢查文件格式if (!UnstructuredUtils.isSupportedFormat(filePath)) {return ProcessingResult.unsupportedFormat();}try {String content = UnstructuredParser.toMarkdownWithHtmlTables(filePath);List<String> tables = UnstructuredParser.extractTables(filePath);return ProcessingResult.success(content, tables);} catch (RuntimeException e) {return ProcessingResult.error(e.getMessage());}} }
🌟 為什么選擇TORCHV UNSTRUCTURED?
適用于RAG應用
-
結構化輸出:清潔、結構化的內容提取,完美適配嵌入向量生成
-
表格保持:維護表格關系,對文檔理解至關重要
-
豐富元數據:提取全面的文檔元數據,增強檢索效果
適用于開發者
-
簡單API:直觀的接口設計,合理的默認配置
-
可擴展:基于插件的架構,支持自定義內容處理器
-
生產就緒:經過實戰驗證,具備全面的錯誤處理機制
性能優化
-
內存高效:大文檔的流式處理
-
快速處理:優化算法確保快速解析
-
可擴展:專為高吞吐量文檔處理而設計
📚 文檔
-
API文檔
-
示例倉庫
-
遷移指南
🤝 貢獻
我們歡迎貢獻!請查看我們的貢獻指南了解詳情。
-
Fork這個倉庫
-
創建你的功能分支 (
git checkout -b feature/amazing-feature
) -
提交你的更改 (
git commit -m 'Add some amazing feature'
) -
推送到分支 (
git push origin feature/amazing-feature
) -
打開一個Pull Request
📄 許可證
本項目基于Apache License 2.0許可證 - 查看LICENSE文件了解詳情。
🙏 致謝
-
Apache Tika?- 內容分析工具包
-
Apache POI?- Microsoft文檔的Java API
-
PDFBox?- PDF文檔操作庫
?
- ?