lllin000_PaperForge/docs/audit/SKXTCE6M.md
LLLin000 7c702b1bcf fix: exclude table-owned media and inline figure body refs from figure matching
PR-1 of the architecture review fixes.

Two entry-level filters before figure matching:

1. _is_table_owned_media(): excludes media_asset blocks with table
   roles/raw_labels/hints from the figure asset pool. Previously these
   entered as figure candidates and ended up as unmatched legends/orphans.

2. _looks_like_inline_figure_body_reference(): detects body text like
   'Figure 11-10 shows...' (hyphenated ranges, list ranges) and flags
   it as an inline reference, not a figure legend. Applied in both
   ocr_figures.py and ocr_roles.py for consistent early rejection.

Verified on real vault:
  SKXTCE6M: unmatched_legends 6→0, overall yellow→green
  SRNJDAA2: unmatched_legends 9→0

Tests: 384 pass (+9 new), 0 fail
2026-07-05 22:36:17 +08:00

1.9 KiB
Raw Permalink Blame History

OCR Truth Audit: SKXTCE6M

Paper: Hashemi-Afzal et al., 2025 — Advancements in hydrogel design for articular cartilage regeneration Status: Yellow (31p, 723 blocks, 17 figure captions, 14 matched figures, 4 tables)

Figure Matching Quality: GOOD

All 14 matched figures verified:

  • Crops are clean, no adjacent content bleeding
  • Multi-panel figures (Fig 4: 8 sub-panels, Fig 5: 17 sub-panels) correctly stacked
  • Caption text matches the visual figure content
  • Sub-panel labels (, Ⅱ, Ⅲ) correctly rejected as separate figures (8 rejected legends)

Primary Finding: Table-Figure Role Misclassification ⚠️

6 unmatched legends + 4 orphans all trace to the same root cause.

Symptom Count Root Cause
Unmatched legends with "Summary of..." text 6 raw_label=figure_title assigned to table titles
Orphan images that are actually tables 4 Table content rendered as figure-like, no figure caption match
Ambiguous figures (no candidates) 2 Same blocks as unmatched legends

The raw OCR classifier labels any bold/centered title text as figure_title, but 6 of these titles sit above HTML <table> blocks:

Page raw_label Actual Content
3 figure_title "Table 2" + summary above <table>
8 figure_title "Table 3" + summary above <table>
11 figure_title Summary above <table>
15 figure_title Summary above <table>
19 figure_title Summary above <table>
23 figure_title Summary above <table>

Verdict

  • Figure matching itself works well. 14/14 matched figures are correct.
  • The "yellow" status is false positive. Caused by table→figure routing, not real figure quality issues.
  • Fix path: In role classification: if raw_label=figure_title and adjacent to <table> block → assign table_caption role instead.