54 lines
2.7 KiB
Python
54 lines
2.7 KiB
Python
import os, tempfile, contextlib, io, json, sys, 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
|
|
|
|
# Replays the POLITICAL crop step (no API): saved political_result.json member ids
|
|
# + freshly recomputed region prep chain -> crop_political_articles (block-snap).
|
|
RUNS = [
|
|
("sakshi", Path("output/Sakshi_Jangaon_District_20260520_20260609_210104"), [1]),
|
|
("andhra_jyothi", Path("output/AndhraJyothi_Siddipet District_20260602_20260603_144919"), [2, 3, 4]),
|
|
("namaste_telangana", Path("output/NamastheTelangana_Jangaon_20260520_20260608_124720"), [1]),
|
|
]
|
|
for paper, RUN, pages in RUNS:
|
|
se._ACTIVE_PAPER = paper
|
|
D = RUN / "pages"
|
|
OUT = RUN / "articles_review"
|
|
if OUT.exists():
|
|
shutil.rmtree(OUT)
|
|
for pg in pages:
|
|
png = str(D / f"page_{pg:03d}.png")
|
|
prf = D / f"page_{pg:03d}.political_result.json"
|
|
if not prf.exists() or not os.path.exists(png):
|
|
continue
|
|
political = json.load(open(prf)).get("political_articles", [])
|
|
if not political:
|
|
continue
|
|
regs = json.loads((D / f"page_{pg:03d}.regions.json").read_text())["regions"]
|
|
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)
|
|
if paper == "sakshi":
|
|
regs = se.detect_sakshi_headline_bands(regs, png)
|
|
regs = se.mark_bullet_titles(regs, png)
|
|
ds = se.find_article_starts_by_dateline(regs, png, paper)
|
|
bars = separator_barriers(png, regs)
|
|
_p = se.cluster_all_article_blocks(regs, ds, sep_lines=bars)
|
|
if se.recover_orphan_text_headlines(_p, regs, png):
|
|
ds = se.find_article_starts_by_dateline(regs, png, paper)
|
|
recs = se.crop_political_articles(png, political, regs, OUT, pg,
|
|
dateline_starts=ds, sep_lines=bars)
|
|
print(f"=== {RUN.name} page {pg}: {len(political)} political -> {len(recs)} crops")
|
|
for l in buf.getvalue().splitlines():
|
|
if any(k in l for k in ("Block-snap", "Cropped:", "Clipped", "Floored", "Grew",
|
|
"Banner", "block-snap unavailable")):
|
|
print(" ", l.strip())
|
|
print("DONE")
|