Jelajahi Sumber

修复多栏模式下lines可能为空导致的异常

赵小蒙 1 tahun lalu
induk
melakukan
012a8f1567

+ 1 - 1
magic_pdf/pre_proc/ocr_detect_layout.py

@@ -32,7 +32,7 @@ def adjust_layouts(layout_bboxes):
         # 遍历当前布局框之后的布局框
         for j in range(i + 1, len(layout_bboxes)):
             # 判断两个布局框是否重叠
-            if _is_part_overlap(layout_bboxes[i], layout_bboxes[j]):
+            if _is_part_overlap(layout_bboxes[i]["layout_bbox"], layout_bboxes[j]["layout_bbox"]):
                 # 计算每个布局框的中心点坐标和面积
                 center_i = get_center_point(layout_bboxes[i]["layout_bbox"])
                 area_i = get_area(layout_bboxes[i]["layout_bbox"])

+ 10 - 8
magic_pdf/pre_proc/ocr_dict_merge.py

@@ -75,15 +75,17 @@ def merge_spans_to_line_by_layout(spans, layout_bboxes):
         for span in spans:
             if calculate_overlap_area_in_bbox1_area_ratio(span['bbox'], layout_bbox) > 0.8:
                 layout_sapns.append(span)
-        new_spans.append(layout_sapns)
+        # 如果layout_sapns不为空,则放入new_spans中
+        if len(layout_sapns) > 0:
+            new_spans.append(layout_sapns)
+            # 从spans删除已经放入layout_sapns中的span
+            for layout_sapn in layout_sapns:
+                spans.remove(layout_sapn)
 
-        # 从spans删除已经放入layout_sapns中的span
-        for layout_sapn in layout_sapns:
-            spans.remove(layout_sapn)
-
-    for layout_sapns in new_spans:
-        layout_lines = merge_spans_to_line(layout_sapns)
-        lines.extend(layout_lines)
+    if len(new_spans) > 0:
+        for layout_sapns in new_spans:
+            layout_lines = merge_spans_to_line(layout_sapns)
+            lines.extend(layout_lines)
 
     #对line中的span进行排序
     lines = line_sort_spans_by_left_to_right(lines)