From e4810cee170076e2432291e38488250d477e7545 Mon Sep 17 00:00:00 2001 From: myhloli Date: Thu, 21 Nov 2024 17:50:41 +0800 Subject: [PATCH] fix(remove_overlaps_min_spans): optimize overlap detection in OCR span list modification - Improve logic to skip dropped spans in overlap detection - Enhance efficiency by avoiding unnecessary comparisons --- magic_pdf/pre_proc/ocr_span_list_modify.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/magic_pdf/pre_proc/ocr_span_list_modify.py b/magic_pdf/pre_proc/ocr_span_list_modify.py index 9c2d6cc8..84fca74e 100644 --- a/magic_pdf/pre_proc/ocr_span_list_modify.py +++ b/magic_pdf/pre_proc/ocr_span_list_modify.py @@ -38,11 +38,15 @@ def remove_overlaps_min_spans(spans): for span1 in spans: for span2 in spans: if span1 != span2: - overlap_box = get_minbox_if_overlap_by_ratio(span1['bbox'], span2['bbox'], 0.65) - if overlap_box is not None: - span_need_remove = next((span for span in spans if span['bbox'] == overlap_box), None) - if span_need_remove is not None and span_need_remove not in dropped_spans: - dropped_spans.append(span_need_remove) + # span1 或 span2 任何一个都不应该在 dropped_spans 中 + if span1 in dropped_spans or span2 in dropped_spans: + continue + else: + overlap_box = get_minbox_if_overlap_by_ratio(span1['bbox'], span2['bbox'], 0.65) + if overlap_box is not None: + span_need_remove = next((span for span in spans if span['bbox'] == overlap_box), None) + if span_need_remove is not None and span_need_remove not in dropped_spans: + dropped_spans.append(span_need_remove) if len(dropped_spans) > 0: for span_need_remove in dropped_spans: