Переглянути джерело

feat: 添加 DotsOCR 和 PaddleOCR 合并模块,支持 JSON 数据合并和 Markdown 生成

zhch158_admin 1 тиждень тому
батько
коміт
6e82eedf30
1 змінених файлів з 92 додано та 0 видалено
  1. 92 0
      merger/dotsocr_merger.py

+ 92 - 0
merger/dotsocr_merger.py

@@ -0,0 +1,92 @@
+"""
+DotsOCR 和 PaddleOCR 合并模块
+"""
+import json
+from typing import List, Dict
+
+try:
+    from .text_matcher import TextMatcher
+    from .bbox_extractor import BBoxExtractor
+    from .data_processor import DataProcessor
+    from .markdown_generator import MarkdownGenerator
+    from .unified_output_converter import UnifiedOutputConverter
+except ImportError:
+    from text_matcher import TextMatcher
+    from bbox_extractor import BBoxExtractor
+    from data_processor import DataProcessor
+    from markdown_generator import MarkdownGenerator
+    from unified_output_converter import UnifiedOutputConverter
+
+
+class DotsOCRMerger:
+    """DotsOCR 和 PaddleOCR 结果合并器"""
+    
+    def __init__(self, look_ahead_window: int = 10, similarity_threshold: int = 90):
+        """
+        Args:
+            look_ahead_window: 向前查找的窗口大小
+            similarity_threshold: 文本相似度阈值
+        """
+        self.look_ahead_window = look_ahead_window
+        self.similarity_threshold = similarity_threshold
+        
+        # 初始化子模块
+        self.text_matcher = TextMatcher(similarity_threshold)
+        self.bbox_extractor = BBoxExtractor()
+        self.data_processor = DataProcessor(self.text_matcher, look_ahead_window)
+        self.markdown_generator = MarkdownGenerator()
+        self.output_converter = UnifiedOutputConverter()
+    
+    def merge_table_with_bbox(self, dotsocr_json_path: str, 
+                             paddle_json_path: str,
+                             data_format: str = 'mineru') -> List[Dict]:
+        """
+        合并 DotsOCR 和 PaddleOCR 的结果
+        
+        Args:
+            dotsocr_json_path: DotsOCR 输出的 JSON 路径
+            paddle_json_path: PaddleOCR 输出的 JSON 路径
+            data_format: 输出格式(固定为 'mineru')
+        
+        Returns:
+            MinerU 格式的合并数据
+        """
+        # 加载数据
+        with open(dotsocr_json_path, 'r', encoding='utf-8') as f:
+            dotsocr_data = json.load(f)
+        
+        with open(paddle_json_path, 'r', encoding='utf-8') as f:
+            paddle_data = json.load(f)
+        
+        # 🎯 提取 PaddleOCR 的文字框信息
+        paddle_text_boxes = self.bbox_extractor.extract_paddle_text_boxes(paddle_data)
+        
+        # 🎯 使用专门的 DotsOCR 处理方法(自动转换为 MinerU 格式)
+        merged_data = self.data_processor.process_dotsocr_data(
+            dotsocr_data, paddle_text_boxes
+        )
+        
+        return merged_data
+    
+    def generate_enhanced_markdown(self, merged_data: List[Dict], 
+                                   output_path: str = None,
+                                   source_file: str = None,
+                                   data_format: str = 'mineru') -> str:
+        """
+        生成增强的 Markdown(MinerU 格式)
+        
+        Args:
+            merged_data: 合并后的数据(MinerU 格式)
+            output_path: 输出路径
+            source_file: 源文件路径
+            data_format: 数据格式(固定为 'mineru')
+        """
+        # 🎯 强制使用 MinerU 格式生成 Markdown
+        return self.markdown_generator.generate_enhanced_markdown(
+            merged_data, output_path, source_file, data_format='mineru'
+        )
+    
+    def extract_table_cells_with_bbox(self, merged_data: List[Dict]) -> List[Dict]:
+        """提取所有表格单元格及其 bbox 信息"""
+        # 🎯 直接复用 BBoxExtractor 的方法
+        return self.bbox_extractor.extract_table_cells_with_bbox(merged_data)