import os,tempfile,contextlib,io,json,shutil tempfile.tempdir=os.path.abspath("_tess_tmp"); os.environ["TMPDIR"]=tempfile.tempdir os.makedirs("_tess_tmp",exist_ok=True) from pathlib import Path import smart_extractor as se from _lines import separator_barriers RUN=Path("output/AndhraJyothi_Siddipet District_20260602_20260603_144919"); D=RUN/"pages" OUT=RUN/"all_article_crops_final"; PAPER="andhra_jyothi" if OUT.exists(): shutil.rmtree(OUT) for pg in (1,2,3,4): png=str(D/f"page_{pg:03d}.png") regs=json.loads((D/f"page_{pg:03d}.regions.json").read_text())["regions"] # 0.5 saved buf=io.StringIO() with contextlib.redirect_stdout(buf): regs=se.dedup_overlapping_regions(regs) regs=se.merge_stacked_title_lines(regs,png) regs=se.drop_masthead_regions(regs,PAPER,pg,png) regs=se.drop_classifieds_regions(regs,png) regs=se.tag_legal_notices(regs,png) regs=se.promote_paragraph_titles(regs,png,PAPER) regs=se.mark_bullet_titles(regs,png) bars=separator_barriers(png,regs) ds=se.find_article_starts_by_dateline(regs,png,PAPER) _probe=se.cluster_all_article_blocks(regs,ds,sep_lines=bars) if se.recover_orphan_text_headlines(_probe,regs,png): ds=se.find_article_starts_by_dateline(regs,png,PAPER) blocks=se.cluster_all_article_blocks(regs,ds,sep_lines=bars) se.draw_boundary_map_debug(png,regs,D,pg,dateline_starts=ds,sep_lines=bars) n=se.crop_all_article_blocks(png,regs,str(OUT),pg,dateline_starts=ds,sep_lines=bars) log=buf.getvalue() tags={k:sum(1 for l in log.splitlines() if k in l) for k in ["bullet titles flagged","Headline-strip","Floor-trim","Block dateline split", "Multi-column body","orphan overlap"]} tags={k:v//2 if k in ("Headline-strip","Floor-trim","Multi-column body","Block dateline split","orphan overlap") else v for k,v in tags.items()} print(f"page {pg}: {n} crops, {len(ds)} datelines | "+", ".join(f"{k}:{v}" for k,v in tags.items() if v)) print("DONE ->",OUT)