lllin000_PaperForge/tests/test_ocr_render_stabilization.py
2026-06-05 13:31:50 +08:00

97 lines
3.9 KiB
Python

from __future__ import annotations
def test_stabilize_render_suppresses_frontmatter_noise() -> None:
from paperforge.worker.ocr_render import render_fulltext_markdown
structured_blocks = [
{"paper_id": "KEY001", "page": 1, "block_id": "b1", "role": "section_heading", "text": "OPEN ACCESS", "render_default": True},
{"paper_id": "KEY001", "page": 1, "block_id": "b2", "role": "section_heading", "text": "CITATION", "render_default": True},
{"paper_id": "KEY001", "page": 1, "block_id": "b3", "role": "body_paragraph", "text": "Real body text should render.", "render_default": True},
]
md = render_fulltext_markdown(
structured_blocks=structured_blocks,
resolved_metadata={},
figure_inventory={},
table_inventory={},
)
assert "OPEN ACCESS" not in md
assert "CITATION" not in md
assert "Real body text should render." in md
def test_stabilize_render_output_starts_with_metadata_and_abstract() -> None:
from paperforge.worker.ocr_render import render_fulltext_markdown
resolved_metadata = {
"title": {"value": "Test Paper Title"},
"authors": {"value": ["Author A", "Author B"]},
"journal": {"value": "Test Journal"},
"year": {"value": 2025},
"doi": {"value": "10.1000/xyz"},
}
structured_blocks = [
{"paper_id": "KEY001", "page": 1, "block_id": "b1", "role": "abstract_heading", "text": "Abstract", "render_default": True},
{"paper_id": "KEY001", "page": 1, "block_id": "b2", "role": "abstract_body", "text": "This is the abstract text.", "render_default": True},
{"paper_id": "KEY001", "page": 2, "block_id": "b3", "role": "section_heading", "text": "1 Introduction", "render_default": True},
]
md = render_fulltext_markdown(
structured_blocks=structured_blocks,
resolved_metadata=resolved_metadata,
figure_inventory={},
table_inventory={},
)
lines = md.strip().split("\n")
assert lines[0].startswith("# Test Paper Title")
title_idx = next(i for i, l in enumerate(lines) if l.startswith("# Test"))
abstract_idx = next(i for i, l in enumerate(lines) if "Abstract" in l and l.startswith("##"))
intro_idx = next(i for i, l in enumerate(lines) if "Introduction" in l)
assert title_idx < abstract_idx < intro_idx
def test_stabilize_figure_not_appended_at_end() -> None:
from paperforge.worker.ocr_render import render_fulltext_markdown
structured_blocks = [
{"paper_id": "KEY001", "page": 1, "block_id": "b1", "role": "body_paragraph", "text": "Body text.", "render_default": True},
{"paper_id": "KEY001", "page": 2, "block_id": "b2", "role": "figure_caption", "text": "Figure 1. Results.", "render_default": True},
{"paper_id": "KEY001", "page": 3, "block_id": "b3", "role": "section_heading", "text": "2 Discussion", "render_default": True},
]
figure_inventory = {
"matched_figures": [{"figure_id": "fig_001", "page": 2}],
}
md = render_fulltext_markdown(
structured_blocks=structured_blocks,
resolved_metadata={},
figure_inventory=figure_inventory,
table_inventory={},
)
discussion_idx = md.index("2 Discussion")
fig_link_idx = md.index("![[render/figures/fig_001.md]]")
assert fig_link_idx < discussion_idx
def test_stabilize_latex_normalization() -> None:
from paperforge.worker.ocr_render import render_fulltext_markdown
structured_blocks = [
{"paper_id": "KEY001", "page": 1, "block_id": "b1", "role": "body_paragraph",
"text": "Expression $ ^{1} $ and $ ^{\\u2020} $ should be compact.", "render_default": True},
]
md = render_fulltext_markdown(
structured_blocks=structured_blocks,
resolved_metadata={},
figure_inventory={},
table_inventory={},
)
assert "$^{1}$" in md
assert "$ ^{1} $" not in md
assert "$^{\\u2020}$" in md or "$^{†}$" in md