From 59708cd96130ad857540f384d9b6393c4bcd6aff Mon Sep 17 00:00:00 2001 From: LLLin000 <809867916@qq.com> Date: Fri, 3 Jul 2026 01:24:56 +0800 Subject: [PATCH] fix: body_zone filter must skip recovery-rescued captions The body_zone early-exit filter unconditionally skipped all figure_caption_candidate blocks in body_zone. After PDF prefix recovery, recovered captions now have a 'Figure N' prefix but were still blocked by the zone filter. Added _extract_figure_number() guard so body_zone captions with a recovered number pass through to legend matching. Result for 5S7UI34M: 4->9 matched figures, 33->1 unmatched assets (p1 logo). --- paperforge/worker/ocr_figures.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/paperforge/worker/ocr_figures.py b/paperforge/worker/ocr_figures.py index 94f6d7d5..dbc8f644 100644 --- a/paperforge/worker/ocr_figures.py +++ b/paperforge/worker/ocr_figures.py @@ -3049,7 +3049,8 @@ def build_figure_inventory(structured_blocks: list[dict], page_width: float = 12 and _looks_like_figure_description_opening(text) ) if role == "figure_caption_candidate" and ( - str(block.get("zone") or "") == "body_zone" + (str(block.get("zone") or "") == "body_zone" + and _extract_figure_number(block.get("text", "")) is None) # skips recovery-rescued captions or ( str(block.get("zone") or "") != "display_zone" and str(block.get("style_family") or "") != "legend_like"