# The six per-line signals, cheap, deterministic, engine-agnostic. from docintel.parsing.pdf.toc.body_structure import ( enrich_line_df_with_style, score_font_size_ratio, score_is_bold, score_has_numeric_prefix, score_is_short, score_is_left_aligned, score_has_blank_before, ) line_df = enrich_line_df_with_style(line_df, span_df) signals = { "font_size_ratio": score_font_size_ratio(line_df), "is_bold": score_is_bold(line_df), "has_numeric_prefix":score_has_numeric_prefix(line_df), "is_short": score_is_short(line_df), "is_left_aligned": score_is_left_aligned(line_df), "has_blank_before": score_has_blank_before(line_df), }