agentic-os/newspaper-extractor/backend/app/pipeline/headline.py

16 lines
660 B
Python

def detect_headline(article, page, ocr_engine):
tb = article.get("title_block")
if tb:
text, _ = ocr_engine.extract_text(page, _xywh(tb["bbox"]), page["native_words"])
return text.strip().split("\n")[0]
# Fallback: largest-font text block
# font size ~ block height / line count
candidates = sorted(article["blocks"], key=lambda b: b["bbox"][3]-b["bbox"][1], reverse=True)
if candidates:
text, _ = ocr_engine.extract_text(page, _xywh(candidates[0]["bbox"]), page["native_words"])
return text.strip().split("\n")[0]
return ""
def _xywh(box):
return [box[0], box[1], box[2]-box[0], box[3]-box[1]]