hoang.nguyen6
deploy
f66643d unverified
Raw
History Blame Contribute Delete
3.06 kB
"""Enums and label mappings for the scanned PDF pipeline.
This module contains:
- ElementCategory: The 5 translation handling categories
- SuryaLabel: String constants for Surya's hyphenated labels
- SURYA_LABEL_MAP: Mapping from Surya labels to ElementCategory
- DEFAULT_CATEGORY: Fallback for unknown labels
"""
from enum import Enum
class ElementCategory(str, Enum):
"""Categories determining how downstream stages handle each element.
Values:
BYPASS: Pixel-copy from original; never translate (Picture, Figure, Form)
FLOWING_TEXT: Translate full source_text; may merge adjacent blocks
IN_PLACE: Translate source_text; render at exact bbox position
TABLE: Translate each cell's source_text; render cell grid
EQUATION: source_text contains extracted OCR text to translate;
equation_words preserves word-level OCR boxes for precise placement
"""
BYPASS = "BYPASS"
FLOWING_TEXT = "FLOWING_TEXT"
IN_PLACE = "IN_PLACE"
TABLE = "TABLE"
EQUATION = "EQUATION"
class SuryaLabel:
"""String constants for Surya layout labels (v0.9+ hyphenated format).
These match the exact strings returned by Surya's LayoutPredictor.
"""
# Text elements -> FLOWING_TEXT
TEXT = "Text"
LIST_ITEM = "ListItem"
FOOTNOTE = "Footnote"
# Headers/footers/captions -> IN_PLACE
SECTION_HEADER = "SectionHeader"
PAGE_HEADER = "PageHeader"
PAGE_FOOTER = "PageFooter"
CAPTION = "Caption"
TABLE_OF_CONTENTS = "TableOfContents"
# Graphics -> BYPASS
PICTURE = "Picture"
FIGURE = "Figure"
FORM = "Form"
# Tables -> TABLE
TABLE = "Table"
# Math -> EQUATION
EQUATION = "Equation"
# Code
CODE = "Code"
# Mapping from Surya labels to ElementCategory
SURYA_LABEL_MAP: dict[str, ElementCategory] = {
# FLOWING_TEXT: regular text blocks that can be translated and reflowed
SuryaLabel.TEXT: ElementCategory.FLOWING_TEXT,
SuryaLabel.LIST_ITEM: ElementCategory.FLOWING_TEXT,
SuryaLabel.FOOTNOTE: ElementCategory.FLOWING_TEXT,
# IN_PLACE: text that must be rendered at exact position
SuryaLabel.SECTION_HEADER: ElementCategory.FLOWING_TEXT,
SuryaLabel.PAGE_HEADER: ElementCategory.FLOWING_TEXT,
SuryaLabel.PAGE_FOOTER: ElementCategory.FLOWING_TEXT,
SuryaLabel.CAPTION: ElementCategory.IN_PLACE,
SuryaLabel.TABLE_OF_CONTENTS: ElementCategory.IN_PLACE,
# BYPASS: graphics that should be copied without modification
SuryaLabel.PICTURE: ElementCategory.BYPASS,
SuryaLabel.FIGURE: ElementCategory.BYPASS,
SuryaLabel.FORM: ElementCategory.FLOWING_TEXT,
# TABLE: structured data requiring cell-level translation
SuryaLabel.TABLE: ElementCategory.TABLE,
# EQUATION: math content to be preserved as-is
SuryaLabel.EQUATION: ElementCategory.EQUATION,
# CODE: programming code blocks (treat as IN_PLACE for now)
SuryaLabel.CODE: ElementCategory.BYPASS,
}
# Default category for unknown Surya labels
DEFAULT_CATEGORY = ElementCategory.FLOWING_TEXT