refactor: remove legacy debug logs, temporary test files, and obsolete analysis scripts

This commit is contained in:
Deep Koluguri 2026-06-13 11:43:37 -04:00
parent aac99aded7
commit 075c3d6722
176 changed files with 0 additions and 7737 deletions

View File

@ -1,5 +0,0 @@
page 1: 12 crops, 9 datelines | Headline-strip:2, Floor-trim:2, orphan overlap:2
page 2: 18 crops, 18 datelines | bullet titles flagged:1, Headline-strip:2
page 3: 14 crops, 7 datelines | bullet titles flagged:1
page 4: 21 crops, 18 datelines | bullet titles flagged:1, Headline-strip:2, Block dateline split:2, Multi-column body:2
DONE -> output/AndhraJyothi_Siddipet District_20260602_20260603_144919/all_article_crops_final

View File

@ -1,5 +0,0 @@
page 1: 12 crops, 9 datelines | Headline-strip:2, Floor-trim:2, orphan overlap:2
page 2: 18 crops, 18 datelines | bullet titles flagged:1, Headline-strip:2
page 3: 14 crops, 7 datelines | bullet titles flagged:1
page 4: 21 crops, 18 datelines | bullet titles flagged:1, Headline-strip:2, Block dateline split:2, Multi-column body:2
DONE -> output/AndhraJyothi_Siddipet District_20260602_20260603_144919/all_article_crops_final

View File

@ -1,5 +0,0 @@
page 1: 12 crops, 9 datelines | Headline-strip:2, Floor-trim:2, orphan overlap:2
page 2: 18 crops, 18 datelines | bullet titles flagged:1, Headline-strip:2
page 3: 14 crops, 7 datelines | bullet titles flagged:1
page 4: 21 crops, 18 datelines | bullet titles flagged:1, Headline-strip:2, Block dateline split:2, Multi-column body:2
DONE -> output/AndhraJyothi_Siddipet District_20260602_20260603_144919/all_article_crops_final

View File

@ -1,5 +0,0 @@
page 1: 12 crops, 9 datelines | Headline-strip:2, Floor-trim:2, orphan overlap:2
page 2: 18 crops, 18 datelines | bullet titles flagged:1, Headline-strip:2
page 3: 14 crops, 7 datelines | bullet titles flagged:1
page 4: 21 crops, 18 datelines | bullet titles flagged:1, Headline-strip:2, Block dateline split:2, Multi-column body:2
DONE -> output/AndhraJyothi_Siddipet District_20260602_20260603_144919/all_article_crops_final

View File

@ -1,5 +0,0 @@
page 1: 12 crops, 9 datelines | Headline-strip:2, Floor-trim:2, orphan overlap:2
page 2: 18 crops, 18 datelines | bullet titles flagged:1, Headline-strip:2
page 3: 14 crops, 7 datelines | bullet titles flagged:1
page 4: 21 crops, 18 datelines | bullet titles flagged:1, Headline-strip:2, Block dateline split:2, Multi-column body:2
DONE -> output/AndhraJyothi_Siddipet District_20260602_20260603_144919/all_article_crops_final

View File

@ -1,5 +0,0 @@
page 1: 12 crops, 9 datelines | Headline-strip:2, Floor-trim:2, orphan overlap:2
page 2: 18 crops, 18 datelines | bullet titles flagged:1, Headline-strip:2
page 3: 14 crops, 7 datelines | bullet titles flagged:1
page 4: 21 crops, 18 datelines | bullet titles flagged:1, Headline-strip:2, Block dateline split:2, Multi-column body:2
DONE -> output/AndhraJyothi_Siddipet District_20260602_20260603_144919/all_article_crops_final

View File

@ -1,4 +0,0 @@
R16 text bbox=[119, 616, 612, 1899] phones=3 kw=[] :: జనగామ, మే 19 (నమస్తే తెలంగాణ) : ఆల్‌ ఇండియా కెమిస్
R89 paragraph_title bbox=[121, 2887, 595, 2978] phones=0 kw=['in the court'] :: IN THE COURT OF THE HONBLE JUNIOR CIVIL JUDGE AT G
R93 text bbox=[174, 4010, 545, 4080] phones=1 kw=['advocate'] :: ADVOCATE - JANGAON Cell: 9848259371
R87 text bbox=[150, 5143, 604, 6267] phones=8 kw=['classified', 'contact'] :: For Classified Ads Please Contact... 9182777552 HA

View File

@ -1,34 +0,0 @@
import sys, json, contextlib, io
sys.path.insert(0, ".")
from pathlib import Path
import smart_extractor as se
from _lines import separator_barriers
D = Path("output/AndhraJyothi_Siddipet District_20260602_20260603_144919/pages")
def blocks_for(pg, strip_mc):
png = D / f"page_{pg:03d}.png"
regs = json.loads((D / f"page_{pg:03d}.regions.json").read_text())["regions"]
regs = se.drop_masthead_regions(regs, "andhra_jyothi", pg, png)
ds = se.find_article_starts_by_dateline(regs, str(png), "andhra_jyothi")
bars = separator_barriers(str(png), regs)
if strip_mc:
bars = [{k: v for k, v in b.items() if k not in ("mc", "anchor")} for b in bars]
bl = se.cluster_all_article_blocks(regs, dateline_starts=ds, sep_lines=bars)
return {b["anchor_id"]: tuple(sorted(b["members"])) for b in bl}
for pg in (1, 2, 3, 4):
with contextlib.redirect_stdout(io.StringIO()):
cur = blocks_for(pg, False)
base = blocks_for(pg, True)
print(f"==== PAGE {pg} ====")
changed = False
for k in sorted(set(cur) | set(base)):
if cur.get(k) != base.get(k):
changed = True
print(f" anchor {k}: base={base.get(k)}")
print(f" curr={cur.get(k)}")
if not changed:
print(" (no change from mc clamp)")

View File

@ -1,18 +0,0 @@
import sys, json
sys.path.insert(0, ".")
from pathlib import Path
import smart_extractor as se
from _lines import separator_barriers
D = Path("output/AndhraJyothi_Siddipet District_20260602_20260603_144919/pages")
png = D / "page_001.png"
regs0 = json.loads((D / "page_001.regions.json").read_text())["regions"]
regs = se.drop_masthead_regions(regs0, "andhra_jyothi", 1, png)
ds = se.find_article_starts_by_dateline(regs, str(png), "andhra_jyothi")
bars = separator_barriers(str(png), regs)
bl = se.cluster_all_article_blocks(regs, dateline_starts=ds, sep_lines=bars)
allmem = set()
for b in sorted(bl, key=lambda b: (b["bbox"][1], b["bbox"][0])):
allmem |= set(b["members"])
print(f" {b['kind']:>1} anchor={b['anchor_id']:>3} bbox={b['bbox']} members={sorted(b['members'])}")
present = {r["id"] for r in regs if r.get("type") not in ("header","number")}
print("MISSING (not in any block):", sorted(present - allmem))

View File

@ -1,40 +0,0 @@
import sys, json
sys.path.insert(0, "/Users/kranthikumar/Documents/telugu_extractor")
from pathlib import Path
import smart_extractor as se
D = Path("output/AndhraJyothi_Siddipet District_20260602_20260603_144919/pages")
def headline_above(regions, start_bboxes, body, max_gap):
cx = (body[0] + body[2]) / 2
cands = [r for r in regions
if (r.get("type") == "doc_title" or r.get("_promoted_from"))
and r["bbox"][0] <= cx <= r["bbox"][2]
and r["bbox"][3] <= body[1] + 40
and (body[1] - r["bbox"][3]) <= max_gap]
if not cands:
return None, None
h = max(cands, key=lambda r: r["bbox"][3])
gap = body[1] - h["bbox"][3]
for ob in start_bboxes:
if ob is body:
continue
ocx = (ob[0] + ob[2]) / 2
if h["bbox"][3] < ob[1] < body[1] and cx - 120 <= ocx <= cx + 120:
return None, gap
return h["id"], gap
for pg in (1, 2, 3, 4):
png = D / f"page_{pg:03d}.png"
regions = json.loads((D / f"page_{pg:03d}.regions.json").read_text())["regions"]
regions = se.drop_masthead_regions(regions, "andhra_jyothi", pg, png)
ds = se.find_article_starts_by_dateline(regions, str(png), "andhra_jyothi")
sb = [s["bbox"] for s in ds]
print(f"\n==== PAGE {pg} ====")
for s in ds:
rid = s["region_id"]
row = []
for g in (900, 1000, 1100, 1300):
hid, gap = headline_above(regions, sb, s["bbox"], g)
row.append(f"g{g}:R{hid}" )
print(f" DL R{rid:>3} gap_to_nearest_doc_title above -> " + " ".join(row))

View File

@ -1,36 +0,0 @@
=== page 1: 6 crops, 6 datelines ===
R 3 DL bbox=[1483,838,4073,3081] 2590x2243 mem=13 {'text': 8, 'image': 3, 'figure_title': 2}
R 4 DL bbox=[105,846,1467,4295] 1362x3449 mem=15 {'text': 11, 'image': 2, 'paragraph_title': 2}
R 28 H bbox=[1498,3089,3031,4921] 1533x1832 mem=13 {'text': 8, 'image': 1, 'doc_title': 1, 'paragraph_title': 2, 'figure_title': 1}
R 2 DL bbox=[3039,3957,4081,6269] 1042x2312 mem=4 {'text': 2, 'image': 1, 'figure_title': 1}
R 49 H RAW bbox=[106,4377,1429,6301] 1323x1924 mem=10 {'doc_title': 1, 'text': 5, 'image': 2, 'figure_title': 2}
R 29 H RAW bbox=[1500,5012,3211,6283] 1711x1271 mem=5 {'doc_title': 1, 'text': 2, 'figure_title': 1, 'image': 1}
[Containment-merge] x4
[Headline-merge] x2
[Banner rectangle] x4
=== page 2: 18 crops, 17 datelines ===
R109 H bbox=[119,393,612,1899] 493x1506 mem=2 {'doc_title': 1, 'text': 1}
R 79 H bbox=[2693,405,4087,1833] 1394x1428 mem=12 {'doc_title': 1, 'text': 7, 'image': 2, 'figure_title': 1, 'paragraph_title': 1}
R 55 H RAW bbox=[679,415,2630,1919] 1951x1504 mem=14 {'doc_title': 1, 'text': 9, 'image': 1, 'paragraph_title': 2, 'figure_title': 1}
R 77 H bbox=[2692,1594,4087,1903] 1395x309 mem=2 {'doc_title': 1, 'text': 1}
R 14 DL bbox=[2045,1950,3265,3097] 1220x1147 mem=6 {'text': 3, 'image': 1, 'figure_title': 1, 'paragraph_title': 1}
R 65 H bbox=[113,1958,1975,2859] 1862x901 mem=8 {'text': 5, 'image': 1, 'doc_title': 1, 'figure_title': 1}
R 96 H bbox=[3326,1964,4087,3638] 761x1674 mem=4 {'doc_title': 1, 'text': 2, 'image': 1}
R 89 L bbox=[118,2887,595,4080] 477x1193 mem=5 {'text': 4, 'paragraph_title': 1}
R 86 H bbox=[682,2894,1977,4292] 1295x1398 mem=8 {'text': 4, 'image': 1, 'paragraph_title': 2, 'doc_title': 1}
R 64 H bbox=[2046,3116,3263,3907] 1217x791 mem=6 {'text': 3, 'image': 1, 'figure_title': 1, 'doc_title': 1}
R 97 H bbox=[3324,3756,4087,4627] 763x871 mem=2 {'doc_title': 1, 'text': 1}
R 84 H bbox=[2046,3920,3264,4820] 1218x900 mem=6 {'text': 3, 'image': 1, 'figure_title': 1, 'paragraph_title': 1}
R 44 F bbox=[123,4139,626,5113] 503x974 mem=4 {'text': 2, 'image': 1, 'paragraph_title': 1}
R112 H bbox=[682,4325,1975,5056] 1293x731 mem=5 {'text': 2, 'image': 1, 'figure_title': 1, 'doc_title': 1}
R 58 H bbox=[3322,4658,4087,5831] 765x1173 mem=2 {'doc_title': 1, 'text': 1}
R110 H bbox=[2044,4858,3265,5685] 1221x827 mem=7 {'doc_title': 1, 'text': 4, 'image': 1, 'paragraph_title': 1}
R 75 H RAW bbox=[680,5078,1975,5692] 1295x614 mem=5 {'doc_title': 1, 'image': 1, 'text': 2, 'figure_title': 1}
R 59 H RAW bbox=[680,5731,3267,6318] 2587x587 mem=7 {'doc_title': 2, 'text': 5}
R 7 DL bbox=[3308,5839,4087,6305] 779x466 mem=1 {'text': 1} SINGLE-region
[Containment-merge] x10
[Banner rectangle] x8
DONE -> output/NamastheTelangana_Jangaon_20260520_20260609_130635/all_article_crops_review

View File

@ -1,36 +0,0 @@
=== page 1: 6 crops, 6 datelines ===
R 3 DL bbox=[1497,137,4081,3023] 2584x2886 mem=8 {'text': 7, 'image': 1}
R 4 DL bbox=[105,145,1467,4295] 1362x4150 mem=15 {'text': 11, 'image': 2, 'paragraph_title': 2}
R 28 H bbox=[1498,838,3031,4921] 1533x4083 mem=18 {'doc_title': 1, 'text': 9, 'image': 3, 'paragraph_title': 2, 'figure_title': 3}
R 2 DL bbox=[3039,3957,4081,5748] 1042x1791 mem=3 {'text': 1, 'image': 1, 'figure_title': 1}
R 49 H RAW bbox=[106,4377,1429,6301] 1323x1924 mem=10 {'doc_title': 1, 'text': 5, 'image': 2, 'figure_title': 2}
R 29 H RAW bbox=[1500,5012,4081,6283] 2581x1271 mem=6 {'doc_title': 1, 'text': 3, 'image': 1, 'figure_title': 1}
[Containment-merge] x2
[Headline-merge] x2
[Banner rectangle] x4
=== page 2: 18 crops, 17 datelines ===
R109 H bbox=[119,393,612,1899] 493x1506 mem=2 {'doc_title': 1, 'text': 1}
R 79 H bbox=[2693,405,4087,1833] 1394x1428 mem=12 {'doc_title': 1, 'text': 7, 'image': 2, 'figure_title': 1, 'paragraph_title': 1}
R 55 H RAW bbox=[679,415,2630,1919] 1951x1504 mem=14 {'doc_title': 1, 'text': 9, 'image': 1, 'paragraph_title': 2, 'figure_title': 1}
R 77 H bbox=[2692,1594,4087,1903] 1395x309 mem=2 {'doc_title': 1, 'text': 1}
R 14 DL bbox=[2045,1950,3265,3097] 1220x1147 mem=6 {'text': 3, 'image': 1, 'figure_title': 1, 'paragraph_title': 1}
R 65 H bbox=[113,1958,1975,2859] 1862x901 mem=8 {'text': 5, 'image': 1, 'doc_title': 1, 'figure_title': 1}
R 96 H bbox=[3326,1964,4087,3638] 761x1674 mem=4 {'doc_title': 1, 'text': 2, 'image': 1}
R 89 L bbox=[118,2887,595,4080] 477x1193 mem=5 {'text': 4, 'paragraph_title': 1}
R 86 H bbox=[682,2894,1977,4292] 1295x1398 mem=8 {'text': 4, 'image': 1, 'paragraph_title': 2, 'doc_title': 1}
R 64 H bbox=[2046,3116,3263,3907] 1217x791 mem=6 {'text': 3, 'image': 1, 'figure_title': 1, 'doc_title': 1}
R 97 H bbox=[3324,3756,4087,4627] 763x871 mem=2 {'doc_title': 1, 'text': 1}
R 84 H bbox=[2046,3920,3264,4820] 1218x900 mem=6 {'text': 3, 'image': 1, 'figure_title': 1, 'paragraph_title': 1}
R 44 F bbox=[123,4139,626,5113] 503x974 mem=4 {'text': 2, 'image': 1, 'paragraph_title': 1}
R112 H bbox=[682,4325,1975,5056] 1293x731 mem=5 {'text': 2, 'image': 1, 'figure_title': 1, 'doc_title': 1}
R 58 H bbox=[3322,4658,4087,5831] 765x1173 mem=2 {'doc_title': 1, 'text': 1}
R110 H bbox=[2044,4858,3265,5685] 1221x827 mem=7 {'doc_title': 1, 'text': 4, 'image': 1, 'paragraph_title': 1}
R 75 H RAW bbox=[680,5078,1975,5692] 1295x614 mem=5 {'doc_title': 1, 'image': 1, 'text': 2, 'figure_title': 1}
R 59 H RAW bbox=[680,5731,3267,6318] 2587x587 mem=7 {'doc_title': 2, 'text': 5}
R 7 DL bbox=[3308,5839,4087,6305] 779x466 mem=1 {'text': 1} SINGLE-region
[Containment-merge] x10
[Banner rectangle] x8
DONE -> output/NamastheTelangana_Jangaon_20260520_20260609_130635/all_article_crops_review

View File

@ -1,36 +0,0 @@
=== page 1: 6 crops, 6 datelines ===
R 3 DL bbox=[1497,137,4081,3023] 2584x2886 mem=8 {'text': 7, 'image': 1}
R 4 DL bbox=[105,145,1467,4295] 1362x4150 mem=15 {'text': 11, 'image': 2, 'paragraph_title': 2}
R 28 H bbox=[1498,838,3031,4921] 1533x4083 mem=18 {'doc_title': 1, 'text': 9, 'image': 3, 'paragraph_title': 2, 'figure_title': 3}
R 2 DL bbox=[3039,3957,4081,5748] 1042x1791 mem=3 {'text': 1, 'image': 1, 'figure_title': 1}
R 49 H RAW bbox=[106,4377,1429,6301] 1323x1924 mem=10 {'doc_title': 1, 'text': 5, 'image': 2, 'figure_title': 2}
R 29 H RAW bbox=[1500,5012,4081,6283] 2581x1271 mem=6 {'doc_title': 1, 'text': 3, 'image': 1, 'figure_title': 1}
[Containment-merge] x2
[Headline-merge] x2
[Banner rectangle] x4
=== page 2: 18 crops, 17 datelines ===
R109 H bbox=[119,393,612,1899] 493x1506 mem=2 {'doc_title': 1, 'text': 1}
R 79 H bbox=[2693,405,4087,1833] 1394x1428 mem=12 {'doc_title': 1, 'text': 7, 'image': 2, 'figure_title': 1, 'paragraph_title': 1}
R 55 H RAW bbox=[679,415,2630,1919] 1951x1504 mem=14 {'doc_title': 1, 'text': 9, 'image': 1, 'paragraph_title': 2, 'figure_title': 1}
R 77 H bbox=[2692,1594,4087,1903] 1395x309 mem=2 {'doc_title': 1, 'text': 1}
R 14 DL bbox=[2045,1950,3265,3097] 1220x1147 mem=6 {'text': 3, 'image': 1, 'figure_title': 1, 'paragraph_title': 1}
R 65 H bbox=[113,1958,1975,2859] 1862x901 mem=8 {'text': 5, 'image': 1, 'doc_title': 1, 'figure_title': 1}
R 96 H bbox=[3326,1964,4087,3638] 761x1674 mem=4 {'doc_title': 1, 'text': 2, 'image': 1}
R 89 L bbox=[118,2887,595,4080] 477x1193 mem=5 {'text': 4, 'paragraph_title': 1}
R 86 H bbox=[682,2894,1977,4292] 1295x1398 mem=8 {'text': 4, 'image': 1, 'paragraph_title': 2, 'doc_title': 1}
R 64 H bbox=[2046,3116,3263,3907] 1217x791 mem=6 {'text': 3, 'image': 1, 'figure_title': 1, 'doc_title': 1}
R 97 H bbox=[3324,3756,4087,4627] 763x871 mem=2 {'doc_title': 1, 'text': 1}
R 84 H bbox=[2046,3920,3264,4820] 1218x900 mem=6 {'text': 3, 'image': 1, 'figure_title': 1, 'paragraph_title': 1}
R 44 F bbox=[123,4139,626,5113] 503x974 mem=4 {'text': 2, 'image': 1, 'paragraph_title': 1}
R112 H bbox=[682,4325,1975,5056] 1293x731 mem=5 {'text': 2, 'image': 1, 'figure_title': 1, 'doc_title': 1}
R 58 H bbox=[3322,4658,4087,5831] 765x1173 mem=2 {'doc_title': 1, 'text': 1}
R110 H bbox=[2044,4858,3265,5685] 1221x827 mem=7 {'doc_title': 1, 'text': 4, 'image': 1, 'paragraph_title': 1}
R 75 H RAW bbox=[680,5078,1975,5692] 1295x614 mem=5 {'doc_title': 1, 'image': 1, 'text': 2, 'figure_title': 1}
R 59 H RAW bbox=[680,5731,3267,6318] 2587x587 mem=7 {'doc_title': 2, 'text': 5}
R 7 DL bbox=[3308,5839,4087,6305] 779x466 mem=1 {'text': 1} SINGLE-region
[Containment-merge] x10
[Banner rectangle] x8
DONE -> output/NamastheTelangana_Jangaon_20260520_20260609_130635/all_article_crops_review

View File

@ -1,38 +0,0 @@
=== page 1: 6 crops, 6 datelines ===
R 3 DL bbox=[1497,137,4081,3023] 2584x2886 mem=8 {'text': 7, 'image': 1}
R 4 DL bbox=[105,145,1467,4295] 1362x4150 mem=15 {'text': 11, 'image': 2, 'paragraph_title': 2}
R 28 H bbox=[1498,838,3031,4921] 1533x4083 mem=18 {'doc_title': 1, 'text': 9, 'image': 3, 'paragraph_title': 2, 'figure_title': 3}
R 2 DL bbox=[3039,3957,4081,5748] 1042x1791 mem=3 {'text': 1, 'image': 1, 'figure_title': 1}
R 49 H RAW bbox=[106,4377,1429,6301] 1323x1924 mem=10 {'doc_title': 1, 'text': 5, 'image': 2, 'figure_title': 2}
R 29 H RAW bbox=[1500,5012,4081,6283] 2581x1271 mem=6 {'doc_title': 1, 'text': 3, 'image': 1, 'figure_title': 1}
[Containment-merge] x2
[Headline-merge] x2
[Banner rectangle] x4
=== page 2: 18 crops, 17 datelines ===
R109 H bbox=[119,393,612,1899] 493x1506 mem=2 {'doc_title': 1, 'text': 1}
R 79 H bbox=[2693,405,4087,1833] 1394x1428 mem=12 {'doc_title': 1, 'text': 7, 'image': 2, 'figure_title': 1, 'paragraph_title': 1}
R 55 H RAW bbox=[679,415,2630,1919] 1951x1504 mem=14 {'doc_title': 1, 'text': 9, 'image': 1, 'paragraph_title': 2, 'figure_title': 1}
R 77 H bbox=[2692,1594,4087,1903] 1395x309 mem=2 {'doc_title': 1, 'text': 1}
R 14 DL bbox=[2045,1950,3265,3097] 1220x1147 mem=6 {'text': 3, 'image': 1, 'figure_title': 1, 'paragraph_title': 1}
R 65 H bbox=[113,1958,1975,2859] 1862x901 mem=8 {'text': 5, 'image': 1, 'doc_title': 1, 'figure_title': 1}
R 96 H bbox=[3326,1964,4087,3638] 761x1674 mem=4 {'doc_title': 1, 'text': 2, 'image': 1}
R 89 L bbox=[118,2887,595,4080] 477x1193 mem=5 {'text': 4, 'paragraph_title': 1}
R 86 H bbox=[682,2894,1977,4292] 1295x1398 mem=8 {'text': 4, 'image': 1, 'paragraph_title': 2, 'doc_title': 1}
R 64 H bbox=[2046,3116,3263,3907] 1217x791 mem=6 {'text': 3, 'image': 1, 'figure_title': 1, 'doc_title': 1}
R 97 H bbox=[3324,3756,4087,4627] 763x871 mem=2 {'doc_title': 1, 'text': 1}
R 84 H bbox=[2046,3920,3264,4820] 1218x900 mem=6 {'text': 3, 'image': 1, 'figure_title': 1, 'paragraph_title': 1}
R 78 F bbox=[123,4139,626,4285] 503x146 mem=1 {'image': 1} IMG-ONLY(no text) SINGLE-region
R112 H bbox=[682,4325,1975,5056] 1293x731 mem=5 {'text': 2, 'image': 1, 'figure_title': 1, 'doc_title': 1}
R 82 F bbox=[137,4423,618,4782] 481x359 mem=2 {'text': 1, 'paragraph_title': 1}
R 58 H bbox=[3322,4658,4087,5831] 765x1173 mem=2 {'doc_title': 1, 'text': 1}
R 44 F bbox=[133,4811,616,5113] 483x302 mem=1 {'text': 1} SINGLE-region
R110 H bbox=[2044,4858,3265,5685] 1221x827 mem=7 {'doc_title': 1, 'text': 4, 'image': 1, 'paragraph_title': 1}
R 75 H RAW bbox=[680,5078,1975,5692] 1295x614 mem=5 {'doc_title': 1, 'image': 1, 'text': 2, 'figure_title': 1}
R 59 H RAW bbox=[680,5731,3267,6318] 2587x587 mem=7 {'doc_title': 2, 'text': 5}
R 7 DL bbox=[3308,5839,4087,6305] 779x466 mem=1 {'text': 1} SINGLE-region
[Containment-merge] x10
[Banner rectangle] x8
DONE -> output/NamastheTelangana_Jangaon_20260520_20260609_130635/all_article_crops_review

View File

@ -1,36 +0,0 @@
=== page 1: 6 crops, 6 datelines ===
R 3 DL bbox=[1497,137,4081,3023] 2584x2886 mem=8 {'text': 7, 'image': 1}
R 4 DL bbox=[105,145,1467,4295] 1362x4150 mem=15 {'text': 11, 'image': 2, 'paragraph_title': 2}
R 28 H bbox=[1498,838,3031,4921] 1533x4083 mem=18 {'doc_title': 1, 'text': 9, 'image': 3, 'paragraph_title': 2, 'figure_title': 3}
R 2 DL bbox=[3039,3957,4081,5748] 1042x1791 mem=3 {'text': 1, 'image': 1, 'figure_title': 1}
R 49 H RAW bbox=[106,4377,1429,6301] 1323x1924 mem=10 {'doc_title': 1, 'text': 5, 'image': 2, 'figure_title': 2}
R 29 H RAW bbox=[1500,5012,4081,6283] 2581x1271 mem=6 {'doc_title': 1, 'text': 3, 'image': 1, 'figure_title': 1}
[Containment-merge] x2
[Headline-merge] x2
[Banner rectangle] x4
=== page 2: 18 crops, 17 datelines ===
R109 H bbox=[119,393,612,1899] 493x1506 mem=2 {'doc_title': 1, 'text': 1}
R 79 H bbox=[2693,405,4087,1833] 1394x1428 mem=12 {'doc_title': 1, 'text': 7, 'image': 2, 'figure_title': 1, 'paragraph_title': 1}
R 55 H RAW bbox=[679,415,2630,1919] 1951x1504 mem=14 {'doc_title': 1, 'text': 9, 'image': 1, 'paragraph_title': 2, 'figure_title': 1}
R 77 H bbox=[2692,1594,4087,1903] 1395x309 mem=2 {'doc_title': 1, 'text': 1}
R 14 DL bbox=[2045,1950,3265,3097] 1220x1147 mem=6 {'text': 3, 'image': 1, 'figure_title': 1, 'paragraph_title': 1}
R 65 H bbox=[113,1958,1975,2859] 1862x901 mem=8 {'text': 5, 'image': 1, 'doc_title': 1, 'figure_title': 1}
R 96 H bbox=[3326,1964,4087,3638] 761x1674 mem=4 {'doc_title': 1, 'text': 2, 'image': 1}
R 89 L bbox=[118,2887,595,4080] 477x1193 mem=5 {'text': 4, 'paragraph_title': 1}
R 86 H bbox=[682,2894,1977,4292] 1295x1398 mem=8 {'text': 4, 'image': 1, 'paragraph_title': 2, 'doc_title': 1}
R 64 H bbox=[2046,3116,3263,3907] 1217x791 mem=6 {'text': 3, 'image': 1, 'figure_title': 1, 'doc_title': 1}
R 97 H bbox=[3324,3756,4087,4627] 763x871 mem=2 {'doc_title': 1, 'text': 1}
R 84 H bbox=[2046,3920,3264,4820] 1218x900 mem=6 {'text': 3, 'image': 1, 'figure_title': 1, 'paragraph_title': 1}
R 44 F bbox=[123,4139,626,5113] 503x974 mem=4 {'text': 2, 'image': 1, 'paragraph_title': 1}
R112 H bbox=[682,4325,1975,5056] 1293x731 mem=5 {'text': 2, 'image': 1, 'figure_title': 1, 'doc_title': 1}
R 58 H bbox=[3322,4658,4087,5831] 765x1173 mem=2 {'doc_title': 1, 'text': 1}
R110 H bbox=[2044,4858,3265,5685] 1221x827 mem=7 {'doc_title': 1, 'text': 4, 'image': 1, 'paragraph_title': 1}
R 75 H RAW bbox=[680,5078,1975,5692] 1295x614 mem=5 {'doc_title': 1, 'image': 1, 'text': 2, 'figure_title': 1}
R 59 H RAW bbox=[680,5731,3267,6318] 2587x587 mem=7 {'doc_title': 2, 'text': 5}
R 7 DL bbox=[3308,5839,4087,6305] 779x466 mem=1 {'text': 1} SINGLE-region
[Containment-merge] x10
[Banner rectangle] x8
DONE -> output/NamastheTelangana_Jangaon_20260520_20260609_130635/all_article_crops_review

View File

@ -1,36 +0,0 @@
=== page 1: 6 crops, 6 datelines ===
R 3 DL bbox=[1497,137,4081,3023] 2584x2886 mem=8 {'text': 7, 'image': 1}
R 4 DL bbox=[105,145,1467,4295] 1362x4150 mem=15 {'text': 11, 'image': 2, 'paragraph_title': 2}
R 28 H bbox=[1498,838,3031,4921] 1533x4083 mem=18 {'doc_title': 1, 'text': 9, 'image': 3, 'paragraph_title': 2, 'figure_title': 3}
R 2 DL bbox=[3039,3957,4081,5748] 1042x1791 mem=3 {'text': 1, 'image': 1, 'figure_title': 1}
R 49 H RAW bbox=[106,4377,1429,6301] 1323x1924 mem=10 {'doc_title': 1, 'text': 5, 'image': 2, 'figure_title': 2}
R 29 H RAW bbox=[1500,5012,4081,6283] 2581x1271 mem=6 {'doc_title': 1, 'text': 3, 'image': 1, 'figure_title': 1}
[Containment-merge] x2
[Headline-merge] x2
[Banner rectangle] x4
=== page 2: 18 crops, 17 datelines ===
R109 H bbox=[119,393,612,1899] 493x1506 mem=2 {'doc_title': 1, 'text': 1}
R 79 H bbox=[2693,405,4087,1833] 1394x1428 mem=12 {'doc_title': 1, 'text': 7, 'image': 2, 'figure_title': 1, 'paragraph_title': 1}
R 55 H RAW bbox=[679,415,2630,1919] 1951x1504 mem=14 {'doc_title': 1, 'text': 9, 'image': 1, 'paragraph_title': 2, 'figure_title': 1}
R 77 H bbox=[2692,1594,4087,1903] 1395x309 mem=2 {'doc_title': 1, 'text': 1}
R 14 DL bbox=[2045,1950,3265,3097] 1220x1147 mem=6 {'text': 3, 'image': 1, 'figure_title': 1, 'paragraph_title': 1}
R 65 H bbox=[113,1958,1975,2859] 1862x901 mem=8 {'text': 5, 'image': 1, 'doc_title': 1, 'figure_title': 1}
R 96 H bbox=[3326,1964,4087,3638] 761x1674 mem=4 {'doc_title': 1, 'text': 2, 'image': 1}
R 89 L bbox=[118,2887,595,4080] 477x1193 mem=5 {'text': 4, 'paragraph_title': 1}
R 86 H bbox=[682,2894,1977,4292] 1295x1398 mem=8 {'text': 4, 'image': 1, 'paragraph_title': 2, 'doc_title': 1}
R 64 H bbox=[2046,3116,3263,3907] 1217x791 mem=6 {'text': 3, 'image': 1, 'figure_title': 1, 'doc_title': 1}
R 97 H bbox=[3324,3756,4087,4627] 763x871 mem=2 {'doc_title': 1, 'text': 1}
R 84 H bbox=[2046,3920,3264,4820] 1218x900 mem=6 {'text': 3, 'image': 1, 'figure_title': 1, 'paragraph_title': 1}
R 44 F bbox=[123,4139,626,5113] 503x974 mem=4 {'text': 2, 'image': 1, 'paragraph_title': 1}
R112 H bbox=[682,4325,1975,5056] 1293x731 mem=5 {'text': 2, 'image': 1, 'figure_title': 1, 'doc_title': 1}
R 58 H bbox=[3322,4658,4087,5831] 765x1173 mem=2 {'doc_title': 1, 'text': 1}
R110 H bbox=[2044,4858,3265,5685] 1221x827 mem=7 {'doc_title': 1, 'text': 4, 'image': 1, 'paragraph_title': 1}
R 75 H RAW bbox=[680,5078,1975,5692] 1295x614 mem=5 {'doc_title': 1, 'image': 1, 'text': 2, 'figure_title': 1}
R 59 H RAW bbox=[680,5731,3267,6318] 2587x587 mem=7 {'doc_title': 2, 'text': 5}
R 7 DL bbox=[3308,5839,4087,6305] 779x466 mem=1 {'text': 1} SINGLE-region
[Containment-merge] x10
[Banner rectangle] x8
DONE -> output/NamastheTelangana_Jangaon_20260520_20260609_130635/all_article_crops_review

View File

@ -1,36 +0,0 @@
=== page 1: 6 crops, 6 datelines ===
R 3 DL bbox=[1497,137,4081,3023] 2584x2886 mem=8 {'text': 7, 'image': 1}
R 4 DL bbox=[105,145,1467,4295] 1362x4150 mem=15 {'text': 11, 'image': 2, 'paragraph_title': 2}
R 28 H bbox=[1498,838,3031,4921] 1533x4083 mem=18 {'doc_title': 1, 'text': 9, 'image': 3, 'paragraph_title': 2, 'figure_title': 3}
R 2 DL bbox=[3039,3957,4081,5748] 1042x1791 mem=3 {'text': 1, 'image': 1, 'figure_title': 1}
R 49 H RAW bbox=[106,4377,1429,6301] 1323x1924 mem=10 {'doc_title': 1, 'text': 5, 'image': 2, 'figure_title': 2}
R 29 H RAW bbox=[1500,5012,4081,6283] 2581x1271 mem=6 {'doc_title': 1, 'text': 3, 'image': 1, 'figure_title': 1}
[Containment-merge] x2
[Headline-merge] x2
[Banner rectangle] x4
=== page 2: 18 crops, 17 datelines ===
R109 H bbox=[119,393,612,1899] 493x1506 mem=2 {'doc_title': 1, 'text': 1}
R 79 H bbox=[2693,405,4087,1833] 1394x1428 mem=12 {'doc_title': 1, 'text': 7, 'image': 2, 'figure_title': 1, 'paragraph_title': 1}
R 55 H RAW bbox=[679,415,2630,1919] 1951x1504 mem=14 {'doc_title': 1, 'text': 9, 'image': 1, 'paragraph_title': 2, 'figure_title': 1}
R 77 H bbox=[2692,1594,4087,1903] 1395x309 mem=2 {'doc_title': 1, 'text': 1}
R 14 DL bbox=[2045,1950,3265,3097] 1220x1147 mem=6 {'text': 3, 'image': 1, 'figure_title': 1, 'paragraph_title': 1}
R 65 H bbox=[113,1958,1975,2859] 1862x901 mem=8 {'text': 5, 'image': 1, 'doc_title': 1, 'figure_title': 1}
R 96 H bbox=[3326,1964,4087,3638] 761x1674 mem=4 {'doc_title': 1, 'text': 2, 'image': 1}
R 89 L bbox=[118,2887,595,4080] 477x1193 mem=5 {'text': 4, 'paragraph_title': 1}
R 86 H bbox=[682,2894,1977,4292] 1295x1398 mem=8 {'text': 4, 'image': 1, 'paragraph_title': 2, 'doc_title': 1}
R 64 H bbox=[2046,3116,3263,3907] 1217x791 mem=6 {'text': 3, 'image': 1, 'figure_title': 1, 'doc_title': 1}
R 97 H bbox=[3324,3756,4087,4627] 763x871 mem=2 {'doc_title': 1, 'text': 1}
R 84 H bbox=[2046,3920,3264,4820] 1218x900 mem=6 {'text': 3, 'image': 1, 'figure_title': 1, 'paragraph_title': 1}
R 44 F bbox=[123,4139,626,5113] 503x974 mem=4 {'text': 2, 'image': 1, 'paragraph_title': 1}
R112 H bbox=[682,4325,1975,5056] 1293x731 mem=5 {'text': 2, 'image': 1, 'figure_title': 1, 'doc_title': 1}
R 58 H bbox=[3322,4658,4087,5831] 765x1173 mem=2 {'doc_title': 1, 'text': 1}
R110 H bbox=[2044,4858,3265,5685] 1221x827 mem=7 {'doc_title': 1, 'text': 4, 'image': 1, 'paragraph_title': 1}
R 75 H RAW bbox=[680,5078,1975,5692] 1295x614 mem=5 {'doc_title': 1, 'image': 1, 'text': 2, 'figure_title': 1}
R 59 H RAW bbox=[680,5731,3267,6318] 2587x587 mem=7 {'doc_title': 2, 'text': 5}
R 7 DL bbox=[3308,5839,4087,6305] 779x466 mem=1 {'text': 1} SINGLE-region
[Containment-merge] x10
[Banner rectangle] x8
DONE -> output/NamastheTelangana_Jangaon_20260520_20260609_130635/all_article_crops_review

View File

@ -1,36 +0,0 @@
=== page 1: 6 crops, 6 datelines ===
R 3 DL bbox=[1497,137,4081,3023] 2584x2886 mem=8 {'text': 7, 'image': 1}
R 4 DL bbox=[105,145,1467,4295] 1362x4150 mem=15 {'text': 11, 'image': 2, 'paragraph_title': 2}
R 28 H bbox=[1498,838,3031,4921] 1533x4083 mem=18 {'doc_title': 1, 'text': 9, 'image': 3, 'paragraph_title': 2, 'figure_title': 3}
R 2 DL bbox=[3039,3957,4081,5748] 1042x1791 mem=3 {'text': 1, 'image': 1, 'figure_title': 1}
R 49 H RAW bbox=[106,4377,1429,6301] 1323x1924 mem=10 {'doc_title': 1, 'text': 5, 'image': 2, 'figure_title': 2}
R 29 H RAW bbox=[1500,5012,4081,6283] 2581x1271 mem=6 {'doc_title': 1, 'text': 3, 'image': 1, 'figure_title': 1}
[Containment-merge] x2
[Headline-merge] x2
[Banner rectangle] x4
=== page 2: 18 crops, 17 datelines ===
R109 H bbox=[119,393,612,1899] 493x1506 mem=2 {'doc_title': 1, 'text': 1}
R 79 H bbox=[2693,405,4087,1833] 1394x1428 mem=12 {'doc_title': 1, 'text': 7, 'image': 2, 'figure_title': 1, 'paragraph_title': 1}
R 55 H RAW bbox=[679,415,2630,1919] 1951x1504 mem=14 {'doc_title': 1, 'text': 9, 'image': 1, 'paragraph_title': 2, 'figure_title': 1}
R 77 H bbox=[2692,1594,4087,1903] 1395x309 mem=2 {'doc_title': 1, 'text': 1}
R 14 DL bbox=[2045,1950,3265,3097] 1220x1147 mem=6 {'text': 3, 'image': 1, 'figure_title': 1, 'paragraph_title': 1}
R 65 H bbox=[113,1958,2023,2859] 1910x901 mem=8 {'text': 5, 'image': 1, 'doc_title': 1, 'figure_title': 1}
R 96 H bbox=[3326,1964,4087,3638] 761x1674 mem=4 {'doc_title': 1, 'text': 2, 'image': 1}
R 89 L bbox=[118,2887,595,4080] 477x1193 mem=5 {'text': 4, 'paragraph_title': 1}
R 86 H bbox=[682,2894,1977,4292] 1295x1398 mem=8 {'text': 4, 'image': 1, 'paragraph_title': 2, 'doc_title': 1}
R 64 H bbox=[2046,3116,3263,3907] 1217x791 mem=6 {'text': 3, 'image': 1, 'figure_title': 1, 'doc_title': 1}
R 97 H bbox=[3324,3756,4087,4627] 763x871 mem=2 {'doc_title': 1, 'text': 1}
R 84 H bbox=[2046,3920,3264,4820] 1218x900 mem=6 {'text': 3, 'image': 1, 'figure_title': 1, 'paragraph_title': 1}
R 44 F bbox=[123,4139,626,5113] 503x974 mem=4 {'text': 2, 'image': 1, 'paragraph_title': 1}
R112 H bbox=[682,4325,1975,5056] 1293x731 mem=5 {'text': 2, 'image': 1, 'figure_title': 1, 'doc_title': 1}
R 58 H bbox=[3322,4658,4087,5831] 765x1173 mem=2 {'doc_title': 1, 'text': 1}
R110 H bbox=[2044,4858,3265,5685] 1221x827 mem=7 {'doc_title': 1, 'text': 4, 'image': 1, 'paragraph_title': 1}
R 75 H RAW bbox=[680,5078,1975,5692] 1295x614 mem=5 {'doc_title': 1, 'image': 1, 'text': 2, 'figure_title': 1}
R 59 H RAW bbox=[113,5731,3267,6318] 3154x587 mem=7 {'doc_title': 2, 'text': 5}
R 7 DL bbox=[3308,5839,4087,6305] 779x466 mem=1 {'text': 1} SINGLE-region
[Containment-merge] x10
[Banner rectangle] x8
DONE -> output/NamastheTelangana_Jangaon_20260520_20260609_130635/all_article_crops_review

View File

@ -1,36 +0,0 @@
=== page 1: 6 crops, 6 datelines ===
R 3 DL bbox=[1497,137,4081,3023] 2584x2886 mem=13 {'text': 8, 'image': 3, 'figure_title': 2}
R 4 DL bbox=[105,145,1467,4295] 1362x4150 mem=15 {'text': 11, 'image': 2, 'paragraph_title': 2}
R 28 H bbox=[1498,3089,3031,4921] 1533x1832 mem=13 {'doc_title': 1, 'text': 8, 'image': 1, 'paragraph_title': 2, 'figure_title': 1}
R 2 DL bbox=[3092,3957,4079,4960] 987x1003 mem=1 {'text': 1} SINGLE-region
R 49 H RAW bbox=[106,4377,1429,6301] 1323x1924 mem=10 {'doc_title': 1, 'text': 5, 'image': 2, 'figure_title': 2}
R 29 H RAW bbox=[1500,5012,4081,6283] 2581x1271 mem=8 {'text': 3, 'image': 2, 'doc_title': 1, 'figure_title': 2}
[Containment-merge] x2
[Headline-merge] x2
[Banner rectangle] x4
=== page 2: 18 crops, 17 datelines ===
R109 H bbox=[119,393,612,1899] 493x1506 mem=2 {'doc_title': 1, 'text': 1}
R 79 H bbox=[2693,405,4078,1567] 1385x1162 mem=11 {'doc_title': 1, 'text': 7, 'image': 1, 'figure_title': 1, 'paragraph_title': 1}
R 55 H RAW bbox=[679,415,2630,1919] 1951x1504 mem=14 {'doc_title': 1, 'text': 9, 'image': 1, 'paragraph_title': 2, 'figure_title': 1}
R 77 H bbox=[2692,1594,4087,1903] 1395x309 mem=3 {'text': 1, 'image': 1, 'doc_title': 1}
R 14 DL bbox=[2045,1950,3265,3097] 1220x1147 mem=6 {'text': 3, 'image': 1, 'figure_title': 1, 'paragraph_title': 1}
R 65 H bbox=[113,1958,1975,2859] 1862x901 mem=8 {'text': 5, 'image': 1, 'doc_title': 1, 'figure_title': 1}
R 96 H bbox=[3326,1964,4087,3638] 761x1674 mem=4 {'doc_title': 1, 'text': 2, 'image': 1}
R 89 L bbox=[118,2887,595,4080] 477x1193 mem=5 {'text': 4, 'paragraph_title': 1}
R 86 H bbox=[682,2894,1977,4292] 1295x1398 mem=8 {'text': 4, 'image': 1, 'paragraph_title': 2, 'doc_title': 1}
R 64 H bbox=[2046,3116,3263,3907] 1217x791 mem=6 {'text': 3, 'image': 1, 'figure_title': 1, 'doc_title': 1}
R 97 H bbox=[3324,3756,4087,4627] 763x871 mem=2 {'doc_title': 1, 'text': 1}
R 84 H bbox=[2046,3920,3264,4820] 1218x900 mem=6 {'text': 3, 'image': 1, 'figure_title': 1, 'paragraph_title': 1}
R 44 F bbox=[123,4139,626,5113] 503x974 mem=4 {'text': 2, 'image': 1, 'paragraph_title': 1}
R112 H bbox=[682,4325,1975,5056] 1293x731 mem=5 {'text': 2, 'image': 1, 'figure_title': 1, 'doc_title': 1}
R 58 H bbox=[3322,4658,4087,5831] 765x1173 mem=2 {'doc_title': 1, 'text': 1}
R110 H bbox=[2044,4858,3265,5685] 1221x827 mem=7 {'doc_title': 1, 'text': 4, 'image': 1, 'paragraph_title': 1}
R 75 H RAW bbox=[680,5078,1975,5692] 1295x614 mem=5 {'doc_title': 1, 'image': 1, 'text': 2, 'figure_title': 1}
R 59 H RAW bbox=[680,5731,3267,6318] 2587x587 mem=7 {'doc_title': 2, 'text': 5}
R 7 DL bbox=[3308,5839,4087,6305] 779x466 mem=1 {'text': 1} SINGLE-region
[Containment-merge] x10
[Banner rectangle] x8
DONE -> output/NamastheTelangana_Jangaon_20260520_20260609_130635/all_article_crops_review

View File

@ -1,36 +0,0 @@
=== page 1: 6 crops, 6 datelines ===
R 3 DL bbox=[1497,137,4081,3023] 2584x2886 mem=13 {'text': 8, 'image': 3, 'figure_title': 2}
R 4 DL bbox=[105,145,1467,4295] 1362x4150 mem=15 {'text': 11, 'image': 2, 'paragraph_title': 2}
R 28 H bbox=[1498,3089,3031,4921] 1533x1832 mem=13 {'doc_title': 1, 'text': 8, 'image': 1, 'paragraph_title': 2, 'figure_title': 1}
R 2 DL bbox=[3092,3957,4079,4960] 987x1003 mem=1 {'text': 1} SINGLE-region
R 49 H RAW bbox=[106,4377,1429,6301] 1323x1924 mem=10 {'doc_title': 1, 'text': 5, 'image': 2, 'figure_title': 2}
R 29 H RAW bbox=[1500,5012,4081,6283] 2581x1271 mem=8 {'text': 3, 'image': 2, 'doc_title': 1, 'figure_title': 2}
[Containment-merge] x2
[Headline-merge] x2
[Banner rectangle] x4
=== page 2: 18 crops, 17 datelines ===
R109 H bbox=[119,393,612,1899] 493x1506 mem=2 {'doc_title': 1, 'text': 1}
R 79 H bbox=[2693,405,4078,1567] 1385x1162 mem=11 {'doc_title': 1, 'text': 7, 'image': 1, 'figure_title': 1, 'paragraph_title': 1}
R 55 H RAW bbox=[679,415,2630,1919] 1951x1504 mem=14 {'doc_title': 1, 'text': 9, 'image': 1, 'paragraph_title': 2, 'figure_title': 1}
R 77 H bbox=[2692,1594,4087,1903] 1395x309 mem=3 {'text': 1, 'image': 1, 'doc_title': 1}
R 14 DL bbox=[2045,1950,3265,3097] 1220x1147 mem=6 {'text': 3, 'image': 1, 'figure_title': 1, 'paragraph_title': 1}
R 65 H bbox=[113,1958,1975,2859] 1862x901 mem=8 {'text': 5, 'image': 1, 'doc_title': 1, 'figure_title': 1}
R 96 H bbox=[3326,1964,4087,3638] 761x1674 mem=4 {'doc_title': 1, 'text': 2, 'image': 1}
R 89 L bbox=[118,2887,595,4080] 477x1193 mem=5 {'text': 4, 'paragraph_title': 1}
R 86 H bbox=[682,2894,1977,4292] 1295x1398 mem=8 {'text': 4, 'image': 1, 'paragraph_title': 2, 'doc_title': 1}
R 64 H bbox=[2046,3116,3263,3907] 1217x791 mem=6 {'text': 3, 'image': 1, 'figure_title': 1, 'doc_title': 1}
R 97 H bbox=[3324,3756,4087,4627] 763x871 mem=2 {'doc_title': 1, 'text': 1}
R 84 H bbox=[2046,3920,3264,4820] 1218x900 mem=6 {'text': 3, 'image': 1, 'figure_title': 1, 'paragraph_title': 1}
R 44 F bbox=[123,4139,626,5113] 503x974 mem=4 {'text': 2, 'image': 1, 'paragraph_title': 1}
R112 H bbox=[682,4325,1975,5056] 1293x731 mem=5 {'text': 2, 'image': 1, 'figure_title': 1, 'doc_title': 1}
R 58 H bbox=[3322,4658,4087,5831] 765x1173 mem=2 {'doc_title': 1, 'text': 1}
R110 H bbox=[2044,4858,3265,5685] 1221x827 mem=7 {'doc_title': 1, 'text': 4, 'image': 1, 'paragraph_title': 1}
R 75 H RAW bbox=[680,5078,1975,5692] 1295x614 mem=5 {'doc_title': 1, 'image': 1, 'text': 2, 'figure_title': 1}
R 59 H RAW bbox=[680,5731,3267,6318] 2587x587 mem=7 {'doc_title': 2, 'text': 5}
R 7 DL bbox=[3308,5839,4087,6305] 779x466 mem=1 {'text': 1} SINGLE-region
[Containment-merge] x10
[Banner rectangle] x8
DONE -> output/NamastheTelangana_Jangaon_20260520_20260608_124720/all_article_crops_review

View File

@ -1,10 +0,0 @@
AJ pg1: 12 blocks (baseline AJ 12/18/14/20 NT 11/22/19/25 JG 7/12)
AJ pg2: 18 blocks (baseline AJ 12/18/14/20 NT 11/22/19/25 JG 7/12)
AJ pg3: 14 blocks (baseline AJ 12/18/14/20 NT 11/22/19/25 JG 7/12)
AJ pg4: 20 blocks (baseline AJ 12/18/14/20 NT 11/22/19/25 JG 7/12)
NT pg1: 11 blocks (baseline AJ 12/18/14/20 NT 11/22/19/25 JG 7/12)
NT pg2: 22 blocks (baseline AJ 12/18/14/20 NT 11/22/19/25 JG 7/12)
NT pg3: 19 blocks (baseline AJ 12/18/14/20 NT 11/22/19/25 JG 7/12)
NT pg4: 24 blocks (baseline AJ 12/18/14/20 NT 11/22/19/25 JG 7/12)
JG pg1: 7 blocks (baseline AJ 12/18/14/20 NT 11/22/19/25 JG 7/12)
JG pg2: 12 blocks (baseline AJ 12/18/14/20 NT 11/22/19/25 JG 7/12)

View File

@ -1,10 +0,0 @@
AJ pg1 pitch755 hbars10 base12 | thr0.6: 12 (drop6) | thr0.8: 12 (drop7) | thr1.0: 12 (drop7)
AJ pg2 pitch719 hbars19 base18 | thr0.6: 18 (drop5) | thr0.8: 18 (drop8) | thr1.0: 18 (drop9)
AJ pg3 pitch728 hbars15 base14 | thr0.6: 14 (drop7) | thr0.8: 13 (drop9) | thr1.0: 13 (drop9)
AJ pg4 pitch728 hbars25 base20 | thr0.6: 20 (drop11) | thr0.8: 20 (drop13) | thr1.0: 20 (drop13)
NT pg1 pitch536 hbars24 base11 | thr0.6: 11 (drop5) | thr0.8: 11 (drop8) | thr1.0: 11 (drop9)
NT pg2 pitch527 hbars47 base22 | thr0.6: 22 (drop7) | thr0.8: 22 (drop10) | thr1.0: 22 (drop15)
NT pg3 pitch525 hbars25 base19 | thr0.6: 19 (drop3) | thr0.8: 19 (drop4) | thr1.0: 19 (drop7)
NT pg4 pitch523 hbars43 base25 | thr0.6: 25 (drop5) | thr0.8: 25 (drop8) | thr1.0: 21 (drop25)
JG pg1 pitch601 hbars15 base7 | thr0.6: 7 (drop5) | thr0.8: 7 (drop6) | thr1.0: 7 (drop9)
JG pg2 pitch594 hbars17 base12 | thr0.6: 12 (drop0) | thr0.8: 12 (drop0) | thr1.0: 12 (drop9)

View File

416
_lines.py
View File

@ -1,416 +0,0 @@
"""Separator-rule detection for newspaper pages (classical CV, no ML / no API).
Detects the thin printed grey/black straight lines the paper uses to divide
stories, with a TEXT-ISOLATION filter to reject false positives from dense
Telugu text (a real rule sits in a whitespace gutter; a text stroke has ink
immediately above/below it).
Public:
detect_separator_lines(png_path) -> {"h": [...], "v": [...], "size": (W,H)}
each line is a dict: {x1,y1,x2,y2,len,gray} (gray = mean intensity).
"""
import cv2
import numpy as np
def _candidates(bw, horizontal, min_len, max_thick=55):
if horizontal:
k = cv2.getStructuringElement(cv2.MORPH_RECT, (min_len // 2, 1))
else:
k = cv2.getStructuringElement(cv2.MORPH_RECT, (1, min_len // 2))
opened = cv2.morphologyEx(bw, cv2.MORPH_OPEN, k, iterations=1)
# bridge small collinear gaps along the line direction
if horizontal:
opened = cv2.dilate(opened, cv2.getStructuringElement(cv2.MORPH_RECT, (25, 3)))
else:
opened = cv2.dilate(opened, cv2.getStructuringElement(cv2.MORPH_RECT, (3, 25)))
cnts, _ = cv2.findContours(opened, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
out = []
for c in cnts:
x, y, w, h = cv2.boundingRect(c)
if horizontal and w >= min_len and h <= max_thick:
out.append((x, y + h // 2, x + w, y + h // 2, w))
if (not horizontal) and h >= min_len and w <= max_thick:
out.append((x + w // 2, y, x + w // 2, y + h, h))
return out
def _isolated(gray, line, horizontal, ink_thresh=110, gap=(5, 16),
max_adjacent_ink=0.12):
"""A true separator sits in a whitespace gutter: the tight band on BOTH sides
(parallel to the line) is mostly paper. Returns (is_isolated, mean_gray)."""
H, W = gray.shape
x1, y1, x2, y2, ln = line
if horizontal:
seg = gray[y1, x1:x2]
lo, hi = gap
above = gray[max(0, y1 - hi):max(0, y1 - lo), x1:x2]
below = gray[min(H, y1 + lo):min(H, y1 + hi), x1:x2]
else:
seg = gray[y1:y2, x1]
lo, hi = gap
above = gray[y1:y2, max(0, x1 - hi):max(0, x1 - lo)]
below = gray[y1:y2, min(W, x1 + lo):min(W, x1 + hi)]
if seg.size == 0 or above.size == 0 or below.size == 0:
return False, 255
ink_a = float((above < ink_thresh).mean())
ink_b = float((below < ink_thresh).mean())
isolated = (ink_a <= max_adjacent_ink) and (ink_b <= max_adjacent_ink)
return isolated, float(seg.mean())
def detect_separator_lines(png_path, h_frac=0.045, v_frac=0.06):
img = cv2.imread(str(png_path))
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
H, W = gray.shape
blur = cv2.GaussianBlur(gray, (3, 3), 0)
bw = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
h_min = int(h_frac * W)
v_min = int(v_frac * H)
h_out, v_out = [], []
for ln in _candidates(bw, True, h_min):
iso, g = _isolated(gray, ln, True)
if iso:
h_out.append({"x1": ln[0], "y1": ln[1], "x2": ln[2], "y2": ln[3],
"len": ln[4], "gray": round(g, 1)})
for ln in _candidates(bw, False, v_min):
iso, g = _isolated(gray, ln, False)
if iso:
v_out.append({"x1": ln[0], "y1": ln[1], "x2": ln[2], "y2": ln[3],
"len": ln[4], "gray": round(g, 1)})
return {"h": h_out, "v": v_out, "size": (W, H)}
def detect_content_bottom(png_path, search_frac=0.12, color_thr=0.06,
blank_color=0.02, blank_ink=0.035, peak_thr=0.15,
max_band=160, min_gap=25, min_margin=18):
"""Find the y below which a page holds only the printer's COLOUR-CALIBRATION
strip (the row of CMYK registration dots + grey bars) and the bottom paper
margin i.e. the bottom of real article content.
The calibration strip is a thin band of strongly-saturated colour dots near
the page bottom, isolated by a white paper margin BELOW it (down to the page
edge) and a white gap ABOVE it (separating it from article content). Crops
should be clamped to the returned y so the dots never bleed into an article.
Returns the y at the TOP of the calibration band, or the full page height H
when no such strip is found (nothing to clamp)."""
img = cv2.imread(str(png_path))
if img is None:
return None
H, W = img.shape[:2]
b, g, r = img[..., 0].astype(np.int16), img[..., 1].astype(np.int16), img[..., 2].astype(np.int16)
mx = np.maximum(np.maximum(r, g), b)
mn = np.minimum(np.minimum(r, g), b)
sat = mx - mn
colored = (sat > 55) & (mx > 80) # saturated colour (registration dots)
dark = mx < 110 # ink / dark
col_frac = colored.mean(axis=1) # per-row colour fraction
ink_frac = dark.mean(axis=1) # per-row ink fraction
blank = (col_frac < blank_color) & (ink_frac < blank_ink)
y0 = int(H * (1 - search_frac))
# The calibration strip is a band of strongly-coloured rows; identify it as the
# bottom-most run of rows whose colour fraction clears `color_thr`.
strip_rows = [y for y in range(y0, H) if col_frac[y] >= color_thr]
if not strip_rows:
return H # no coloured strip near the bottom
band_bottom = strip_rows[-1]
# A real calibration strip is followed by white paper margin to the page edge.
below = blank[band_bottom + 1:H]
if below.size < min_margin or float(below.mean()) < 0.9:
return H
# Walk up from band_bottom while still in the coloured band (tolerate the small
# white gaps between dot rows).
band_top = band_bottom
gap = 0
y = band_bottom - 1
while y > y0:
if col_frac[y] >= color_thr:
band_top = y
gap = 0
else:
gap += 1
if gap > 12:
break
y -= 1
if (band_bottom - band_top + 1) > max_band:
return H # too tall -> fused with a photo, bail
# A genuine printer calibration strip is a dense row of saturated CMYK
# registration dots: its peak per-row colour fraction is high (~0.22-0.45 across
# Andhra Jyothi / Sakshi). A single-hue coloured ad/notice box embedded in
# article text peaks far lower (~0.11) -> reject it as a false positive.
peak = float(col_frac[band_top:band_bottom + 1].max())
if peak < peak_thr:
return H
return band_top
def _hspan_overlap(ax1, ax2, bx1, bx2):
ix = max(0, min(ax2, bx2) - max(ax1, bx1))
return ix / max(1, min(ax2 - ax1, bx2 - bx1))
def _faint_rule_above(gray, hbbox, max_gap=170, min_gap=6, gray_lo=140, gray_hi=215,
cover=0.6, max_dark=0.06):
"""Find a faint GREY horizontal rule sitting in the whitespace directly above a
(multi-column) header. Such a light rule reads as background to the ink-based
Otsu detector in `detect_separator_lines`, so we look for a thin row that is
mostly uniform mid-grey across the header's width and is isolated by white paper
above and below. Returns the rule's y, or None. (Used only above multi-column
headers, where it marks the article's TOP boundary.)"""
H, W = gray.shape
hx1, hy, hx2 = hbbox[0], hbbox[1], hbbox[2]
y_hi = max(0, hy - min_gap)
y_lo = max(0, hy - max_gap)
for y in range(y_hi, y_lo, -1):
row = gray[y, hx1:hx2].astype(np.int16)
if row.size == 0:
continue
mid = float(((row >= gray_lo) & (row <= gray_hi)).mean())
dark = float((row < gray_lo).mean())
if mid >= cover and dark <= max_dark:
above = gray[max(0, y - 6):max(0, y - 2), hx1:hx2]
below = gray[min(H, y + 2):min(H, y + 6), hx1:hx2]
if (above.size and below.size
and float((above > gray_hi).mean()) > 0.85
and float((below > gray_hi).mean()) > 0.85):
return y
return None
def _faint_grey_band_above(gray, hbbox, max_gap=185, min_gap=6, max_thick=12,
gray_lo=135, gray_hi=232, cover=0.8, max_dark=0.08,
white_thr=235, white_cover=0.9):
"""Find a faint GREY horizontal rule (1-`max_thick` px thick) sitting in the
whitespace directly above a SINGLE-column header. Per the layout convention a
grey rule whose length matches the article/header width marks the boundary
between two stacked stories, so the next story's headline must not fold into
the article above the rule. Such light rules read as background to the ink-based
Otsu detector in `detect_separator_lines`, and `_faint_rule_above` only accepts
a 1-px isolated rule, so a thicker grey band is missed; here we group the band
and require it to span the header's width and be isolated by white paper above
and below. Returns the band's centre y, or None."""
H, W = gray.shape
hx1, hy, hx2 = int(hbbox[0]), int(hbbox[1]), int(hbbox[2])
y_hi = max(0, hy - min_gap)
y_lo = max(0, hy - max_gap)
cols = slice(hx1, hx2)
grey_rows = []
for y in range(y_lo, y_hi):
row = gray[y, cols].astype(np.int16)
if row.size == 0:
continue
mid = float(((row >= gray_lo) & (row <= gray_hi)).mean())
dark = float((row < gray_lo).mean())
if mid >= cover and dark <= max_dark:
grey_rows.append(y)
if not grey_rows:
return None
bands = []
s = p = grey_rows[0]
for y in grey_rows[1:]:
if y == p + 1:
p = y
else:
bands.append((s, p)); s = p = y
bands.append((s, p))
for top, bot in sorted(bands, key=lambda b: -b[1]): # nearest the header first
if bot - top + 1 > max_thick:
continue
above = gray[max(0, top - 4):top, cols]
below = gray[bot + 1:min(H, bot + 5), cols]
if (above.size and below.size
and float((above > white_thr).mean()) >= white_cover
and float((below > white_thr).mean()) >= white_cover):
return (top + bot) // 2
return None
def _faint_grey_band_below(gray, bbox, max_gap=150, min_gap=4, max_thick=12,
gray_lo=135, gray_hi=232, cover=0.8, max_dark=0.08,
white_thr=235, white_cover=0.9):
"""Mirror of `_faint_grey_band_above`, searching DOWNWARD: find the faint grey
rule that sits in the whitespace just below an article (within `max_gap` px of
its bottom edge) and spans its column width. That rule is the article's BOTTOM
boundary, so the crop can be cut precisely at it. Returns the band's top y (the
cut line), or None when no clean full-width grey rule is found below."""
H, W = gray.shape
bx1, by, bx2 = int(bbox[0]), int(bbox[3]), int(bbox[2])
y_lo = min(H, by + min_gap)
y_hi = min(H, by + max_gap)
cols = slice(bx1, bx2)
grey_rows = []
for y in range(y_lo, y_hi):
row = gray[y, cols].astype(np.int16)
if row.size == 0:
continue
mid = float(((row >= gray_lo) & (row <= gray_hi)).mean())
dark = float((row < gray_lo).mean())
if mid >= cover and dark <= max_dark:
grey_rows.append(y)
if not grey_rows:
return None
bands = []
s = p = grey_rows[0]
for y in grey_rows[1:]:
if y == p + 1:
p = y
else:
bands.append((s, p)); s = p = y
bands.append((s, p))
for top, bot in sorted(bands, key=lambda b: b[0]): # nearest below first
if bot - top + 1 > max_thick:
continue
# Skip the 1-px anti-aliased fade row hugging the rule before checking for
# the white paper gutter above and below it.
above = gray[max(0, top - 7):max(0, top - 2), cols]
below = gray[bot + 2:min(H, bot + 7), cols]
if (above.size and below.size
and float((above > white_thr).mean()) >= white_cover
and float((below > white_thr).mean()) >= white_cover):
return top
return None
def separator_barriers(png_path, regions, near=80, min_overlap=0.3,
title_types=("doc_title", "paragraph_title", "figure_title"),
multicol_frac=0.22):
"""Article-boundary rules: the horizontal printed lines that mark the END of a
story. Per the layout convention, a rule with NORMAL text (or whitespace) above
it separates two stacked articles, while a rule sitting right under a BOLD
headline/title is a decorative flourish and must NOT split anything.
We approximate 'bold above' by a title-type region (doc_title / paragraph_title
/ figure_title) whose bottom edge is within `near` px above the rule and that
horizontally overlaps it. Such rules are dropped; the rest are returned as
barriers {y, x1, x2} for the clusterer to forbid cross-line folding.
Additionally, for every MULTI-COLUMN header (a doc_title at least `multicol_frac`
of the page width), we look for a faint grey rule directly above it and add it as
a barrier spanning the header's width: that rule is the article's TOP boundary, so
nothing above it folds into the multi-column article below."""
res = detect_separator_lines(png_path)
# A real article separator sits in a WHITESPACE GUTTER between two stacked
# boxes; it never lands deep inside a body-text region. PaddleOCR's morphology
# occasionally mistakes a dense Telugu text stroke for a thin rule, producing a
# phantom line straight through a paragraph. Reject any detected rule whose
# midpoint falls well inside (margin-shrunk) a 'text' box it column-overlaps.
_text_boxes = [r["bbox"] for r in regions if r.get("type") == "text"]
def _in_text(y, lx1, lx2, margin=28):
mx = (lx1 + lx2) / 2
for tx1, ty1, tx2, ty2 in _text_boxes:
if (tx1 <= mx <= tx2
and ty1 + margin <= y <= ty2 - margin
and _hspan_overlap(lx1, lx2, tx1, tx2) >= min_overlap):
return True
return False
# Column width (median text-region width). A horizontal line counts as an article
# separator only when it spans most of a column. NOTE: a strict ≥1.0× column floor is
# too aggressive — a SINGLE-column article's own boundary rule is itself <1 column wide,
# so ≥1.0× drops real separators and merges articles (measured: NT pg4 R121 -> 2 datelines).
# 0.6× column is the safe floor: it removes only the short caption / decorative underlines
# and merges NO articles on AJ / NT / JG.
_twid = sorted((r["bbox"][2] - r["bbox"][0]) for r in regions if r.get("type") == "text")
_pitch = _twid[len(_twid) // 2] if _twid else 0
_len_floor = 0.6 * _pitch
bars = []
for L in res["h"]:
y, lx1, lx2 = L["y1"], L["x1"], L["x2"]
if _in_text(y, lx1, lx2):
continue
if _pitch and (lx2 - lx1) < _len_floor:
continue # too short to be an article separator (caption/underline)
bold_above = False
title_w_above = 0
for r in regions:
b = r["bbox"]
if (b[3] <= y and (y - b[3]) <= near
and r.get("type") in title_types
and _hspan_overlap(lx1, lx2, b[0], b[2]) >= min_overlap):
bold_above = True
title_w_above = max(title_w_above, b[2] - b[0])
# A rule under a bold title is a decorative flourish ONLY when it merely
# underlines that title (rule width ≈ title width). A rule spanning much
# WIDER than the title above it runs across several columns — e.g. a photo
# caption (figure_title) sits above ONE column while the rule runs the FULL
# article width — so it is a genuine article boundary and must be kept.
if (not bold_above) or ((lx2 - lx1) > 1.5 * title_w_above):
bars.append({"y": y, "x1": lx1, "x2": lx2})
gray = cv2.cvtColor(cv2.imread(str(png_path)), cv2.COLOR_BGR2GRAY)
W = gray.shape[1]
_img_boxes = [r["bbox"] for r in regions if r.get("type") == "image"]
def _lead_photo_above(yb, hx1, hx2, gap=80):
"""A faint rule directly under the article's OWN lead photo is that photo's
caption underline, not the article's top boundary. If an image sits flush
(within `gap`px) above the rule and overlaps the header's width, the rule must
NOT bound the article otherwise the lead photo gets cut off."""
for ix1, iy1, ix2, iy2 in _img_boxes:
if (0 <= yb - iy2 <= gap
and _hspan_overlap(hx1, hx2, ix1, ix2) >= min_overlap):
return True
return False
for r in regions:
if r.get("type") != "doc_title":
continue
b = r["bbox"]
if (b[2] - b[0]) < multicol_frac * W:
continue # single-column header -> skip
yb = _faint_rule_above(gray, b)
if yb is not None and not _lead_photo_above(yb, b[0], b[2]):
bars.append({"y": yb, "x1": b[0], "x2": b[2],
"mc": True, "anchor": r["id"]})
# Same rule for SINGLE-column headers: a faint grey rule spanning the header's
# width directly above it bounds the article ABOVE it, so the header (and its
# story) cannot fold upward across the rule. Plain barrier (no mc clamp).
for r in regions:
if r.get("type") not in ("doc_title", "paragraph_title"):
continue
b = r["bbox"]
if (b[2] - b[0]) >= multicol_frac * W:
continue # multi-column -> handled above
yb = _faint_grey_band_above(gray, b)
if yb is not None and not _lead_photo_above(yb, b[0], b[2]):
bars.append({"y": yb, "x1": b[0], "x2": b[2]})
# Vertical column-divider rules. detect_separator_lines already requires each
# line to sit in a whitespace gutter (isolated on both sides), so photo/text
# internal strokes are filtered out. These fence rightward column-growth: an
# article must not grow across a printed vertical rule into the next column.
for L in res["v"]:
bars.append({"vert": True, "x": (L["x1"] + L["x2"]) // 2,
"y1": min(L["y1"], L["y2"]), "y2": max(L["y1"], L["y2"])})
return bars
def overlay(png_path, lines, out_path):
img = cv2.imread(str(png_path))
for L in lines["h"]:
cv2.line(img, (L["x1"], L["y1"]), (L["x2"], L["y2"]), (0, 0, 255), 6)
for L in lines["v"]:
cv2.line(img, (L["x1"], L["y1"]), (L["x2"], L["y2"]), (255, 0, 0), 6)
cv2.imwrite(str(out_path), img)
if __name__ == "__main__":
import sys
from pathlib import Path
p = Path(sys.argv[1])
res = detect_separator_lines(p)
print(f"{p.name} {res['size']} H={len(res['h'])} V={len(res['v'])}")
for L in sorted(res["h"], key=lambda d: d["y1"]):
print(f" H y={L['y1']:>5} x[{L['x1']:>4}..{L['x2']:>4}] len={L['len']:>4} gray={L['gray']}")
for L in sorted(res["v"], key=lambda d: d["x1"]):
print(f" V x={L['x1']:>5} y[{L['y1']:>4}..{L['y2']:>4}] len={L['len']:>4} gray={L['gray']}")
out = Path(sys.argv[2]) if len(sys.argv) > 2 else Path(f"/tmp/lines_{p.stem}.png")
overlay(p, res, out)
print("overlay:", out)

View File

@ -1,4 +0,0 @@
WITH ≥1col floor: 24 blocks
R67 H 4DL members=[5, 7, 28, 34, 42, 48, 50, 67, 68, 73, 74, 80, 100, 102, 107, 127, 135]
R121 H 2DL members=[12, 14, 21, 39, 59, 111, 116, 121]
anchors: R23,R67,R81,R85,R87,R89,R90,R91,R93,R94,R95,R96,R97,R98,R101,R103,R108,R118,R119,R121,R122,R128,R131,R132

View File

@ -1,5 +0,0 @@
page 1: 11 crops, 11 datelines, 2+dl-blocks=none | Caption bound:4, Headline-strip:8, Multi-column body:4
page 2: 23 crops, 22 datelines, 2+dl-blocks=[110] |
page 3: 20 crops, 21 datelines, 2+dl-blocks=[54, 62] |
page 4: 25 crops, 25 datelines, 2+dl-blocks=[67, 121] |
DONE -> output/NamastheTelangana_Siddipet_20260602_20260604_214937/all_article_crops_final

View File

@ -1,5 +0,0 @@
page 1: 11 crops, 11 datelines, 2+dl-blocks=none | Caption bound:4, Headline-strip:8, Multi-column body:4
page 2: 23 crops, 22 datelines, 2+dl-blocks=[110] |
page 3: 20 crops, 21 datelines, 2+dl-blocks=[54, 62] |
page 4: 25 crops, 25 datelines, 2+dl-blocks=[67, 121] |
DONE -> output/NamastheTelangana_Siddipet_20260602_20260604_214937/all_article_crops_final

View File

@ -1,5 +0,0 @@
page 1: 11 crops, 11 datelines, 2+dl-blocks=none | Caption bound:4, Headline-strip:8, Multi-column body:4
page 2: 23 crops, 22 datelines, 2+dl-blocks=[110] |
page 3: 20 crops, 21 datelines, 2+dl-blocks=[54, 62] |
page 4: 25 crops, 25 datelines, 2+dl-blocks=[67, 121] |
DONE -> output/NamastheTelangana_Siddipet_20260602_20260604_214937/all_article_crops_final

View File

@ -1,5 +0,0 @@
page 1: 11 crops, 11 datelines, 2+dl-blocks=none | Caption bound:4, Headline-strip:8, Multi-column body:4
page 2: 23 crops, 22 datelines, 2+dl-blocks=[110, 105] |
page 3: 20 crops, 21 datelines, 2+dl-blocks=[54, 62] |
page 4: 25 crops, 25 datelines, 2+dl-blocks=[67, 121] |
DONE -> output/NamastheTelangana_Siddipet_20260602_20260604_214937/all_article_crops_final

View File

@ -1,5 +0,0 @@
page 1: 11 crops, 11 datelines, 2+dl-blocks=none | Caption bound:4, Headline-strip:8, Multi-column body:4
page 2: 23 crops, 22 datelines, 2+dl-blocks=[110] |
page 3: 20 crops, 21 datelines, 2+dl-blocks=[54, 62] |
page 4: 25 crops, 25 datelines, 2+dl-blocks=[67, 121] |
DONE -> output/NamastheTelangana_Siddipet_20260602_20260604_214937/all_article_crops_final

View File

@ -1,5 +0,0 @@
page 1: 11 crops, 11 datelines, 2+dl-blocks=none | Caption bound:4, Headline-strip:8, Multi-column body:4
page 2: 23 crops, 22 datelines, 2+dl-blocks=[110] |
page 3: 20 crops, 21 datelines, 2+dl-blocks=[54, 62] |
page 4: 25 crops, 25 datelines, 2+dl-blocks=[67, 121] |
DONE -> output/NamastheTelangana_Siddipet_20260602_20260604_214937/all_article_crops_final

View File

@ -1,5 +0,0 @@
page 1: 11 crops, 11 datelines, 2+dl-blocks=none | Caption bound:4, Headline-strip:8, Multi-column body:4
page 2: 23 crops, 22 datelines, 2+dl-blocks=[110] |
page 3: 20 crops, 21 datelines, 2+dl-blocks=[54, 62] |
page 4: 25 crops, 25 datelines, 2+dl-blocks=[67, 121] |
DONE -> output/NamastheTelangana_Siddipet_20260602_20260604_214937/all_article_crops_final

View File

@ -1,5 +0,0 @@
page 1: 11 crops, 11 datelines, 2+dl-blocks=none | Caption bound:4, Headline-strip:8, Multi-column body:4
page 2: 23 crops, 22 datelines, 2+dl-blocks=[110] |
page 3: 20 crops, 21 datelines, 2+dl-blocks=[54, 62] |
page 4: 28 crops, 25 datelines, 2+dl-blocks=[80] |
DONE -> output/NamastheTelangana_Siddipet_20260602_20260604_214937/all_article_crops_final

View File

@ -1,5 +0,0 @@
page 1: 11 crops, 11 datelines, 2+dl-blocks=none | Caption bound:4, Headline-strip:8, Multi-column body:4
page 2: 23 crops, 22 datelines, 2+dl-blocks=[110] |
page 3: 20 crops, 21 datelines, 2+dl-blocks=[54, 62] |
page 4: 25 crops, 25 datelines, 2+dl-blocks=[67, 121] |
DONE -> output/NamastheTelangana_Siddipet_20260602_20260604_214937/all_article_crops_final

179
_nta.log
View File

@ -1,179 +0,0 @@
=== page 1: 5 crops, 6 datelines ===
H44 [106,111,4084,3144] 3978x3033 mem=21
DL5 [668,901,4084,6302] 3416x5401 mem=22
DL9 [105,2334,1197,6302] 1092x3968 mem=5
H59 [112,2762,3229,4860] 3117x2098 mem=13
H41 [2577,4793,4084,6309] 1507x1516 mem=4
🖼 Orphan photo: R38 → article R5 (an image must belong to an article)
=== page 1: 5 crops, 6 datelines ===
H44 [106,111,4084,3144] 3978x3033 mem=21
DL5 [668,901,4084,6302] 3416x5401 mem=22
DL9 [105,2334,1197,6302] 1092x3968 mem=5
H59 [112,2762,3229,4860] 3117x2098 mem=13
H41 [2577,4793,4084,6309] 1507x1516 mem=4
🖼 Orphan photo: R38 → article R5 (an image must belong to an article)
=== page 1: 5 crops, 6 datelines ===
H44 [106,111,4084,3144] 3978x3033 mem=21
DL5 [668,901,4084,6302] 3416x5401 mem=22
DL9 [105,2334,1197,6302] 1092x3968 mem=5
H59 [112,2762,3229,4860] 3117x2098 mem=13
H41 [2577,4793,4084,6309] 1507x1516 mem=4
🖼 Orphan photo: R38 → article R5 (an image must belong to an article)
=== page 1: 5 crops, 6 datelines ===
H44 [106,111,4084,3144] 3978x3033 mem=21
DL5 [668,901,4084,6302] 3416x5401 mem=22
DL9 [105,2334,1197,6302] 1092x3968 mem=5
H59 [112,2762,3229,4860] 3117x2098 mem=13
H41 [2577,4793,4084,6309] 1507x1516 mem=4
🖼 Orphan photo: R38 → article R5 (an image must belong to an article)
=== page 1: 5 crops, 6 datelines ===
H44 [106,111,4084,3144] 3978x3033 mem=21
DL5 [668,901,4084,6302] 3416x5401 mem=22
DL9 [105,2334,1197,6302] 1092x3968 mem=5
H59 [112,2762,3229,4860] 3117x2098 mem=13
H41 [2577,4793,4084,6309] 1507x1516 mem=4
🖼 Orphan photo: R38 → article R5 (an image must belong to an article)
=== page 1: 5 crops, 6 datelines ===
H44 [106,111,4084,3144] 3978x3033 mem=21
DL5 [668,901,4084,6302] 3416x5401 mem=22
DL9 [105,2334,1197,6302] 1092x3968 mem=5
H59 [112,2762,3229,4860] 3117x2098 mem=13
H41 [2577,4793,4084,6309] 1507x1516 mem=4
🖼 Orphan photo: R38 → article R5 (an image must belong to an article)
=== page 1: 5 crops, 6 datelines ===
H44 [106,111,4084,3144] 3978x3033 mem=21
DL5 [668,901,4084,6302] 3416x5401 mem=22
DL9 [105,2334,1197,6302] 1092x3968 mem=5
H59 [112,2762,3229,4860] 3117x2098 mem=13
H41 [2577,4793,4084,6309] 1507x1516 mem=4
🖼 Orphan photo: R38 → article R5 (an image must belong to an article)
=== page 2: 31 crops, 30 datelines ===
H80 [1833,465,3228,1814] 1395x1349 mem=6
H65 [3293,465,4079,987] 786x522 mem=2
H84 [106,501,1776,1820] 1670x1319 mem=6
H43 [3292,1014,4079,1562] 787x548 mem=2
DL9 [3292,1590,4079,2136] 787x546 mem=2
H78 [1838,1678,2517,1805] 679x127 mem=2
DL7 [104,1851,923,2566] 819x715 mem=3
H74 [981,1883,2350,3060] 1369x1177 mem=4
H72 [2408,1884,3227,2713] 819x829 mem=2
DL5 [3292,2167,4079,2759] 787x592 mem=2
DL23 [104,2596,922,2998] 818x402 mem=2
H58 [2408,2772,3226,3479] 818x707 mem=2
DL13 [3292,2787,4079,3333] 787x546 mem=2
DL20 [106,3050,923,3478] 817x428 mem=2
H60 [981,3117,2351,3479] 1370x362 mem=3
DL1 [3293,3382,4079,4190] 786x808 mem=2
P67 [131,3486,599,5211] 468x1725 mem=4
DL10 [1559,3528,3226,4291] 1667x763 mem=4
P63 [677,3558,1499,4144] 822x586 mem=2
H50 [678,4170,1497,4966] 819x796 mem=2
DL12 [3292,4217,4079,4815] 787x598 mem=2
H71 [1560,4365,3226,4958] 1666x593 mem=3
H51 [3292,4842,4079,5479] 787x637 mem=2
DL41 [1561,4960,3225,5110] 1664x150 mem=2
H54 [678,4987,1498,5443] 820x456 mem=2
H76 [1559,5171,3228,5881] 1669x710 mem=5
H53 [677,5467,1498,5964] 821x497 mem=2
H83 [3291,5509,4079,6303] 788x794 mem=3
H56 [1559,5944,3228,6302] 1669x358 mem=3
H46 [680,5993,1498,6302] 818x309 mem=2
O79 [152,6141,590,6257] 438x116 mem=1
🖼 Orphan photo: R90 → article R67 (an image must belong to an article)
=== page 2: 31 crops, 30 datelines ===
H80 [1833,465,3228,1814] 1395x1349 mem=6
H65 [3293,465,4079,987] 786x522 mem=2
H84 [106,501,1776,1820] 1670x1319 mem=6
H43 [3292,1014,4079,1562] 787x548 mem=2
DL9 [3292,1590,4079,2136] 787x546 mem=2
H78 [1838,1678,2517,1805] 679x127 mem=2
DL7 [104,1851,923,2566] 819x715 mem=3
H74 [981,1883,2350,3060] 1369x1177 mem=4
H72 [2408,1884,3227,2713] 819x829 mem=2
DL5 [3292,2167,4079,2759] 787x592 mem=2
DL23 [104,2596,922,2998] 818x402 mem=2
H58 [2408,2772,3226,3479] 818x707 mem=2
DL13 [3292,2787,4079,3333] 787x546 mem=2
DL20 [106,3050,923,3478] 817x428 mem=2
H60 [981,3117,2351,3479] 1370x362 mem=3
DL1 [3293,3382,4079,4190] 786x808 mem=2
P67 [131,3486,599,5211] 468x1725 mem=4
DL10 [1559,3528,3226,4291] 1667x763 mem=4
P63 [677,3558,1499,4144] 822x586 mem=2
H50 [678,4170,1497,4966] 819x796 mem=2
DL12 [3292,4217,4079,4815] 787x598 mem=2
H71 [1560,4365,3226,4958] 1666x593 mem=3
H51 [3292,4842,4079,5479] 787x637 mem=2
DL41 [1561,4960,3225,5110] 1664x150 mem=2
H54 [678,4987,1498,5443] 820x456 mem=2
H76 [1559,5171,3228,5881] 1669x710 mem=5
H53 [677,5467,1498,5964] 821x497 mem=2
H83 [3291,5509,4079,6303] 788x794 mem=3
H56 [1559,5944,3228,6302] 1669x358 mem=3
H46 [680,5993,1498,6302] 818x309 mem=2
O79 [152,6141,590,6257] 438x116 mem=1
🖼 Orphan photo: R90 → article R67 (an image must belong to an article)
=== page 2: 31 crops, 30 datelines ===
H80 [1833,465,3228,1814] 1395x1349 mem=6
H65 [3293,465,4079,987] 786x522 mem=2
H84 [106,501,1776,1820] 1670x1319 mem=6
H43 [3292,1014,4079,1562] 787x548 mem=2
DL9 [3292,1590,4079,2136] 787x546 mem=2
H78 [1838,1678,2517,1805] 679x127 mem=2
DL7 [104,1851,923,2566] 819x715 mem=3
H74 [981,1883,2350,3060] 1369x1177 mem=4
H72 [2408,1884,3227,2713] 819x829 mem=2
DL5 [3292,2167,4079,2759] 787x592 mem=2
DL23 [104,2596,922,2998] 818x402 mem=2
H58 [2408,2772,3226,3479] 818x707 mem=2
DL13 [3292,2787,4079,3333] 787x546 mem=2
DL20 [106,3050,923,3478] 817x428 mem=2
H60 [981,3117,2351,3479] 1370x362 mem=3
DL1 [3293,3382,4079,4190] 786x808 mem=2
P67 [131,3486,599,5211] 468x1725 mem=4
DL10 [1559,3528,3226,4291] 1667x763 mem=4
P63 [677,3558,1499,4144] 822x586 mem=2
H50 [678,4170,1497,4966] 819x796 mem=2
DL12 [3292,4217,4079,4815] 787x598 mem=2
H71 [1560,4365,3226,4958] 1666x593 mem=3
H51 [3292,4842,4079,5479] 787x637 mem=2
DL41 [1561,4960,3225,5110] 1664x150 mem=2
H54 [678,4987,1498,5443] 820x456 mem=2
H76 [1559,5171,3228,5881] 1669x710 mem=5
H53 [677,5467,1498,5964] 821x497 mem=2
H83 [3291,5509,4079,6303] 788x794 mem=3
H56 [1559,5944,3228,6302] 1669x358 mem=3
H46 [680,5993,1498,6302] 818x309 mem=2
O79 [152,6141,590,6257] 438x116 mem=1
🖼 Orphan photo: R90 → article R67 (an image must belong to an article)
=== page 2: 31 crops, 30 datelines ===
H80 [1833,465,3228,1814] 1395x1349 mem=6
H65 [3293,465,4079,987] 786x522 mem=2
H84 [106,501,1776,1820] 1670x1319 mem=6
H43 [3292,1014,4079,1562] 787x548 mem=2
DL9 [3292,1590,4079,2136] 787x546 mem=2
H78 [1838,1678,2517,1805] 679x127 mem=2
DL7 [104,1851,923,2566] 819x715 mem=3
H74 [981,1883,2350,3060] 1369x1177 mem=4
H72 [2408,1884,3227,2713] 819x829 mem=2
DL5 [3292,2167,4079,2759] 787x592 mem=2
DL23 [104,2596,922,2998] 818x402 mem=2
H58 [2408,2772,3226,3479] 818x707 mem=2
DL13 [3292,2787,4079,3333] 787x546 mem=2
DL20 [106,3050,923,3478] 817x428 mem=2
H60 [981,3117,2351,3479] 1370x362 mem=3
DL1 [3293,3382,4079,4190] 786x808 mem=2
P67 [131,3486,599,5211] 468x1725 mem=4
DL10 [1559,3528,3226,4291] 1667x763 mem=4
P63 [677,3558,1499,4144] 822x586 mem=2
H50 [678,4170,1497,4966] 819x796 mem=2
DL12 [3292,4217,4079,4815] 787x598 mem=2
H71 [1560,4365,3226,4958] 1666x593 mem=3
H51 [3292,4842,4079,5479] 787x637 mem=2
DL41 [1561,4960,3225,5110] 1664x150 mem=2
H54 [678,4987,1498,5443] 820x456 mem=2
H76 [1559,5171,3228,5881] 1669x710 mem=5
H53 [677,5467,1498,5964] 821x497 mem=2
H83 [3291,5509,4079,6303] 788x794 mem=3
H56 [1559,5944,3228,6302] 1669x358 mem=3
H46 [680,5993,1498,6302] 818x309 mem=2

295
_nta2.log
View File

@ -1,295 +0,0 @@
=== page 1: 6 crops, 6 datelines ===
H44 [106,111,4084,3144] 3978x3033 mem=21
DL56 [1265,901,4079,4724] 2814x3823 mem=11
DL9 [105,2334,1197,6302] 1092x3968 mem=5
H59 [112,2762,3229,4860] 3117x2098 mem=13
H41 [2577,4793,4084,6309] 1507x1516 mem=4
H30 [668,4829,3208,6302] 2540x1473 mem=11
─ NT late rule-split: R5 → 2 bands at structural rules [4764]
🖼 Orphan photo: R38 → article R5 (an image must belong to an article)
=== page 1: 6 crops, 6 datelines ===
H44 [106,111,4084,3144] 3978x3033 mem=21
DL56 [1265,901,4079,4724] 2814x3823 mem=11
DL9 [105,2334,1197,6302] 1092x3968 mem=5
H59 [112,2762,3229,4860] 3117x2098 mem=13
H41 [2577,4793,4084,6309] 1507x1516 mem=4
H30 [668,4829,3208,6302] 2540x1473 mem=11
─ NT late rule-split: R5 → 2 bands at structural rules [4764]
🖼 Orphan photo: R38 → article R5 (an image must belong to an article)
=== page 1: 6 crops, 6 datelines ===
H44 [106,111,4084,3144] 3978x3033 mem=21
DL56 [1265,901,4079,4724] 2814x3823 mem=11
DL9 [105,2334,1197,6302] 1092x3968 mem=5
H59 [112,2762,3229,4860] 3117x2098 mem=13
H41 [2577,4793,4084,6309] 1507x1516 mem=4
H30 [668,4829,3208,6302] 2540x1473 mem=11
─ NT late rule-split: R5 → 2 bands at structural rules [4764]
🖼 Orphan photo: R38 → article R5 (an image must belong to an article)
=== page 1: 6 crops, 6 datelines ===
H44 [106,111,4084,3144] 3978x3033 mem=21
DL56 [1265,901,4079,4724] 2814x3823 mem=11
DL9 [105,2334,1197,6302] 1092x3968 mem=5
H59 [112,2762,3229,4860] 3117x2098 mem=13
H41 [2577,4793,4084,6309] 1507x1516 mem=4
H30 [668,4829,3208,6302] 2540x1473 mem=11
─ NT late rule-split: R5 → 2 bands at structural rules [4764]
🖼 Orphan photo: R38 → article R5 (an image must belong to an article)
=== page 1: 6 crops, 6 datelines ===
H44 [106,111,4084,3144] 3978x3033 mem=21
DL56 [1265,901,4079,4724] 2814x3823 mem=11
DL9 [105,2334,1197,6302] 1092x3968 mem=5
H59 [112,2762,3229,4860] 3117x2098 mem=13
H41 [2577,4793,4084,6309] 1507x1516 mem=4
H30 [668,4829,3208,6302] 2540x1473 mem=11
─ NT late rule-split: R5 → 2 bands at structural rules [4764]
🖼 Orphan photo: R38 → article R5 (an image must belong to an article)
=== page 1: 6 crops, 6 datelines ===
H44 [106,111,4084,3144] 3978x3033 mem=21
DL56 [1265,901,4079,4724] 2814x3823 mem=11
DL9 [105,2334,1197,6302] 1092x3968 mem=5
H59 [112,2762,3229,4860] 3117x2098 mem=13
H41 [2577,4793,4084,6309] 1507x1516 mem=4
H30 [668,4829,3208,6302] 2540x1473 mem=11
─ NT late rule-split: R5 → 2 bands at structural rules [4764]
🖼 Orphan photo: R38 → article R5 (an image must belong to an article)
=== page 1: 6 crops, 6 datelines ===
H44 [106,111,4084,3144] 3978x3033 mem=21
DL56 [1265,901,4079,4724] 2814x3823 mem=11
DL9 [105,2334,1197,6302] 1092x3968 mem=5
H59 [112,2762,3229,4860] 3117x2098 mem=13
H41 [2577,4793,4084,6309] 1507x1516 mem=4
H30 [668,4829,3208,6302] 2540x1473 mem=11
─ NT late rule-split: R5 → 2 bands at structural rules [4764]
🖼 Orphan photo: R38 → article R5 (an image must belong to an article)
=== page 2: 31 crops, 30 datelines ===
H80 [1833,465,3228,1814] 1395x1349 mem=6
H65 [3293,465,4079,987] 786x522 mem=2
H84 [106,501,1776,1820] 1670x1319 mem=6
H43 [3292,1014,4079,1562] 787x548 mem=2
DL9 [3292,1590,4079,2136] 787x546 mem=2
H78 [1838,1678,2517,1805] 679x127 mem=2
DL7 [104,1851,923,2566] 819x715 mem=3
H74 [981,1883,2350,3060] 1369x1177 mem=4
H72 [2408,1884,3227,2713] 819x829 mem=2
DL5 [3292,2167,4079,2759] 787x592 mem=2
DL23 [104,2596,922,2998] 818x402 mem=2
H58 [2408,2772,3226,3479] 818x707 mem=2
DL13 [3292,2787,4079,3333] 787x546 mem=2
DL20 [106,3050,923,3478] 817x428 mem=2
H60 [981,3117,2351,3479] 1370x362 mem=3
DL1 [3293,3382,4079,4190] 786x808 mem=2
P67 [131,3486,599,5211] 468x1725 mem=4
DL10 [1559,3528,3226,4291] 1667x763 mem=4
P63 [677,3558,1499,4144] 822x586 mem=2
H50 [678,4170,1497,4966] 819x796 mem=2
DL12 [3292,4217,4079,4815] 787x598 mem=2
H71 [1560,4365,3226,4958] 1666x593 mem=3
H51 [3292,4842,4079,5479] 787x637 mem=2
DL41 [1561,4960,3225,5110] 1664x150 mem=2
H54 [678,4987,1498,5443] 820x456 mem=2
H76 [1559,5171,3228,5881] 1669x710 mem=5
H53 [677,5467,1498,5964] 821x497 mem=2
H83 [3291,5509,4079,6303] 788x794 mem=3
H56 [1559,5944,3228,6302] 1669x358 mem=3
H46 [680,5993,1498,6302] 818x309 mem=2
O79 [152,6141,590,6257] 438x116 mem=1
🖼 Orphan photo: R90 → article R67 (an image must belong to an article)
=== page 2: 31 crops, 30 datelines ===
H80 [1833,465,3228,1814] 1395x1349 mem=6
H65 [3293,465,4079,987] 786x522 mem=2
H84 [106,501,1776,1820] 1670x1319 mem=6
H43 [3292,1014,4079,1562] 787x548 mem=2
DL9 [3292,1590,4079,2136] 787x546 mem=2
H78 [1838,1678,2517,1805] 679x127 mem=2
DL7 [104,1851,923,2566] 819x715 mem=3
H74 [981,1883,2350,3060] 1369x1177 mem=4
H72 [2408,1884,3227,2713] 819x829 mem=2
DL5 [3292,2167,4079,2759] 787x592 mem=2
DL23 [104,2596,922,2998] 818x402 mem=2
H58 [2408,2772,3226,3479] 818x707 mem=2
DL13 [3292,2787,4079,3333] 787x546 mem=2
DL20 [106,3050,923,3478] 817x428 mem=2
H60 [981,3117,2351,3479] 1370x362 mem=3
DL1 [3293,3382,4079,4190] 786x808 mem=2
P67 [131,3486,599,5211] 468x1725 mem=4
DL10 [1559,3528,3226,4291] 1667x763 mem=4
P63 [677,3558,1499,4144] 822x586 mem=2
H50 [678,4170,1497,4966] 819x796 mem=2
DL12 [3292,4217,4079,4815] 787x598 mem=2
H71 [1560,4365,3226,4958] 1666x593 mem=3
H51 [3292,4842,4079,5479] 787x637 mem=2
DL41 [1561,4960,3225,5110] 1664x150 mem=2
H54 [678,4987,1498,5443] 820x456 mem=2
H76 [1559,5171,3228,5881] 1669x710 mem=5
H53 [677,5467,1498,5964] 821x497 mem=2
H83 [3291,5509,4079,6303] 788x794 mem=3
H56 [1559,5944,3228,6302] 1669x358 mem=3
H46 [680,5993,1498,6302] 818x309 mem=2
O79 [152,6141,590,6257] 438x116 mem=1
🖼 Orphan photo: R90 → article R67 (an image must belong to an article)
=== page 2: 31 crops, 30 datelines ===
H80 [1833,465,3228,1814] 1395x1349 mem=6
H65 [3293,465,4079,987] 786x522 mem=2
H84 [106,501,1776,1820] 1670x1319 mem=6
H43 [3292,1014,4079,1562] 787x548 mem=2
DL9 [3292,1590,4079,2136] 787x546 mem=2
H78 [1838,1678,2517,1805] 679x127 mem=2
DL7 [104,1851,923,2566] 819x715 mem=3
H74 [981,1883,2350,3060] 1369x1177 mem=4
H72 [2408,1884,3227,2713] 819x829 mem=2
DL5 [3292,2167,4079,2759] 787x592 mem=2
DL23 [104,2596,922,2998] 818x402 mem=2
H58 [2408,2772,3226,3479] 818x707 mem=2
DL13 [3292,2787,4079,3333] 787x546 mem=2
DL20 [106,3050,923,3478] 817x428 mem=2
H60 [981,3117,2351,3479] 1370x362 mem=3
DL1 [3293,3382,4079,4190] 786x808 mem=2
P67 [131,3486,599,5211] 468x1725 mem=4
DL10 [1559,3528,3226,4291] 1667x763 mem=4
P63 [677,3558,1499,4144] 822x586 mem=2
H50 [678,4170,1497,4966] 819x796 mem=2
DL12 [3292,4217,4079,4815] 787x598 mem=2
H71 [1560,4365,3226,4958] 1666x593 mem=3
H51 [3292,4842,4079,5479] 787x637 mem=2
DL41 [1561,4960,3225,5110] 1664x150 mem=2
H54 [678,4987,1498,5443] 820x456 mem=2
H76 [1559,5171,3228,5881] 1669x710 mem=5
H53 [677,5467,1498,5964] 821x497 mem=2
H83 [3291,5509,4079,6303] 788x794 mem=3
H56 [1559,5944,3228,6302] 1669x358 mem=3
H46 [680,5993,1498,6302] 818x309 mem=2
O79 [152,6141,590,6257] 438x116 mem=1
🖼 Orphan photo: R90 → article R67 (an image must belong to an article)
=== page 2: 31 crops, 30 datelines ===
H80 [1833,465,3228,1814] 1395x1349 mem=6
H65 [3293,465,4079,987] 786x522 mem=2
H84 [106,501,1776,1820] 1670x1319 mem=6
H43 [3292,1014,4079,1562] 787x548 mem=2
DL9 [3292,1590,4079,2136] 787x546 mem=2
H78 [1838,1678,2517,1805] 679x127 mem=2
DL7 [104,1851,923,2566] 819x715 mem=3
H74 [981,1883,2350,3060] 1369x1177 mem=4
H72 [2408,1884,3227,2713] 819x829 mem=2
DL5 [3292,2167,4079,2759] 787x592 mem=2
DL23 [104,2596,922,2998] 818x402 mem=2
H58 [2408,2772,3226,3479] 818x707 mem=2
DL13 [3292,2787,4079,3333] 787x546 mem=2
DL20 [106,3050,923,3478] 817x428 mem=2
H60 [981,3117,2351,3479] 1370x362 mem=3
DL1 [3293,3382,4079,4190] 786x808 mem=2
P67 [131,3486,599,5211] 468x1725 mem=4
DL10 [1559,3528,3226,4291] 1667x763 mem=4
P63 [677,3558,1499,4144] 822x586 mem=2
H50 [678,4170,1497,4966] 819x796 mem=2
DL12 [3292,4217,4079,4815] 787x598 mem=2
H71 [1560,4365,3226,4958] 1666x593 mem=3
H51 [3292,4842,4079,5479] 787x637 mem=2
DL41 [1561,4960,3225,5110] 1664x150 mem=2
H54 [678,4987,1498,5443] 820x456 mem=2
H76 [1559,5171,3228,5881] 1669x710 mem=5
H53 [677,5467,1498,5964] 821x497 mem=2
H83 [3291,5509,4079,6303] 788x794 mem=3
H56 [1559,5944,3228,6302] 1669x358 mem=3
H46 [680,5993,1498,6302] 818x309 mem=2
O79 [152,6141,590,6257] 438x116 mem=1
🖼 Orphan photo: R90 → article R67 (an image must belong to an article)
=== page 2: 31 crops, 30 datelines ===
H80 [1833,465,3228,1814] 1395x1349 mem=6
H65 [3293,465,4079,987] 786x522 mem=2
H84 [106,501,1776,1820] 1670x1319 mem=6
H43 [3292,1014,4079,1562] 787x548 mem=2
DL9 [3292,1590,4079,2136] 787x546 mem=2
H78 [1838,1678,2517,1805] 679x127 mem=2
DL7 [104,1851,923,2566] 819x715 mem=3
H74 [981,1883,2350,3060] 1369x1177 mem=4
H72 [2408,1884,3227,2713] 819x829 mem=2
DL5 [3292,2167,4079,2759] 787x592 mem=2
DL23 [104,2596,922,2998] 818x402 mem=2
H58 [2408,2772,3226,3479] 818x707 mem=2
DL13 [3292,2787,4079,3333] 787x546 mem=2
DL20 [106,3050,923,3478] 817x428 mem=2
H60 [981,3117,2351,3479] 1370x362 mem=3
DL1 [3293,3382,4079,4190] 786x808 mem=2
P67 [131,3486,599,5211] 468x1725 mem=4
DL10 [1559,3528,3226,4291] 1667x763 mem=4
P63 [677,3558,1499,4144] 822x586 mem=2
H50 [678,4170,1497,4966] 819x796 mem=2
DL12 [3292,4217,4079,4815] 787x598 mem=2
H71 [1560,4365,3226,4958] 1666x593 mem=3
H51 [3292,4842,4079,5479] 787x637 mem=2
DL41 [1561,4960,3225,5110] 1664x150 mem=2
H54 [678,4987,1498,5443] 820x456 mem=2
H76 [1559,5171,3228,5881] 1669x710 mem=5
H53 [677,5467,1498,5964] 821x497 mem=2
H83 [3291,5509,4079,6303] 788x794 mem=3
H56 [1559,5944,3228,6302] 1669x358 mem=3
H46 [680,5993,1498,6302] 818x309 mem=2
O79 [152,6141,590,6257] 438x116 mem=1
🖼 Orphan photo: R90 → article R67 (an image must belong to an article)
=== page 2: 31 crops, 30 datelines ===
H80 [1833,465,3228,1814] 1395x1349 mem=6
H65 [3293,465,4079,987] 786x522 mem=2
H84 [106,501,1776,1820] 1670x1319 mem=6
H43 [3292,1014,4079,1562] 787x548 mem=2
DL9 [3292,1590,4079,2136] 787x546 mem=2
H78 [1838,1678,2517,1805] 679x127 mem=2
DL7 [104,1851,923,2566] 819x715 mem=3
H74 [981,1883,2350,3060] 1369x1177 mem=4
H72 [2408,1884,3227,2713] 819x829 mem=2
DL5 [3292,2167,4079,2759] 787x592 mem=2
DL23 [104,2596,922,2998] 818x402 mem=2
H58 [2408,2772,3226,3479] 818x707 mem=2
DL13 [3292,2787,4079,3333] 787x546 mem=2
DL20 [106,3050,923,3478] 817x428 mem=2
H60 [981,3117,2351,3479] 1370x362 mem=3
DL1 [3293,3382,4079,4190] 786x808 mem=2
P67 [131,3486,599,5211] 468x1725 mem=4
DL10 [1559,3528,3226,4291] 1667x763 mem=4
P63 [677,3558,1499,4144] 822x586 mem=2
H50 [678,4170,1497,4966] 819x796 mem=2
DL12 [3292,4217,4079,4815] 787x598 mem=2
H71 [1560,4365,3226,4958] 1666x593 mem=3
H51 [3292,4842,4079,5479] 787x637 mem=2
DL41 [1561,4960,3225,5110] 1664x150 mem=2
H54 [678,4987,1498,5443] 820x456 mem=2
H76 [1559,5171,3228,5881] 1669x710 mem=5
H53 [677,5467,1498,5964] 821x497 mem=2
H83 [3291,5509,4079,6303] 788x794 mem=3
H56 [1559,5944,3228,6302] 1669x358 mem=3
H46 [680,5993,1498,6302] 818x309 mem=2
O79 [152,6141,590,6257] 438x116 mem=1
🖼 Orphan photo: R90 → article R67 (an image must belong to an article)
=== page 2: 31 crops, 30 datelines ===
H80 [1833,465,3228,1814] 1395x1349 mem=6
H65 [3293,465,4079,987] 786x522 mem=2
H84 [106,501,1776,1820] 1670x1319 mem=6
H43 [3292,1014,4079,1562] 787x548 mem=2
DL9 [3292,1590,4079,2136] 787x546 mem=2
H78 [1838,1678,2517,1805] 679x127 mem=2
DL7 [104,1851,923,2566] 819x715 mem=3
H74 [981,1883,2350,3060] 1369x1177 mem=4
H72 [2408,1884,3227,2713] 819x829 mem=2
DL5 [3292,2167,4079,2759] 787x592 mem=2
DL23 [104,2596,922,2998] 818x402 mem=2
H58 [2408,2772,3226,3479] 818x707 mem=2
DL13 [3292,2787,4079,3333] 787x546 mem=2
DL20 [106,3050,923,3478] 817x428 mem=2
H60 [981,3117,2351,3479] 1370x362 mem=3
DL1 [3293,3382,4079,4190] 786x808 mem=2
P67 [131,3486,599,5211] 468x1725 mem=4
DL10 [1559,3528,3226,4291] 1667x763 mem=4
P63 [677,3558,1499,4144] 822x586 mem=2
H50 [678,4170,1497,4966] 819x796 mem=2
DL12 [3292,4217,4079,4815] 787x598 mem=2
H71 [1560,4365,3226,4958] 1666x593 mem=3
H51 [3292,4842,4079,5479] 787x637 mem=2
DL41 [1561,4960,3225,5110] 1664x150 mem=2
H54 [678,4987,1498,5443] 820x456 mem=2
H76 [1559,5171,3228,5881] 1669x710 mem=5
H53 [677,5467,1498,5964] 821x497 mem=2
H83 [3291,5509,4079,6303] 788x794 mem=3
H56 [1559,5944,3228,6302] 1669x358 mem=3
H46 [680,5993,1498,6302] 818x309 mem=2
O79 [152,6141,590,6257] 438x116 mem=1
🖼 Orphan photo: R90 → article R67 (an image must belong to an article)
DONE -> output/NamastheTelangana_Adilabad_20260528_20260610_160056/all_article_crops_review

281
_nta3.log
View File

@ -1,281 +0,0 @@
=== page 1: 6 crops, 6 datelines ===
H44 [106,111,4084,3144] 3978x3033 mem=23
DL9 [105,2334,1200,6302] 1095x3968 mem=6
DL13 [1320,2761,4079,4724] 2759x1963 mem=14
H59 [115,3752,3228,4860] 3113x1108 mem=7
H41 [2577,4793,4084,6309] 1507x1516 mem=4
H30 [668,4829,3208,6302] 2540x1473 mem=11
─ NT late rule-split: R5 → 2 bands at structural rules [4764]
🖼 Orphan photo: R38 → article R5 (an image must belong to an article)
=== page 1: 6 crops, 6 datelines ===
H44 [106,111,4084,3144] 3978x3033 mem=23
DL9 [105,2334,1200,6302] 1095x3968 mem=6
DL13 [1320,2761,4079,4724] 2759x1963 mem=14
H59 [115,3752,3228,4860] 3113x1108 mem=7
H41 [2577,4793,4084,6309] 1507x1516 mem=4
H30 [668,4829,3208,6302] 2540x1473 mem=11
─ NT late rule-split: R5 → 2 bands at structural rules [4764]
🖼 Orphan photo: R38 → article R5 (an image must belong to an article)
=== page 1: 6 crops, 6 datelines ===
H44 [106,111,4084,3144] 3978x3033 mem=23
DL9 [105,2334,1200,6302] 1095x3968 mem=6
DL13 [1320,2761,4079,4724] 2759x1963 mem=14
H59 [115,3752,3228,4860] 3113x1108 mem=7
H41 [2577,4793,4084,6309] 1507x1516 mem=4
H30 [668,4829,3208,6302] 2540x1473 mem=11
─ NT late rule-split: R5 → 2 bands at structural rules [4764]
🖼 Orphan photo: R38 → article R5 (an image must belong to an article)
=== page 1: 6 crops, 6 datelines ===
H44 [106,111,4084,3144] 3978x3033 mem=23
DL9 [105,2334,1200,6302] 1095x3968 mem=6
DL13 [1320,2761,4079,4724] 2759x1963 mem=14
H59 [115,3752,3228,4860] 3113x1108 mem=7
H41 [2577,4793,4084,6309] 1507x1516 mem=4
H30 [668,4829,3208,6302] 2540x1473 mem=11
─ NT late rule-split: R5 → 2 bands at structural rules [4764]
🖼 Orphan photo: R38 → article R5 (an image must belong to an article)
=== page 1: 6 crops, 6 datelines ===
H44 [106,111,4084,3144] 3978x3033 mem=23
DL9 [105,2334,1200,6302] 1095x3968 mem=6
DL13 [1320,2761,4079,4724] 2759x1963 mem=14
H59 [115,3752,3228,4860] 3113x1108 mem=7
H41 [2577,4793,4084,6309] 1507x1516 mem=4
H30 [668,4829,3208,6302] 2540x1473 mem=11
─ NT late rule-split: R5 → 2 bands at structural rules [4764]
🖼 Orphan photo: R38 → article R5 (an image must belong to an article)
=== page 1: 6 crops, 6 datelines ===
H44 [106,111,4084,3144] 3978x3033 mem=23
DL9 [105,2334,1200,6302] 1095x3968 mem=6
DL13 [1320,2761,4079,4724] 2759x1963 mem=14
H59 [115,3752,3228,4860] 3113x1108 mem=7
H41 [2577,4793,4084,6309] 1507x1516 mem=4
H30 [668,4829,3208,6302] 2540x1473 mem=11
─ NT late rule-split: R5 → 2 bands at structural rules [4764]
🖼 Orphan photo: R38 → article R5 (an image must belong to an article)
=== page 1: 6 crops, 6 datelines ===
H44 [106,111,4084,3144] 3978x3033 mem=23
DL9 [105,2334,1200,6302] 1095x3968 mem=6
DL13 [1320,2761,4079,4724] 2759x1963 mem=14
H59 [115,3752,3228,4860] 3113x1108 mem=7
H41 [2577,4793,4084,6309] 1507x1516 mem=4
H30 [668,4829,3208,6302] 2540x1473 mem=11
─ NT late rule-split: R5 → 2 bands at structural rules [4764]
🖼 Orphan photo: R38 → article R5 (an image must belong to an article)
=== page 2: 30 crops, 30 datelines ===
H80 [1833,465,3228,1814] 1395x1349 mem=6
H65 [3293,465,4079,987] 786x522 mem=2
H84 [106,501,1776,1820] 1670x1319 mem=6
H43 [3292,1014,4079,1562] 787x548 mem=2
DL9 [3292,1590,4079,2136] 787x546 mem=2
H78 [1838,1678,2517,1805] 679x127 mem=2
DL7 [104,1851,923,2566] 819x715 mem=3
H74 [981,1883,2350,3060] 1369x1177 mem=4
H72 [2408,1884,3227,2713] 819x829 mem=2
DL5 [3292,2167,4079,2759] 787x592 mem=2
DL23 [104,2596,922,2998] 818x402 mem=2
H58 [2408,2772,3226,3479] 818x707 mem=2
DL13 [3292,2787,4079,3333] 787x546 mem=2
DL20 [106,3050,923,3478] 817x428 mem=2
H60 [981,3117,2351,3479] 1370x362 mem=3
DL1 [3293,3382,4079,4190] 786x808 mem=2
P67 [131,3486,599,4979] 468x1493 mem=3
DL10 [1559,3528,3226,4291] 1667x763 mem=4
P63 [677,3558,1499,4144] 822x586 mem=2
H50 [610,4170,1497,4966] 887x796 mem=2
DL12 [3292,4217,4079,4815] 787x598 mem=2
H71 [1560,4365,3226,4958] 1666x593 mem=3
H51 [3292,4842,4079,5479] 787x637 mem=2
DL41 [1561,4960,3225,5110] 1664x150 mem=2
DL26 [154,4987,1498,5443] 1344x456 mem=3
H76 [1559,5171,3228,5881] 1669x710 mem=5
H53 [114,5467,1498,6269] 1384x802 mem=3
H83 [3291,5509,4079,6303] 788x794 mem=3
H56 [1559,5944,3228,6302] 1669x358 mem=3
H46 [590,5993,1498,6302] 908x309 mem=2
=== page 2: 30 crops, 30 datelines ===
H80 [1833,465,3228,1814] 1395x1349 mem=6
H65 [3293,465,4079,987] 786x522 mem=2
H84 [106,501,1776,1820] 1670x1319 mem=6
H43 [3292,1014,4079,1562] 787x548 mem=2
DL9 [3292,1590,4079,2136] 787x546 mem=2
H78 [1838,1678,2517,1805] 679x127 mem=2
DL7 [104,1851,923,2566] 819x715 mem=3
H74 [981,1883,2350,3060] 1369x1177 mem=4
H72 [2408,1884,3227,2713] 819x829 mem=2
DL5 [3292,2167,4079,2759] 787x592 mem=2
DL23 [104,2596,922,2998] 818x402 mem=2
H58 [2408,2772,3226,3479] 818x707 mem=2
DL13 [3292,2787,4079,3333] 787x546 mem=2
DL20 [106,3050,923,3478] 817x428 mem=2
H60 [981,3117,2351,3479] 1370x362 mem=3
DL1 [3293,3382,4079,4190] 786x808 mem=2
P67 [131,3486,599,4979] 468x1493 mem=3
DL10 [1559,3528,3226,4291] 1667x763 mem=4
P63 [677,3558,1499,4144] 822x586 mem=2
H50 [610,4170,1497,4966] 887x796 mem=2
DL12 [3292,4217,4079,4815] 787x598 mem=2
H71 [1560,4365,3226,4958] 1666x593 mem=3
H51 [3292,4842,4079,5479] 787x637 mem=2
DL41 [1561,4960,3225,5110] 1664x150 mem=2
DL26 [154,4987,1498,5443] 1344x456 mem=3
H76 [1559,5171,3228,5881] 1669x710 mem=5
H53 [114,5467,1498,6269] 1384x802 mem=3
H83 [3291,5509,4079,6303] 788x794 mem=3
H56 [1559,5944,3228,6302] 1669x358 mem=3
H46 [590,5993,1498,6302] 908x309 mem=2
=== page 2: 30 crops, 30 datelines ===
H80 [1833,465,3228,1814] 1395x1349 mem=6
H65 [3293,465,4079,987] 786x522 mem=2
H84 [106,501,1776,1820] 1670x1319 mem=6
H43 [3292,1014,4079,1562] 787x548 mem=2
DL9 [3292,1590,4079,2136] 787x546 mem=2
H78 [1838,1678,2517,1805] 679x127 mem=2
DL7 [104,1851,923,2566] 819x715 mem=3
H74 [981,1883,2350,3060] 1369x1177 mem=4
H72 [2408,1884,3227,2713] 819x829 mem=2
DL5 [3292,2167,4079,2759] 787x592 mem=2
DL23 [104,2596,922,2998] 818x402 mem=2
H58 [2408,2772,3226,3479] 818x707 mem=2
DL13 [3292,2787,4079,3333] 787x546 mem=2
DL20 [106,3050,923,3478] 817x428 mem=2
H60 [981,3117,2351,3479] 1370x362 mem=3
DL1 [3293,3382,4079,4190] 786x808 mem=2
P67 [131,3486,599,4979] 468x1493 mem=3
DL10 [1559,3528,3226,4291] 1667x763 mem=4
P63 [677,3558,1499,4144] 822x586 mem=2
H50 [610,4170,1497,4966] 887x796 mem=2
DL12 [3292,4217,4079,4815] 787x598 mem=2
H71 [1560,4365,3226,4958] 1666x593 mem=3
H51 [3292,4842,4079,5479] 787x637 mem=2
DL41 [1561,4960,3225,5110] 1664x150 mem=2
DL26 [154,4987,1498,5443] 1344x456 mem=3
H76 [1559,5171,3228,5881] 1669x710 mem=5
H53 [114,5467,1498,6269] 1384x802 mem=3
H83 [3291,5509,4079,6303] 788x794 mem=3
H56 [1559,5944,3228,6302] 1669x358 mem=3
H46 [590,5993,1498,6302] 908x309 mem=2
=== page 2: 30 crops, 30 datelines ===
H80 [1833,465,3228,1814] 1395x1349 mem=6
H65 [3293,465,4079,987] 786x522 mem=2
H84 [106,501,1776,1820] 1670x1319 mem=6
H43 [3292,1014,4079,1562] 787x548 mem=2
DL9 [3292,1590,4079,2136] 787x546 mem=2
H78 [1838,1678,2517,1805] 679x127 mem=2
DL7 [104,1851,923,2566] 819x715 mem=3
H74 [981,1883,2350,3060] 1369x1177 mem=4
H72 [2408,1884,3227,2713] 819x829 mem=2
DL5 [3292,2167,4079,2759] 787x592 mem=2
DL23 [104,2596,922,2998] 818x402 mem=2
H58 [2408,2772,3226,3479] 818x707 mem=2
DL13 [3292,2787,4079,3333] 787x546 mem=2
DL20 [106,3050,923,3478] 817x428 mem=2
H60 [981,3117,2351,3479] 1370x362 mem=3
DL1 [3293,3382,4079,4190] 786x808 mem=2
P67 [131,3486,599,4979] 468x1493 mem=3
DL10 [1559,3528,3226,4291] 1667x763 mem=4
P63 [677,3558,1499,4144] 822x586 mem=2
H50 [610,4170,1497,4966] 887x796 mem=2
DL12 [3292,4217,4079,4815] 787x598 mem=2
H71 [1560,4365,3226,4958] 1666x593 mem=3
H51 [3292,4842,4079,5479] 787x637 mem=2
DL41 [1561,4960,3225,5110] 1664x150 mem=2
DL26 [154,4987,1498,5443] 1344x456 mem=3
H76 [1559,5171,3228,5881] 1669x710 mem=5
H53 [114,5467,1498,6269] 1384x802 mem=3
H83 [3291,5509,4079,6303] 788x794 mem=3
H56 [1559,5944,3228,6302] 1669x358 mem=3
H46 [590,5993,1498,6302] 908x309 mem=2
=== page 2: 30 crops, 30 datelines ===
H80 [1833,465,3228,1814] 1395x1349 mem=6
H65 [3293,465,4079,987] 786x522 mem=2
H84 [106,501,1776,1820] 1670x1319 mem=6
H43 [3292,1014,4079,1562] 787x548 mem=2
DL9 [3292,1590,4079,2136] 787x546 mem=2
H78 [1838,1678,2517,1805] 679x127 mem=2
DL7 [104,1851,923,2566] 819x715 mem=3
H74 [981,1883,2350,3060] 1369x1177 mem=4
H72 [2408,1884,3227,2713] 819x829 mem=2
DL5 [3292,2167,4079,2759] 787x592 mem=2
DL23 [104,2596,922,2998] 818x402 mem=2
H58 [2408,2772,3226,3479] 818x707 mem=2
DL13 [3292,2787,4079,3333] 787x546 mem=2
DL20 [106,3050,923,3478] 817x428 mem=2
H60 [981,3117,2351,3479] 1370x362 mem=3
DL1 [3293,3382,4079,4190] 786x808 mem=2
P67 [131,3486,599,4979] 468x1493 mem=3
DL10 [1559,3528,3226,4291] 1667x763 mem=4
P63 [677,3558,1499,4144] 822x586 mem=2
H50 [610,4170,1497,4966] 887x796 mem=2
DL12 [3292,4217,4079,4815] 787x598 mem=2
H71 [1560,4365,3226,4958] 1666x593 mem=3
H51 [3292,4842,4079,5479] 787x637 mem=2
DL41 [1561,4960,3225,5110] 1664x150 mem=2
DL26 [154,4987,1498,5443] 1344x456 mem=3
H76 [1559,5171,3228,5881] 1669x710 mem=5
H53 [114,5467,1498,6269] 1384x802 mem=3
H83 [3291,5509,4079,6303] 788x794 mem=3
H56 [1559,5944,3228,6302] 1669x358 mem=3
H46 [590,5993,1498,6302] 908x309 mem=2
=== page 2: 30 crops, 30 datelines ===
H80 [1833,465,3228,1814] 1395x1349 mem=6
H65 [3293,465,4079,987] 786x522 mem=2
H84 [106,501,1776,1820] 1670x1319 mem=6
H43 [3292,1014,4079,1562] 787x548 mem=2
DL9 [3292,1590,4079,2136] 787x546 mem=2
H78 [1838,1678,2517,1805] 679x127 mem=2
DL7 [104,1851,923,2566] 819x715 mem=3
H74 [981,1883,2350,3060] 1369x1177 mem=4
H72 [2408,1884,3227,2713] 819x829 mem=2
DL5 [3292,2167,4079,2759] 787x592 mem=2
DL23 [104,2596,922,2998] 818x402 mem=2
H58 [2408,2772,3226,3479] 818x707 mem=2
DL13 [3292,2787,4079,3333] 787x546 mem=2
DL20 [106,3050,923,3478] 817x428 mem=2
H60 [981,3117,2351,3479] 1370x362 mem=3
DL1 [3293,3382,4079,4190] 786x808 mem=2
P67 [131,3486,599,4979] 468x1493 mem=3
DL10 [1559,3528,3226,4291] 1667x763 mem=4
P63 [677,3558,1499,4144] 822x586 mem=2
H50 [610,4170,1497,4966] 887x796 mem=2
DL12 [3292,4217,4079,4815] 787x598 mem=2
H71 [1560,4365,3226,4958] 1666x593 mem=3
H51 [3292,4842,4079,5479] 787x637 mem=2
DL41 [1561,4960,3225,5110] 1664x150 mem=2
DL26 [154,4987,1498,5443] 1344x456 mem=3
H76 [1559,5171,3228,5881] 1669x710 mem=5
H53 [114,5467,1498,6269] 1384x802 mem=3
H83 [3291,5509,4079,6303] 788x794 mem=3
H56 [1559,5944,3228,6302] 1669x358 mem=3
H46 [590,5993,1498,6302] 908x309 mem=2
=== page 2: 30 crops, 30 datelines ===
H80 [1833,465,3228,1814] 1395x1349 mem=6
H65 [3293,465,4079,987] 786x522 mem=2
H84 [106,501,1776,1820] 1670x1319 mem=6
H43 [3292,1014,4079,1562] 787x548 mem=2
DL9 [3292,1590,4079,2136] 787x546 mem=2
H78 [1838,1678,2517,1805] 679x127 mem=2
DL7 [104,1851,923,2566] 819x715 mem=3
H74 [981,1883,2350,3060] 1369x1177 mem=4
H72 [2408,1884,3227,2713] 819x829 mem=2
DL5 [3292,2167,4079,2759] 787x592 mem=2
DL23 [104,2596,922,2998] 818x402 mem=2
H58 [2408,2772,3226,3479] 818x707 mem=2
DL13 [3292,2787,4079,3333] 787x546 mem=2
DL20 [106,3050,923,3478] 817x428 mem=2
H60 [981,3117,2351,3479] 1370x362 mem=3
DL1 [3293,3382,4079,4190] 786x808 mem=2
P67 [131,3486,599,4979] 468x1493 mem=3
DL10 [1559,3528,3226,4291] 1667x763 mem=4
P63 [677,3558,1499,4144] 822x586 mem=2
H50 [610,4170,1497,4966] 887x796 mem=2
DL12 [3292,4217,4079,4815] 787x598 mem=2
H71 [1560,4365,3226,4958] 1666x593 mem=3
H51 [3292,4842,4079,5479] 787x637 mem=2
DL41 [1561,4960,3225,5110] 1664x150 mem=2
DL26 [154,4987,1498,5443] 1344x456 mem=3
H76 [1559,5171,3228,5881] 1669x710 mem=5
H53 [114,5467,1498,6269] 1384x802 mem=3
H83 [3291,5509,4079,6303] 788x794 mem=3
H56 [1559,5944,3228,6302] 1669x358 mem=3
H46 [590,5993,1498,6302] 908x309 mem=2
DONE -> output/NamastheTelangana_Adilabad_20260528_20260610_160056/all_article_crops_review

295
_nta4.log
View File

@ -1,295 +0,0 @@
=== page 1: 6 crops, 6 datelines ===
H44 [106,111,4084,3144] 3978x3033 mem=23
DL9 [105,2334,1200,6302] 1095x3968 mem=6
DL13 [1320,2761,4079,4724] 2759x1963 mem=14
H59 [115,3752,3228,4860] 3113x1108 mem=7
H41 [2577,4793,4084,6309] 1507x1516 mem=4
H30 [668,4829,3208,6302] 2540x1473 mem=11
─ NT late rule-split: R5 → 2 bands at structural rules [4764]
🖼 Orphan photo: R38 → article R5 (an image must belong to an article)
=== page 1: 6 crops, 6 datelines ===
H44 [106,111,4084,3144] 3978x3033 mem=23
DL9 [105,2334,1200,6302] 1095x3968 mem=6
DL13 [1320,2761,4079,4724] 2759x1963 mem=14
H59 [115,3752,3228,4860] 3113x1108 mem=7
H41 [2577,4793,4084,6309] 1507x1516 mem=4
H30 [668,4829,3208,6302] 2540x1473 mem=11
─ NT late rule-split: R5 → 2 bands at structural rules [4764]
🖼 Orphan photo: R38 → article R5 (an image must belong to an article)
=== page 1: 6 crops, 6 datelines ===
H44 [106,111,4084,3144] 3978x3033 mem=23
DL9 [105,2334,1200,6302] 1095x3968 mem=6
DL13 [1320,2761,4079,4724] 2759x1963 mem=14
H59 [115,3752,3228,4860] 3113x1108 mem=7
H41 [2577,4793,4084,6309] 1507x1516 mem=4
H30 [668,4829,3208,6302] 2540x1473 mem=11
─ NT late rule-split: R5 → 2 bands at structural rules [4764]
🖼 Orphan photo: R38 → article R5 (an image must belong to an article)
=== page 1: 6 crops, 6 datelines ===
H44 [106,111,4084,3144] 3978x3033 mem=23
DL9 [105,2334,1200,6302] 1095x3968 mem=6
DL13 [1320,2761,4079,4724] 2759x1963 mem=14
H59 [115,3752,3228,4860] 3113x1108 mem=7
H41 [2577,4793,4084,6309] 1507x1516 mem=4
H30 [668,4829,3208,6302] 2540x1473 mem=11
─ NT late rule-split: R5 → 2 bands at structural rules [4764]
🖼 Orphan photo: R38 → article R5 (an image must belong to an article)
=== page 1: 6 crops, 6 datelines ===
H44 [106,111,4084,3144] 3978x3033 mem=23
DL9 [105,2334,1200,6302] 1095x3968 mem=6
DL13 [1320,2761,4079,4724] 2759x1963 mem=14
H59 [115,3752,3228,4860] 3113x1108 mem=7
H41 [2577,4793,4084,6309] 1507x1516 mem=4
H30 [668,4829,3208,6302] 2540x1473 mem=11
─ NT late rule-split: R5 → 2 bands at structural rules [4764]
🖼 Orphan photo: R38 → article R5 (an image must belong to an article)
=== page 1: 6 crops, 6 datelines ===
H44 [106,111,4084,3144] 3978x3033 mem=23
DL9 [105,2334,1200,6302] 1095x3968 mem=6
DL13 [1320,2761,4079,4724] 2759x1963 mem=14
H59 [115,3752,3228,4860] 3113x1108 mem=7
H41 [2577,4793,4084,6309] 1507x1516 mem=4
H30 [668,4829,3208,6302] 2540x1473 mem=11
─ NT late rule-split: R5 → 2 bands at structural rules [4764]
🖼 Orphan photo: R38 → article R5 (an image must belong to an article)
=== page 1: 6 crops, 6 datelines ===
H44 [106,111,4084,3144] 3978x3033 mem=23
DL9 [105,2334,1200,6302] 1095x3968 mem=6
DL13 [1320,2761,4079,4724] 2759x1963 mem=14
H59 [115,3752,3228,4860] 3113x1108 mem=7
H41 [2577,4793,4084,6309] 1507x1516 mem=4
H30 [668,4829,3208,6302] 2540x1473 mem=11
─ NT late rule-split: R5 → 2 bands at structural rules [4764]
🖼 Orphan photo: R38 → article R5 (an image must belong to an article)
=== page 2: 31 crops, 30 datelines ===
H80 [1833,465,3228,1814] 1395x1349 mem=6
H65 [3293,465,4079,987] 786x522 mem=2
H84 [106,501,1776,1820] 1670x1319 mem=6
H43 [3292,1014,4079,1562] 787x548 mem=2
DL9 [3292,1590,4079,2136] 787x546 mem=2
H78 [1838,1678,2517,1805] 679x127 mem=2
DL7 [104,1851,923,2566] 819x715 mem=3
H74 [981,1883,2350,3060] 1369x1177 mem=4
H72 [2408,1884,3227,2713] 819x829 mem=2
DL5 [3292,2167,4079,2759] 787x592 mem=2
DL23 [104,2596,922,2998] 818x402 mem=2
H58 [2408,2772,3226,3479] 818x707 mem=2
DL13 [3292,2787,4079,3333] 787x546 mem=2
DL20 [106,3050,923,3478] 817x428 mem=2
H60 [981,3117,2351,3479] 1370x362 mem=3
DL1 [3293,3382,4079,4190] 786x808 mem=2
P67 [131,3486,599,5211] 468x1725 mem=4
DL10 [1559,3528,3226,4291] 1667x763 mem=4
P63 [677,3558,1499,4144] 822x586 mem=2
H50 [678,4170,1497,4966] 819x796 mem=2
DL12 [3292,4217,4079,4815] 787x598 mem=2
H71 [1560,4365,3226,4958] 1666x593 mem=3
H51 [3292,4842,4079,5479] 787x637 mem=2
DL41 [1561,4960,3225,5110] 1664x150 mem=2
H54 [678,4987,1498,5443] 820x456 mem=2
H76 [1559,5171,3228,5881] 1669x710 mem=5
H53 [677,5467,1498,5964] 821x497 mem=2
H83 [3291,5509,4079,6303] 788x794 mem=3
H56 [1559,5944,3228,6302] 1669x358 mem=3
H46 [680,5993,1498,6302] 818x309 mem=2
O79 [152,6141,590,6257] 438x116 mem=1
🖼 Orphan photo: R90 → article R67 (an image must belong to an article)
=== page 2: 31 crops, 30 datelines ===
H80 [1833,465,3228,1814] 1395x1349 mem=6
H65 [3293,465,4079,987] 786x522 mem=2
H84 [106,501,1776,1820] 1670x1319 mem=6
H43 [3292,1014,4079,1562] 787x548 mem=2
DL9 [3292,1590,4079,2136] 787x546 mem=2
H78 [1838,1678,2517,1805] 679x127 mem=2
DL7 [104,1851,923,2566] 819x715 mem=3
H74 [981,1883,2350,3060] 1369x1177 mem=4
H72 [2408,1884,3227,2713] 819x829 mem=2
DL5 [3292,2167,4079,2759] 787x592 mem=2
DL23 [104,2596,922,2998] 818x402 mem=2
H58 [2408,2772,3226,3479] 818x707 mem=2
DL13 [3292,2787,4079,3333] 787x546 mem=2
DL20 [106,3050,923,3478] 817x428 mem=2
H60 [981,3117,2351,3479] 1370x362 mem=3
DL1 [3293,3382,4079,4190] 786x808 mem=2
P67 [131,3486,599,5211] 468x1725 mem=4
DL10 [1559,3528,3226,4291] 1667x763 mem=4
P63 [677,3558,1499,4144] 822x586 mem=2
H50 [678,4170,1497,4966] 819x796 mem=2
DL12 [3292,4217,4079,4815] 787x598 mem=2
H71 [1560,4365,3226,4958] 1666x593 mem=3
H51 [3292,4842,4079,5479] 787x637 mem=2
DL41 [1561,4960,3225,5110] 1664x150 mem=2
H54 [678,4987,1498,5443] 820x456 mem=2
H76 [1559,5171,3228,5881] 1669x710 mem=5
H53 [677,5467,1498,5964] 821x497 mem=2
H83 [3291,5509,4079,6303] 788x794 mem=3
H56 [1559,5944,3228,6302] 1669x358 mem=3
H46 [680,5993,1498,6302] 818x309 mem=2
O79 [152,6141,590,6257] 438x116 mem=1
🖼 Orphan photo: R90 → article R67 (an image must belong to an article)
=== page 2: 31 crops, 30 datelines ===
H80 [1833,465,3228,1814] 1395x1349 mem=6
H65 [3293,465,4079,987] 786x522 mem=2
H84 [106,501,1776,1820] 1670x1319 mem=6
H43 [3292,1014,4079,1562] 787x548 mem=2
DL9 [3292,1590,4079,2136] 787x546 mem=2
H78 [1838,1678,2517,1805] 679x127 mem=2
DL7 [104,1851,923,2566] 819x715 mem=3
H74 [981,1883,2350,3060] 1369x1177 mem=4
H72 [2408,1884,3227,2713] 819x829 mem=2
DL5 [3292,2167,4079,2759] 787x592 mem=2
DL23 [104,2596,922,2998] 818x402 mem=2
H58 [2408,2772,3226,3479] 818x707 mem=2
DL13 [3292,2787,4079,3333] 787x546 mem=2
DL20 [106,3050,923,3478] 817x428 mem=2
H60 [981,3117,2351,3479] 1370x362 mem=3
DL1 [3293,3382,4079,4190] 786x808 mem=2
P67 [131,3486,599,5211] 468x1725 mem=4
DL10 [1559,3528,3226,4291] 1667x763 mem=4
P63 [677,3558,1499,4144] 822x586 mem=2
H50 [678,4170,1497,4966] 819x796 mem=2
DL12 [3292,4217,4079,4815] 787x598 mem=2
H71 [1560,4365,3226,4958] 1666x593 mem=3
H51 [3292,4842,4079,5479] 787x637 mem=2
DL41 [1561,4960,3225,5110] 1664x150 mem=2
H54 [678,4987,1498,5443] 820x456 mem=2
H76 [1559,5171,3228,5881] 1669x710 mem=5
H53 [677,5467,1498,5964] 821x497 mem=2
H83 [3291,5509,4079,6303] 788x794 mem=3
H56 [1559,5944,3228,6302] 1669x358 mem=3
H46 [680,5993,1498,6302] 818x309 mem=2
O79 [152,6141,590,6257] 438x116 mem=1
🖼 Orphan photo: R90 → article R67 (an image must belong to an article)
=== page 2: 31 crops, 30 datelines ===
H80 [1833,465,3228,1814] 1395x1349 mem=6
H65 [3293,465,4079,987] 786x522 mem=2
H84 [106,501,1776,1820] 1670x1319 mem=6
H43 [3292,1014,4079,1562] 787x548 mem=2
DL9 [3292,1590,4079,2136] 787x546 mem=2
H78 [1838,1678,2517,1805] 679x127 mem=2
DL7 [104,1851,923,2566] 819x715 mem=3
H74 [981,1883,2350,3060] 1369x1177 mem=4
H72 [2408,1884,3227,2713] 819x829 mem=2
DL5 [3292,2167,4079,2759] 787x592 mem=2
DL23 [104,2596,922,2998] 818x402 mem=2
H58 [2408,2772,3226,3479] 818x707 mem=2
DL13 [3292,2787,4079,3333] 787x546 mem=2
DL20 [106,3050,923,3478] 817x428 mem=2
H60 [981,3117,2351,3479] 1370x362 mem=3
DL1 [3293,3382,4079,4190] 786x808 mem=2
P67 [131,3486,599,5211] 468x1725 mem=4
DL10 [1559,3528,3226,4291] 1667x763 mem=4
P63 [677,3558,1499,4144] 822x586 mem=2
H50 [678,4170,1497,4966] 819x796 mem=2
DL12 [3292,4217,4079,4815] 787x598 mem=2
H71 [1560,4365,3226,4958] 1666x593 mem=3
H51 [3292,4842,4079,5479] 787x637 mem=2
DL41 [1561,4960,3225,5110] 1664x150 mem=2
H54 [678,4987,1498,5443] 820x456 mem=2
H76 [1559,5171,3228,5881] 1669x710 mem=5
H53 [677,5467,1498,5964] 821x497 mem=2
H83 [3291,5509,4079,6303] 788x794 mem=3
H56 [1559,5944,3228,6302] 1669x358 mem=3
H46 [680,5993,1498,6302] 818x309 mem=2
O79 [152,6141,590,6257] 438x116 mem=1
🖼 Orphan photo: R90 → article R67 (an image must belong to an article)
=== page 2: 31 crops, 30 datelines ===
H80 [1833,465,3228,1814] 1395x1349 mem=6
H65 [3293,465,4079,987] 786x522 mem=2
H84 [106,501,1776,1820] 1670x1319 mem=6
H43 [3292,1014,4079,1562] 787x548 mem=2
DL9 [3292,1590,4079,2136] 787x546 mem=2
H78 [1838,1678,2517,1805] 679x127 mem=2
DL7 [104,1851,923,2566] 819x715 mem=3
H74 [981,1883,2350,3060] 1369x1177 mem=4
H72 [2408,1884,3227,2713] 819x829 mem=2
DL5 [3292,2167,4079,2759] 787x592 mem=2
DL23 [104,2596,922,2998] 818x402 mem=2
H58 [2408,2772,3226,3479] 818x707 mem=2
DL13 [3292,2787,4079,3333] 787x546 mem=2
DL20 [106,3050,923,3478] 817x428 mem=2
H60 [981,3117,2351,3479] 1370x362 mem=3
DL1 [3293,3382,4079,4190] 786x808 mem=2
P67 [131,3486,599,5211] 468x1725 mem=4
DL10 [1559,3528,3226,4291] 1667x763 mem=4
P63 [677,3558,1499,4144] 822x586 mem=2
H50 [678,4170,1497,4966] 819x796 mem=2
DL12 [3292,4217,4079,4815] 787x598 mem=2
H71 [1560,4365,3226,4958] 1666x593 mem=3
H51 [3292,4842,4079,5479] 787x637 mem=2
DL41 [1561,4960,3225,5110] 1664x150 mem=2
H54 [678,4987,1498,5443] 820x456 mem=2
H76 [1559,5171,3228,5881] 1669x710 mem=5
H53 [677,5467,1498,5964] 821x497 mem=2
H83 [3291,5509,4079,6303] 788x794 mem=3
H56 [1559,5944,3228,6302] 1669x358 mem=3
H46 [680,5993,1498,6302] 818x309 mem=2
O79 [152,6141,590,6257] 438x116 mem=1
🖼 Orphan photo: R90 → article R67 (an image must belong to an article)
=== page 2: 31 crops, 30 datelines ===
H80 [1833,465,3228,1814] 1395x1349 mem=6
H65 [3293,465,4079,987] 786x522 mem=2
H84 [106,501,1776,1820] 1670x1319 mem=6
H43 [3292,1014,4079,1562] 787x548 mem=2
DL9 [3292,1590,4079,2136] 787x546 mem=2
H78 [1838,1678,2517,1805] 679x127 mem=2
DL7 [104,1851,923,2566] 819x715 mem=3
H74 [981,1883,2350,3060] 1369x1177 mem=4
H72 [2408,1884,3227,2713] 819x829 mem=2
DL5 [3292,2167,4079,2759] 787x592 mem=2
DL23 [104,2596,922,2998] 818x402 mem=2
H58 [2408,2772,3226,3479] 818x707 mem=2
DL13 [3292,2787,4079,3333] 787x546 mem=2
DL20 [106,3050,923,3478] 817x428 mem=2
H60 [981,3117,2351,3479] 1370x362 mem=3
DL1 [3293,3382,4079,4190] 786x808 mem=2
P67 [131,3486,599,5211] 468x1725 mem=4
DL10 [1559,3528,3226,4291] 1667x763 mem=4
P63 [677,3558,1499,4144] 822x586 mem=2
H50 [678,4170,1497,4966] 819x796 mem=2
DL12 [3292,4217,4079,4815] 787x598 mem=2
H71 [1560,4365,3226,4958] 1666x593 mem=3
H51 [3292,4842,4079,5479] 787x637 mem=2
DL41 [1561,4960,3225,5110] 1664x150 mem=2
H54 [678,4987,1498,5443] 820x456 mem=2
H76 [1559,5171,3228,5881] 1669x710 mem=5
H53 [677,5467,1498,5964] 821x497 mem=2
H83 [3291,5509,4079,6303] 788x794 mem=3
H56 [1559,5944,3228,6302] 1669x358 mem=3
H46 [680,5993,1498,6302] 818x309 mem=2
O79 [152,6141,590,6257] 438x116 mem=1
🖼 Orphan photo: R90 → article R67 (an image must belong to an article)
=== page 2: 31 crops, 30 datelines ===
H80 [1833,465,3228,1814] 1395x1349 mem=6
H65 [3293,465,4079,987] 786x522 mem=2
H84 [106,501,1776,1820] 1670x1319 mem=6
H43 [3292,1014,4079,1562] 787x548 mem=2
DL9 [3292,1590,4079,2136] 787x546 mem=2
H78 [1838,1678,2517,1805] 679x127 mem=2
DL7 [104,1851,923,2566] 819x715 mem=3
H74 [981,1883,2350,3060] 1369x1177 mem=4
H72 [2408,1884,3227,2713] 819x829 mem=2
DL5 [3292,2167,4079,2759] 787x592 mem=2
DL23 [104,2596,922,2998] 818x402 mem=2
H58 [2408,2772,3226,3479] 818x707 mem=2
DL13 [3292,2787,4079,3333] 787x546 mem=2
DL20 [106,3050,923,3478] 817x428 mem=2
H60 [981,3117,2351,3479] 1370x362 mem=3
DL1 [3293,3382,4079,4190] 786x808 mem=2
P67 [131,3486,599,5211] 468x1725 mem=4
DL10 [1559,3528,3226,4291] 1667x763 mem=4
P63 [677,3558,1499,4144] 822x586 mem=2
H50 [678,4170,1497,4966] 819x796 mem=2
DL12 [3292,4217,4079,4815] 787x598 mem=2
H71 [1560,4365,3226,4958] 1666x593 mem=3
H51 [3292,4842,4079,5479] 787x637 mem=2
DL41 [1561,4960,3225,5110] 1664x150 mem=2
H54 [678,4987,1498,5443] 820x456 mem=2
H76 [1559,5171,3228,5881] 1669x710 mem=5
H53 [677,5467,1498,5964] 821x497 mem=2
H83 [3291,5509,4079,6303] 788x794 mem=3
H56 [1559,5944,3228,6302] 1669x358 mem=3
H46 [680,5993,1498,6302] 818x309 mem=2
O79 [152,6141,590,6257] 438x116 mem=1
🖼 Orphan photo: R90 → article R67 (an image must belong to an article)
DONE -> output/NamastheTelangana_Adilabad_20260528_20260610_160056/all_article_crops_review

View File

@ -1,21 +0,0 @@
import sys, json, contextlib, io
sys.path.insert(0, ".")
from pathlib import Path
import smart_extractor as se
from _lines import separator_barriers
D = Path("output/AndhraJyothi_Siddipet District_20260602_20260603_144919/pages")
for pg in (2, 3, 4):
png = D / f"page_{pg:03d}.png"
regs = json.loads((D / f"page_{pg:03d}.regions.json").read_text())["regions"]
with contextlib.redirect_stdout(io.StringIO()):
regs = se.drop_masthead_regions(regs, "andhra_jyothi", pg, png)
ds = se.find_article_starts_by_dateline(regs, str(png), "andhra_jyothi")
bars = separator_barriers(str(png), regs)
bl = se.cluster_all_article_blocks(regs, dateline_starts=ds, sep_lines=bars)
dl_ids = {s["region_id"] for s in ds}
n_dl = sum(1 for b in bl if any(m in dl_ids for m in b["members"]))
orph = [b for b in bl if b["kind"] == "O"]
print(f"==== PAGE {pg}: {len(bl)} blocks, {n_dl} dateline, {len(orph)} orphan ====")
for b in orph:
print(f" O anchor={b['anchor_id']} bbox={b['bbox']} members={sorted(b['members'])}")

View File

@ -1,86 +0,0 @@
"""TEST (read-only): finalize article boundaries using the RIGHTMOST dead-end (nearest big
vertical wall to the right, else page edge) and the TOPMOST dead-end (masthead bottom, for
top-row articles). Draw both the original block boundary (thin gray) and the dead-end-snapped
boundary (thick colour) on a blank canvas, plus the big vertical walls (red) and the masthead
band. No smart_extractor change, no API. Test on 1-2 pages."""
import os, tempfile, json, io, contextlib, statistics
tempfile.tempdir = os.path.abspath("_tess_tmp"); os.environ["TMPDIR"] = tempfile.tempdir
os.makedirs("_tess_tmp", exist_ok=True)
from pathlib import Path
from PIL import Image, ImageDraw, ImageFont
import smart_extractor as se
from _lines import separator_barriers, detect_separator_lines
BIG_FRAC = 0.45
def big_walls(png):
res = detect_separator_lines(png); W, H = res["size"]
out = []
for L in res["v"]:
y1, y2 = min(L["y1"], L["y2"]), max(L["y1"], L["y2"])
if (y2 - y1) >= BIG_FRAC * H:
out.append({"x": (L["x1"]+L["x2"])//2, "y1": y1, "y2": y2})
return out, (W, H)
def masthead_bottom(png, raw, paper, pg, W, H):
# compute from RAW regions (before masthead removal) so the dropped band's bottom is visible
with contextlib.redirect_stdout(io.StringIO()):
dd = se.dedup_overlapping_regions([dict(r) for r in raw])
kept = se.drop_masthead_regions([dict(r) for r in dd], paper, pg, png)
drop_bottom = max((r["bbox"][3] for r in dd
if r["id"] not in {k["id"] for k in kept}), default=0)
res = detect_separator_lines(png)
wide = sorted([L for L in res["h"] if (L["x2"]-L["x1"]) >= 0.30*W
and L["y1"] < 0.20*H], key=lambda L: L["y1"])
top_rule = wide[0]["y1"] if wide else 0
return max(drop_bottom, top_rule)
def run(pdir, pg, paper, tag):
png = f"{pdir}/page_{pg:03d}.png"
raw = json.loads(Path(f"{pdir}/page_{pg:03d}.regions.json").read_text())["regions"]
with contextlib.redirect_stdout(io.StringIO()):
regs = se.dedup_overlapping_regions(raw); regs = se.merge_stacked_title_lines(regs, png)
regs = se.drop_masthead_regions(regs, paper, pg, png); regs = se.promote_paragraph_titles(regs, png, paper); regs = se.mark_bullet_titles(regs, png)
ds = se.find_article_starts_by_dateline(regs, png, paper)
_p = se.cluster_all_article_blocks(regs, ds, sep_lines=separator_barriers(png, regs))
if se.recover_orphan_text_headlines(_p, regs, png): ds = se.find_article_starts_by_dateline(regs, png, paper)
bars = separator_barriers(png, regs)
blocks = se.cluster_all_article_blocks(regs, ds, sep_lines=bars)
walls, (W, H) = big_walls(png)
cright = max((r["bbox"][2] for r in regs), default=W)
mh = masthead_bottom(png, raw, paper, pg, W, H)
top_row_cut = mh + 320 # an article whose top is within this band is "top row"
def deadends(b):
x1, y1, x2, y2 = b["bbox"]; cx = (x1 + x2) / 2; bh = y2 - y1
# rightmost dead-end: nearest big wall right of the block centre that spans it; else page edge
rcand = [w["x"] for w in walls if w["x"] > cx
and max(0, min(y2, w["y2"]) - max(y1, w["y1"])) >= 0.4 * bh]
right = min(rcand) if rcand else cright
right = max(right, x2) # never shrink
# topmost dead-end: top-row article -> up to masthead bottom
top = mh if (y1 <= top_row_cut and mh > 0) else y1
top = min(top, y1) # never shrink downward
return [x1, top, right, y2]
img = Image.new("RGB", (W, H), "white"); d = ImageDraw.Draw(img)
try: font = ImageFont.truetype("DejaVuSans-Bold.ttf", 30)
except Exception: font = ImageFont.load_default()
if mh > 4:
d.rectangle([0, 0, W, mh], fill=(232,232,232)); d.line([0,mh,W,mh], fill=(140,140,140), width=5)
d.text((14, max(2, mh//2-16)), "MASTHEAD (top dead-end)", fill=(110,110,110), font=font)
for w in walls:
d.line([w["x"], w["y1"], w["x"], w["y2"]], fill=(235,70,70), width=8)
pal = se._ARTICLE_COLORS
for i, b in enumerate(blocks):
ox1, oy1, ox2, oy2 = b["bbox"]; nx1, ny1, nx2, ny2 = deadends(b); c = pal[i % len(pal)]
d.rectangle([ox1, oy1, ox2, oy2], outline=(180,180,180), width=3) # original (gray)
d.rectangle([nx1, ny1, nx2, ny2], outline=c, width=8) # dead-end (color)
lab = f"#{b['anchor_id']} [{b['kind']}]"
d.rectangle([nx1+5, ny1+6, nx1+16+len(lab)*15, ny1+42], fill=c)
d.text((nx1+11, ny1+9), lab, fill="white", font=font)
out = f"{pdir}/page_{pg:03d}_partition_debug.png"; img.save(out)
print(f"{tag} pg{pg}: {len(blocks)} blocks, {len(walls)} walls, masthead_bottom={int(mh)} -> {out}")
run("output/NamastheTelangana_Siddipet_20260602_20260604_214937/pages", 2, "namaste_telangana", "NT")
run("output/AndhraJyothi_Siddipet District_20260602_20260603_144919/pages", 1, "andhra_jyothi", "AJ")

View File

@ -1,26 +0,0 @@
import sys, types; sys.modules.setdefault("fitz", types.ModuleType("fitz"))
import os, tempfile, json
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/Sakshi_Jangaon_District_20260520_20260609_210104")
png = str(RUN/"pages/page_001.png")
regions = json.loads((RUN/"pages/page_001.regions.json").read_text())["regions"]
regions = se.dedup_overlapping_regions(regions)
regions = se.merge_stacked_title_lines(regions, png)
regions = se.drop_masthead_regions(regions, "sakshi", 1, png)
regions = se.promote_paragraph_titles(regions, png, "sakshi")
dls = se.find_article_starts_by_dateline(regions, png, "sakshi")
seps = separator_barriers(png, regions)
blocks = se.cluster_all_article_blocks(regions, dls, sep_lines=seps)
rmap = {r['id']:r for r in regions}
for b in blocks:
if b['anchor_id']==71:
print("BLOCK:", {k:v for k,v in b.items() if k!='members'})
print("members:")
for m in sorted(b['members']+[b['anchor_id']], key=lambda m: rmap[m]['bbox'][1] if m in rmap else 0):
r = rmap.get(m)
print(" ", m, r['type'] if r else '?', r['bbox'] if r else '?')
json.dump({'blocks':[{'anchor':b['anchor_id'],'kind':b['kind'],'bbox':b['bbox'],'members':b['members']} for b in blocks]}, open('/tmp/blocks71.json','w'))

View File

@ -1,29 +0,0 @@
import sys, json
sys.path.insert(0, "/Users/kranthikumar/Documents/telugu_extractor")
from pathlib import Path
import smart_extractor as se
from _lines import separator_barriers
D = Path("output/AndhraJyothi_Siddipet District_20260602_20260603_144919/pages")
for pg in (1, 2, 3, 4):
png = D / f"page_{pg:03d}.png"
regions = json.loads((D / f"page_{pg:03d}.regions.json").read_text())["regions"]
regions = se.drop_masthead_regions(regions, "andhra_jyothi", pg, png)
ds = se.find_article_starts_by_dateline(regions, str(png), "andhra_jyothi")
bars = separator_barriers(str(png), regions)
blocks = se.cluster_all_article_blocks(regions, dateline_starts=ds, sep_lines=bars)
rmap = {r["id"]: r for r in regions}
print(f"\n==== PAGE {pg} ====")
for b in blocks:
anchor = rmap.get(b["anchor_id"])
if not anchor:
continue
atop = anchor["bbox"][1]
# members whose ENTIRE box is above the anchor headline top
above_mems = [m for m in b["members"]
if m != b["anchor_id"] and rmap[m]["bbox"][3] <= atop + 20]
if above_mems and b["kind"] == "H":
print(f" block H anchor={b['anchor_id']} (top y={atop}) has {len(above_mems)} member(s) ABOVE it:")
for m in above_mems:
rb = rmap[m]["bbox"]
print(f" R{m} {rmap[m]['type']:<14} y[{rb[1]}..{rb[3]}] x[{rb[0]}..{rb[2]}]")

View File

@ -1,21 +0,0 @@
import sys, json, contextlib, io
sys.path.insert(0, ".")
from pathlib import Path
import smart_extractor as se
from _lines import separator_barriers, detect_separator_lines
D = Path("output/AndhraJyothi_Siddipet District_20260602_20260603_144919/pages")
png = D / "page_001.png"
regs0 = json.loads((D / "page_001.regions.json").read_text())["regions"]
with contextlib.redirect_stdout(io.StringIO()):
regs = se.drop_masthead_regions(regs0, "andhra_jyothi", 1, png)
res = detect_separator_lines(png)
print(f"=== {len(res['h'])} raw horizontal lines ===")
for L in sorted(res["h"], key=lambda d: d["y1"]):
print(f" H y={L['y1']:>5} x[{L['x1']:>4}..{L['x2']:>4}] len={L['len']:>4} gray={L['gray']}")
print("\n=== separator_barriers (after filters) ===")
bars = separator_barriers(str(png), regs)
for L in sorted(bars, key=lambda d: d["y"]):
print(f" bar y={L['y']:>5} x[{L['x1']:>4}..{L['x2']:>4}] mc={L.get('mc')}")

View File

@ -1,22 +0,0 @@
import sys, json, contextlib, io
sys.path.insert(0, ".")
from pathlib import Path
import smart_extractor as se
from _lines import separator_barriers, detect_separator_lines
D = Path("output/AndhraJyothi_Siddipet District_20260602_20260603_144919/pages")
png = D / "page_001.png"
regs0 = json.loads((D / "page_001.regions.json").read_text())["regions"]
with contextlib.redirect_stdout(io.StringIO()):
regs = se.drop_masthead_regions(regs0, "andhra_jyothi", 1, png)
ds = se.find_article_starts_by_dateline(regs, str(png), "andhra_jyothi")
print(f"=== {len(ds)} dateline starts ===")
for s in sorted(ds, key=lambda s: s["bbox"][1]):
print(f" DL region={s['region_id']:>3} bbox={s['bbox']} headline={s.get('headline_region')}")
byid = {r["id"]: r for r in regs}
print("\n=== all regions sorted by y ===")
for r in sorted(regs, key=lambda r: (r["bbox"][1], r["bbox"][0])):
b = r["bbox"]
print(f" R{r['id']:>3} {r['type']:<16} bbox={b}")

View File

@ -1,38 +0,0 @@
import sys, json, contextlib, io
sys.path.insert(0, ".")
from pathlib import Path
import smart_extractor as se
from _lines import separator_barriers, detect_separator_lines
D = Path("output/AndhraJyothi_Siddipet District_20260602_20260603_144919/pages")
png = D / "page_001.png"
regs0 = json.loads((D / "page_001.regions.json").read_text())["regions"]
with contextlib.redirect_stdout(io.StringIO()):
regs = se.drop_masthead_regions(regs0, "andhra_jyothi", 1, png)
byid = {r["id"]: r for r in regs}
# focus region 35 and 55
for rid in (35, 55):
if rid in byid:
r = byid[rid]
print(f"R{rid} type={r['type']} bbox={r['bbox']}")
else:
print(f"R{rid} NOT in regs (dropped?)")
print("\n-- all regions near x 150..750, y 1100..1600 --")
for r in sorted(regs, key=lambda r: r["bbox"][1]):
b = r["bbox"]
if b[1] < 1700 and b[3] > 1050 and b[0] < 760:
print(f" R{r['id']:>3} {r['type']:<16} bbox={b}")
print("\n-- raw horizontal lines near y=1375 --")
res = detect_separator_lines(png)
for L in sorted(res["h"], key=lambda d: d["y1"]):
if 1300 < L["y1"] < 1450:
print(f" H y={L['y1']} x[{L['x1']}..{L['x2']}] len={L['len']} gray={L['gray']}")
print("\n-- separator_barriers near y=1375 --")
bars = separator_barriers(str(png), regs)
for L in sorted(bars, key=lambda d: d["y"]):
if 1300 < L["y"] < 1450:
print(f" bar y={L['y']} x[{L['x1']}..{L['x2']}] mc={L.get('mc')}")

View File

@ -1,21 +0,0 @@
import sys, json, contextlib, io
sys.path.insert(0, ".")
from pathlib import Path
import smart_extractor as se
from _lines import separator_barriers
D = Path("output/AndhraJyothi_Siddipet District_20260602_20260603_144919/pages")
png = D / "page_001.png"
regs0 = json.loads((D / "page_001.regions.json").read_text())["regions"]
with contextlib.redirect_stdout(io.StringIO()):
regs = se.drop_masthead_regions(regs0, "andhra_jyothi", 1, png)
ds = se.find_article_starts_by_dateline(regs, str(png), "andhra_jyothi")
bars = separator_barriers(str(png), regs)
bl = se.cluster_all_article_blocks(regs, dateline_starts=ds, sep_lines=bars)
print("bars near y=1375:", [b for b in bars if 1300 < b["y"] < 1450])
print()
dl_ids = {s["region_id"] for s in ds}
for b in sorted(bl, key=lambda b: (b["bbox"][1], b["bbox"][0])):
kind = b["kind"]
print(f" {kind} anchor={b['anchor_id']:>3} bbox={b['bbox']} members={sorted(b['members'])}")

View File

@ -1,41 +0,0 @@
import os, tempfile, contextlib, io, json
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
se._ACTIVE_PAPER = "sakshi"
RUN = Path("output/Sakshi_Jangaon_District_20260520_20260609_210104"); D = RUN / "pages"
png = str(D / "page_001.png")
regs = json.loads((D / "page_001.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, "sakshi", 1, png)
regs = se.drop_classifieds_regions(regs, png); regs = se.tag_legal_notices(regs, png)
regs = se.promote_paragraph_titles(regs, png, "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, "sakshi")
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, "sakshi")
blocks = se.cluster_all_article_blocks(regs, ds, sep_lines=bars)
WATCH = [44, 16, 36, 69, 61, 46, 23, 4, 74, 49, 17, 88, 33, 28, 3, 53, 56]
own = {}
for b in blocks:
for m in set(b["members"]) | {b["anchor_id"]}:
own.setdefault(m, []).append(f"{b['kind']}{b['anchor_id']}")
print("region owners:")
for w in WATCH:
print(f" R{w:>3} -> {own.get(w, ['(NONE)'])}")
print("\nhorizontal bars near lift-1 (y3300-4100) and R50 zone (y4350-4900):")
for L in bars:
if not L.get("vert") and "y" in L and (3300 <= L["y"] <= 4100 or 4350 <= L["y"] <= 4900):
print(f" y={L['y']} x={L['x1']}-{L['x2']} w={L['x2']-L['x1']}")
print("\ndateline regions:", sorted(s["region_id"] for s in ds))
print("\npipeline lines mentioning watched regions / passes:")
for l in buf.getvalue().splitlines():
if any(k in l for k in ("R44", "R69", "R61", "R46", "R23", "rebind", "Sakshi", "Orphan photo", "Masthead", "📐")):
print(" ", l.strip())

View File

@ -1,46 +0,0 @@
import os, tempfile, contextlib, io, json
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
se._ACTIVE_PAPER = "sakshi"
RUN = Path("output/Sakshi_Jangaon_District_20260520_20260609_210104"); D = RUN / "pages"
png = str(D / "page_002.png")
regs = json.loads((D / "page_002.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, "sakshi", 2, png)
regs = se.drop_classifieds_regions(regs, png); regs = se.tag_legal_notices(regs, png)
regs = se.promote_paragraph_titles(regs, png, "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, "sakshi")
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, "sakshi")
blocks = se.cluster_all_article_blocks(regs, ds, sep_lines=bars)
rm = {r["id"]: r for r in regs}
print("BLOCKS:")
for b in sorted(blocks, key=lambda b: (b["bbox"][1], b["bbox"][0])):
x1, y1, x2, y2 = b["bbox"]
f = " FURN" if b.get("_furniture") else ""
print(f" {b['kind']}{b['anchor_id']:<4} [{x1},{y1},{x2},{y2}] mem={sorted(set(b['members']))}{f}")
WATCH = [20, 29, 34, 51, 3, 14, 31, 65, 87, 105, 121, 76, 8, 10, 36, 46, 81]
own = {}
for b in blocks:
tag = ("F" if b.get("_furniture") else b["kind"]) + str(b["anchor_id"])
for m in set(b["members"]) | {b["anchor_id"]}:
own.setdefault(m, []).append(tag)
print("\nWATCH owners:", {f"R{w}": own.get(w, "NONE") for w in WATCH})
print("\nbars y2380-2820 / y3400-3700 / y4640-4760:")
for L in bars:
if not L.get("vert") and "y" in L and (2380 <= L["y"] <= 2820 or 3400 <= L["y"] <= 3700 or 4640 <= L["y"] <= 4760):
print(f" y={L['y']} x={L['x1']}-{L['x2']} w={L['x2']-L['x1']}")
print("\ndatelines:", sorted(s["region_id"] for s in ds))
print("\npipeline lines:")
for l in buf.getvalue().splitlines():
if any(k in l for k in ("Type-2", "rule-split", "📐", "Masthead", "", "re-home", "📸", "Orphan photo", "carve", "furniture")):
print(" ", l.strip())

View File

@ -1,9 +0,0 @@
R121 bbox=[2113, 2214, 3502, 3634] kind=H raw=True
R12 text y[1996,2719] x[2979,3480] DATELINE
R39 image y[2214,2622] x[2113,2939]
R111 figure_title y[2628,2725] x[2196,2856]
R121 doc_title y[2799,2898] x[2422,3493]
R59 image y[2902,3115] x[2981,3502]
R21 text y[2907,3621] x[2419,2945] DATELINE
R116 figure_title y[3123,3163] x[3113,3376]
R14 text y[3195,3622] x[2977,3502]

View File

@ -1,20 +0,0 @@
page WxH=4200x6422; 12 blocks
R65 bbox=[113, 1958, 1977, 6279] kind=H raw=True locked=False #members=36
R65 datelines: [43, 47, 26, 21]
vertical walls: [(616, 4683, 6292), (141, 4683, 6292), (123, 4123, 6309), (637, 4122, 6309), (2015, 1949, 5689), (3300, 1929, 6308), (2669, 404, 1905)]
wide H-seps (>0.5W): [(1936, 114, 4091), (5709, 686, 3276)]
all block anchors+bbox:
R109 H bbox=[119, 393, 612, 1899] ndl=1
R79 H bbox=[2693, 405, 4087, 1833] ndl=1
R55 H bbox=[679, 415, 2630, 1919] ndl=1
R77 H bbox=[2692, 1594, 4087, 1903] ndl=1
R14 DL bbox=[2045, 1950, 3265, 3097] ndl=1
R65 H bbox=[113, 1958, 1977, 6279] ndl=4
R96 H bbox=[3326, 1964, 4087, 3638] ndl=1
R64 H bbox=[2046, 3116, 3264, 4832] ndl=2
R97 H bbox=[3322, 3756, 4087, 5831] ndl=1
R110 H bbox=[2044, 4858, 3265, 5685] ndl=1
R59 H bbox=[680, 5731, 3267, 6318] ndl=1
R7 DL bbox=[3308, 5839, 4087, 6305] ndl=1

View File

View File

@ -1,39 +0,0 @@
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
se._ACTIVE_PAPER = "namaste_telangana"
RUN = Path(os.environ.get("NTA_RUN", "output/NamastheTelangana_Adilabad_20260528_20260610_160056"))
D = RUN / "pages"; P = "namaste_telangana"
OUT = RUN / "all_article_crops_review"
if OUT.exists(): shutil.rmtree(OUT)
pages = sorted(int(p.stem.split("_")[1]) for p in D.glob("page_*.png"))
for pg in pages:
png = str(D / f"page_{pg:03d}.png")
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, P, pg, png); regs = se.drop_classifieds_regions(regs, png)
regs = se.tag_legal_notices(regs, png); regs = se.promote_paragraph_titles(regs, png, P)
if pg == 1: regs = se.detect_sakshi_headline_bands(regs, png) # NT: front-page only
regs = se.mark_bullet_titles(regs, png)
ds = se.find_article_starts_by_dateline(regs, png, P)
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, P)
blocks = se.cluster_all_article_blocks(regs, ds, sep_lines=bars)
n = se.crop_all_article_blocks(png, regs, str(OUT), pg, dateline_starts=ds,
sep_lines=bars, overlay=True)
print(f"=== page {pg}: {n} crops, {len(ds)} datelines ===")
for b in sorted(blocks, key=lambda b: (b["bbox"][1], b["bbox"][0])):
x1, y1, x2, y2 = b["bbox"]
f = " FURN" if b.get("_furniture") else ""
print(f" {b['kind']}{b['anchor_id']:<4} [{x1},{y1},{x2},{y2}] {x2-x1}x{y2-y1} mem={len(b['members'])}{f}")
for l in sorted({l.strip() for l in buf.getvalue().splitlines()
if "rule-split" in l or "Masthead" in l or "Orphan photo" in l}):
print(" ", l)
print("DONE ->", OUT)

View File

@ -1,35 +0,0 @@
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)

View File

@ -1,36 +0,0 @@
"""Re-crop EVERY article on all 4 pages using the EXISTING smart_extractor code
(no Claude / no paid API). Runs the FULL pre-processing chain the real pipeline uses
(dedup -> merge stacked titles -> drop masthead -> promote paragraph-titles -> dateline
scan -> separators -> cluster/crop), so the replay crops match real output. Tesseract
temp files are redirected off /tmp so OCR can read them. Output goes to a fresh dir."""
import os, tempfile, json
tempfile.tempdir = os.path.abspath("_tess_tmp") # keep Tesseract off /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")
PAGES = RUN / "pages"
OUT = RUN / "all_article_crops_new" # fresh output dir
PAPER = "andhra_jyothi"
for pg in (1, 2, 3, 4):
png = str(PAGES / f"page_{pg:03d}.png")
regions = json.loads((PAGES / f"page_{pg:03d}.regions.json").read_text())["regions"]
# Full pre-processing chain (matches the real pipeline order):
regions = se.dedup_overlapping_regions(regions)
regions = se.merge_stacked_title_lines(regions, png)
regions = se.drop_masthead_regions(regions, PAPER, pg, png)
regions = se.promote_paragraph_titles(regions, png, PAPER) # paragraph_title -> doc_title
dateline_starts = se.find_article_starts_by_dateline(regions, png, PAPER)
sep_lines = separator_barriers(png, regions)
n = se.crop_all_article_blocks(png, regions, str(OUT), pg,
dateline_starts=dateline_starts, sep_lines=sep_lines)
print(f"page {pg}: {len(dateline_starts)} datelines -> {n} article crop(s) written")
print(f"\nCrops written under: {OUT}")

View File

@ -1,31 +0,0 @@
import sys, json, shutil, os
sys.path.insert(0, "/Users/kranthikumar/Documents/telugu_extractor")
from pathlib import Path
import smart_extractor as se
from _lines import separator_barriers
D = Path("output/AndhraJyothi_Siddipet District_20260602_20260603_144919/pages")
png = D / "page_001.png"
regions = json.loads((D / "page_001.regions.json").read_text())["regions"]
regions2 = se.drop_masthead_regions(regions, "andhra_jyothi", 1, png)
ds = se.find_article_starts_by_dateline(regions2, str(png), "andhra_jyothi")
bars = separator_barriers(str(png), regions2)
blocks = se.cluster_all_article_blocks(regions2, dateline_starts=ds, sep_lines=bars)
dl_ids = {s["region_id"] for s in ds}
dl_anchors = {b["anchor_id"] for b in blocks if any(m in dl_ids for m in b["members"])}
print(f"{len(ds)} datelines -> {len(dl_anchors)} dateline blocks: {sorted(dl_anchors)}")
for b in sorted(blocks, key=lambda d: (d["bbox"][1], d["bbox"][0])):
if b["anchor_id"] in dl_anchors:
print(f" {b['kind']} anchor={b['anchor_id']:>3} bbox={b['bbox']} members={sorted(b['members'])}")
out = Path("output/AndhraJyothi_Siddipet District_20260602_20260603_144919/dateline_crops")
if out.exists():
shutil.rmtree(out)
out.mkdir(parents=True)
n = se.crop_all_article_blocks(str(png), regions2, str(out), 1,
dateline_starts=ds, sep_lines=bars,
only_anchor_ids=dl_anchors)
print(f"\ndateline crops written: {n}")
for f in sorted(os.listdir(out / "page_001")):
print(" ", f)

View File

@ -1,24 +0,0 @@
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_hstrip"; 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"]
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.promote_paragraph_titles(regs,png,PAPER)
bars=separator_barriers(png,regs)
ds=se.find_article_starts_by_dateline(regs,png,PAPER)
blocks=se.cluster_all_article_blocks(regs,ds,sep_lines=bars)
n=se.crop_all_article_blocks(png,regs,str(OUT),pg,dateline_starts=ds,sep_lines=bars)
ext=[l for l in buf.getvalue().splitlines() if "Headline-strip" in l]
print(f"page {pg}: {n} crops | {len(ext)} headline-strip extension(s)")
for l in ext: print(" ",l.strip())
print("DONE")

View File

@ -1,48 +0,0 @@
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
se._ACTIVE_PAPER = "namaste_telangana" # gates paper-specific clustering passes (pipeline sets this too)
RUN=Path(os.environ.get("JG_RUN","output/NamastheTelangana_Jangaon_20260520_20260609_130635")); D=RUN/"pages"
OUT=RUN/"all_article_crops_review"; P="namaste_telangana"
if OUT.exists(): shutil.rmtree(OUT)
for pg in (1,2):
png=str(D/f"page_{pg:03d}.png")
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,P,pg,png); regs=se.drop_classifieds_regions(regs,png); regs=se.tag_legal_notices(regs,png); regs=se.promote_paragraph_titles(regs,png,P)
if pg==1: regs=se.detect_sakshi_headline_bands(regs,png) # NT: front-page display headlines only
regs=se.mark_bullet_titles(regs,png)
ds=se.find_article_starts_by_dateline(regs,png,P)
bars=separator_barriers(png,regs)
_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,P)
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()
rm={r['id']:r for r in regs}; dlids={s['region_id'] for s in ds}
print(f"\n=== page {pg}: {n} crops, {len(ds)} datelines ===")
for b in sorted(blocks,key=lambda b:(b['bbox'][1],b['bbox'][0])):
x1,y1,x2,y2=b['bbox']; w,h=x2-x1,y2-y1
ndl=sum(1 for m in b['members'] if m in dlids)
types={}
for m in b['members']:
t=rm.get(m,{}).get('type','?'); types[t]=types.get(t,0)+1
ntext=types.get('text',0); nimg=types.get('image',0)
flags=[]
if ndl>=2: flags.append(f"{ndl}DL(roundup?)")
if ntext==0 and nimg>0: flags.append("IMG-ONLY(no text)")
if len(b['members'])==1: flags.append("SINGLE-region")
if b['kind']=='O': flags.append("ORPHAN")
print(f" R{b['anchor_id']:>3} {b['kind']} {'RAW' if b.get('_raw_rect') else ' '} "
f"bbox=[{x1},{y1},{x2},{y2}] {w}x{h} mem={len(b['members'])} {types} "
f"{' '.join(flags)}")
for key in ("Section banner","Containment-merge","Headline-merge","Banner rectangle"):
c=[l.strip() for l in log.splitlines() if key in l]
if c: print(f" [{key}] x{len(c)//2 if key in ('Headline-merge','Containment-merge','Section banner','Banner rectangle') else len(c)}")
print("\nDONE ->",OUT)

View File

@ -1,34 +0,0 @@
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
se._ACTIVE_PAPER = "namaste_telangana" # gates paper-specific clustering passes (pipeline sets this too)
RUN=Path("output/NamastheTelangana_Siddipet_20260602_20260604_214937"); D=RUN/"pages"
OUT=RUN/"all_article_crops_final"; P="namaste_telangana"
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"]
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,P,pg,png); regs=se.drop_classifieds_regions(regs,png); regs=se.tag_legal_notices(regs,png); regs=se.promote_paragraph_titles(regs,png,P)
if pg==1: regs=se.detect_sakshi_headline_bands(regs,png) # NT: front-page display headlines only
regs=se.mark_bullet_titles(regs,png)
ds=se.find_article_starts_by_dateline(regs,png,P)
bars=separator_barriers(png,regs)
_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,P)
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
["Caption bound","Caption orphan dropped","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()}
over=[b['anchor_id'] for b in blocks if len([m for m in b['members'] if m in {s['region_id'] for s in ds}])>=2]
print(f"page {pg}: {n} crops, {len(ds)} datelines, 2+dl-blocks={over or 'none'} | "+", ".join(f"{k}:{v}" for k,v in tags.items() if v))
print("DONE ->",OUT)

View File

@ -1,47 +0,0 @@
import sys, json
sys.path.insert(0, "/Users/kranthikumar/Documents/telugu_extractor")
from pathlib import Path
import smart_extractor as se
from _lines import separator_barriers
D = Path("output/AndhraJyothi_Siddipet District_20260602_20260603_144919/pages")
png = D / "page_001.png"
regions = json.loads((D / "page_001.regions.json").read_text())["regions"]
print(f"raw regions: {len(regions)}")
# 1) masthead drop
regions2 = se.drop_masthead_regions(regions, "andhra_jyothi", 1, png)
dropped = {r['id'] for r in regions} - {r['id'] for r in regions2}
print(f"masthead dropped ids: {sorted(dropped)} -> {len(regions2)} regions")
# 2) dateline starts
ds = se.find_article_starts_by_dateline(regions2, str(png), "andhra_jyothi")
print(f"dateline starts: {len(ds)}")
for s in ds:
print(f" DL region_id={s['region_id']} headline_id={s.get('headline_id')} bbox={s['bbox']}")
# 3) separator barriers
bars = separator_barriers(str(png), regions2)
print(f"separator barriers: {len(bars)}")
# 4) cluster
blocks = se.cluster_all_article_blocks(regions2, dateline_starts=ds, sep_lines=bars)
print(f"\nblocks: {len(blocks)}")
dl_ids = {s['region_id'] for s in ds}
for b in sorted(blocks, key=lambda d: (d['bbox'][1], d['bbox'][0])):
mem = b['members']
has_dl = any(m in dl_ids for m in mem)
print(f" block anchor={b['anchor_id']} kind={b['kind']} dl={has_dl} bbox={b['bbox']} members={sorted(mem)}")
# 5) render crops to /tmp for visual check
import shutil
out = Path("output/AndhraJyothi_Siddipet District_20260602_20260603_144919/all_article_crops_test")
if out.exists():
shutil.rmtree(out)
out.mkdir(parents=True)
n = se.crop_all_article_blocks(str(png), regions2, str(out), 1,
dateline_starts=ds, sep_lines=bars)
print(f"\ncrops written: {n} -> {out}/page_001")
import os
for f in sorted(os.listdir(out / "page_001")):
print(" ", f)

View File

@ -1,33 +0,0 @@
import sys, json
sys.path.insert(0, "/Users/kranthikumar/Documents/telugu_extractor")
from pathlib import Path
import smart_extractor as se
from _lines import separator_barriers
D = Path("output/AndhraJyothi_Siddipet District_20260602_20260603_144919/pages")
for pg in (2, 3):
png = D / f"page_{pg:03d}.png"
regions = json.loads((D / f"page_{pg:03d}.regions.json").read_text())["regions"]
regions = se.drop_masthead_regions(regions, "andhra_jyothi", pg, png)
ds = se.find_article_starts_by_dateline(regions, str(png), "andhra_jyothi")
bars = separator_barriers(str(png), regions)
blocks = se.cluster_all_article_blocks(regions, dateline_starts=ds, sep_lines=bars)
dl_ids = {s['region_id'] for s in ds}
print(f"\n==== PAGE {pg} datelines={len(ds)} bars={len(bars)} blocks={len(blocks)} ====")
# each dateline must sit in a block that ALSO has a headline/title anchor
for s in ds:
rid = s['region_id']
owner = None
for b in blocks:
if rid in b['members'] or rid == b['anchor_id']:
owner = b; break
kind = owner['kind'] if owner else '??'
ndl = sum(1 for m in owner['members'] if m in dl_ids) if owner else 0
flag = ''
if owner is None:
flag = 'LOST'
elif kind == 'DL':
flag = 'headless(DL)'
elif ndl > 1:
flag = f'MERGED({ndl} datelines)'
print(f" DL R{rid} -> block anchor={owner['anchor_id'] if owner else None} kind={kind} {flag}")

View File

@ -1,53 +0,0 @@
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")

View File

@ -1,25 +0,0 @@
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_rescue"; 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.promote_paragraph_titles(regs,png,PAPER)
bars=separator_barriers(png,regs)
regs=se.rescue_headlines_above_photos(regs,png,PAPER,bars) # NEW
ds=se.find_article_starts_by_dateline(regs,png,PAPER)
blocks=se.cluster_all_article_blocks(regs,ds,sep_lines=bars)
n=se.crop_all_article_blocks(png,regs,str(OUT),pg,dateline_starts=ds,sep_lines=bars)
resc=[l for l in buf.getvalue().splitlines() if "HEADLINE RESCUE" in l]
print(f"page {pg}: {n} crops | {len(resc)} headline(s) rescued")
for l in resc: print(" ",l.strip())
print("DONE")

View File

@ -1,47 +0,0 @@
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
se._ACTIVE_PAPER = "sakshi" # gate Sakshi-specific clustering passes
RUN=Path(os.environ.get("SAK_RUN","output/Sakshi_Jangaon_District_20260520_20260609_210104")); D=RUN/"pages"
OUT=RUN/"all_article_crops_review"; P="sakshi"
if OUT.exists(): shutil.rmtree(OUT)
for pg in (1,2):
png=str(D/f"page_{pg:03d}.png")
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,P,pg,png); regs=se.drop_classifieds_regions(regs,png); regs=se.tag_legal_notices(regs,png); regs=se.promote_paragraph_titles(regs,png,P)
regs=se.detect_sakshi_headline_bands(regs,png)
regs=se.mark_bullet_titles(regs,png)
ds=se.find_article_starts_by_dateline(regs,png,P)
bars=separator_barriers(png,regs)
_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,P)
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,overlay=True)
log=buf.getvalue()
rm={r['id']:r for r in regs}; dlids={s['region_id'] for s in ds}
print(f"\n=== page {pg}: {n} crops, {len(ds)} datelines ===")
img_orphans=[]
for b in sorted(blocks,key=lambda b:(b['bbox'][1],b['bbox'][0])):
x1,y1,x2,y2=b['bbox']; w,h=x2-x1,y2-y1
types={}
for m in b['members']:
t=rm.get(m,{}).get('type','?'); types[t]=types.get(t,0)+1
ntext=types.get('text',0); nimg=types.get('image',0)
is_art=any(rm.get(m,{}).get('type') in ('doc_title','paragraph_title') for m in b['members']) or any(m in dlids for m in b['members'])
flags=[]
if nimg>0 and not is_art: flags.append("IMG-ORPHAN?")
if b['kind']=='O': flags.append("ORPHAN")
if nimg>0 and not is_art and ntext==0: img_orphans.append(b['anchor_id'])
print(f" R{b['anchor_id']:>3} {b['kind']} bbox=[{x1},{y1},{x2},{y2}] {w}x{h} mem={len(b['members'])} {types} {' '.join(flags)}")
binds=sorted({l.strip() for l in log.splitlines()
if "Orphan photo" in l or "Masthead" in l or "📐" in l or "rule-split" in l})
print(f" >>> image-only orphans REMAINING: {img_orphans}")
for l in binds: print(f" {l}")
print("\nDONE ->",OUT)

View File

@ -1,24 +0,0 @@
import os,tempfile,contextlib,io
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_t045"; PAPER="andhra_jyothi"
import shutil
if OUT.exists(): shutil.rmtree(OUT)
for pg in (1,2,3,4):
png=str(D/f"page_{pg:03d}.png")
with contextlib.redirect_stdout(io.StringIO()):
regs=se.detect_regions(png, threshold=0.45) # NEW cutoff
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.promote_paragraph_titles(regs,png,PAPER)
ds=se.find_article_starts_by_dateline(regs,png,PAPER)
bars=separator_barriers(png,regs)
n=se.crop_all_article_blocks(png,regs,str(OUT),pg,dateline_starts=ds,sep_lines=bars)
nreg=len(regs)
print(f"page {pg}: {nreg} regions, {len(ds)} datelines, {n} crops")
print("DONE ->",OUT)

View File

@ -1,78 +0,0 @@
=== page 1: 22 crops, 17 datelines ===
R 55 H bbox=[2796,291,4114,2002] 1318x1711 mem=8 {'image': 2, 'text': 5, 'doc_title': 1}
R 94 P bbox=[2113,299,2785,3703] 672x3404 mem=5 {'paragraph_title': 1, 'text': 4}
R 52 H bbox=[1080,371,2766,2350] 1686x1979 mem=6 {'doc_title': 1, 'image': 3, 'paragraph_title': 1, 'text': 1}
R 71 DL bbox=[769,913,1375,1781] 606x868 mem=3 {'text': 2, 'paragraph_title': 1}
R 83 H bbox=[92,1079,686,2507] 594x1428 mem=4 {'doc_title': 1, 'text': 1, 'image': 1, 'paragraph_title': 1}
R 11 DL bbox=[694,1789,1440,2678] 746x889 mem=1 {'text': 1}
R 77 H bbox=[2793,1973,4114,3303] 1321x1330 mem=10 {'text': 6, 'image': 1, 'figure_title': 1, 'doc_title': 1, 'paragraph_title': 1}
R 72 H bbox=[92,2536,685,3404] 593x868 mem=2 {'doc_title': 1, 'text': 1}
R 66 P bbox=[694,2686,1391,3745] 697x1059 mem=4 {'paragraph_title': 1, 'text': 3}
R 51 P bbox=[1399,2686,2105,3458] 706x772 mem=3 {'paragraph_title': 1, 'text': 2}
R 67 H bbox=[92,3432,686,4743] 594x1311 mem=3 {'doc_title': 1, 'text': 1, 'image': 1}
R 78 H bbox=[749,3466,2070,6049] 1321x2583 mem=11 {'text': 8, 'image': 1, 'figure_title': 1, 'doc_title': 1}
R 54 H bbox=[2793,3509,4114,6094] 1321x2585 mem=13 {'doc_title': 1, 'text': 9, 'image': 2, 'paragraph_title': 1}
R 4 DL bbox=[2113,3707,2752,4876] 639x1169 mem=2 {'text': 1, 'image': 1}
R 3 DL bbox=[750,3753,1388,4588] 638x835 mem=1 {'text': 1}
R 50 H bbox=[2112,4357,2752,5581] 640x1224 mem=4 {'doc_title': 1, 'text': 3}
R 9 DL bbox=[92,4771,685,5982] 593x1211 mem=2 {'text': 1, 'paragraph_title': 1}
R 5 DL bbox=[2112,5609,2753,6686] 641x1077 mem=2 {'text': 1, 'paragraph_title': 1}
R 75 H bbox=[91,6012,688,6640] 597x628 mem=2 {'doc_title': 1, 'text': 1}
R 79 P bbox=[772,6082,1391,6637] 619x555 mem=2 {'paragraph_title': 1, 'text': 1}
R 18 O bbox=[1430,6086,2049,6635] 619x549 mem=1 {'text': 1} ORPHAN
R 98 H bbox=[2793,6114,4114,6696] 1321x582 mem=3 {'doc_title': 1, 'text': 2}
>>> image-only orphans REMAINING: []
🖼 Orphan photo: R28 → article R78 (an image must belong to an article)
🖼 Orphan photo: R28 → article R78 (an image must belong to an article)
🖼 Orphan photo: R28 → article R78 (an image must belong to an article)
🖼 Orphan photo: R28 → article R78 (an image must belong to an article)
=== page 2: 20 crops, 11 datelines ===
R 61 O bbox=[777,474,1506,2308] 729x1834 mem=8 {'image': 3, 'text': 3, 'figure_title': 2} IMG-ORPHAN? ORPHAN
R 82 H bbox=[695,478,2747,2308] 2052x1830 mem=10 {'text': 3, 'image': 4, 'figure_title': 2, 'doc_title': 1}
R 55 O bbox=[2549,479,2801,1028] 252x549 mem=2 {'image': 1, 'text': 1} IMG-ORPHAN? ORPHAN
R129 P bbox=[80,482,769,1053] 689x571 mem=2 {'paragraph_title': 1, 'text': 1}
R 72 H bbox=[2755,482,3519,2232] 764x1750 mem=8 {'image': 3, 'text': 3, 'doc_title': 1, 'figure_title': 1}
R127 H bbox=[3353,482,4115,2215] 762x1733 mem=9 {'text': 4, 'image': 3, 'figure_title': 1, 'doc_title': 1}
R 24 O bbox=[80,1061,687,2305] 607x1244 mem=4 {'image': 1, 'figure_title': 1, 'text': 2} IMG-ORPHAN? ORPHAN
R118 H bbox=[2795,2298,4115,2954] 1320x656 mem=4 {'doc_title': 1, 'text': 1, 'image': 2}
R 91 H bbox=[72,2313,707,3101] 635x788 mem=3 {'doc_title': 1, 'text': 2}
R 41 H bbox=[753,2316,2753,3600] 2000x1284 mem=11 {'text': 9, 'doc_title': 1, 'image': 1}
R113 H bbox=[72,2417,709,4641] 637x2224 mem=7 {'doc_title': 1, 'text': 3, 'image': 2, 'figure_title': 1}
R 14 DL bbox=[3475,2685,4115,3999] 640x1314 mem=5 {'text': 3, 'image': 1, 'paragraph_title': 1}
R 3 DL bbox=[2761,2958,3467,4049] 706x1091 mem=3 {'text': 1, 'image': 1, 'figure_title': 1}
R 99 H bbox=[752,3656,2071,4649] 1319x993 mem=5 {'image': 1, 'text': 3, 'doc_title': 1}
R 4 F bbox=[2002,3658,2752,5938] 750x2280 mem=8 {'text': 4, 'image': 1, 'paragraph_title': 3}
R 70 H bbox=[2760,4057,4115,5702] 1355x1645 mem=11 {'doc_title': 1, 'text': 9, 'image': 1}
R 93 H bbox=[1216,4710,1963,5939] 747x1229 mem=6 {'text': 3, 'image': 1, 'doc_title': 1, 'figure_title': 1}
R136 P bbox=[95,4735,1161,5529] 1066x794 mem=3 {'paragraph_title': 1, 'text': 1, 'image': 1}
R 44 F bbox=[650,4979,1128,6617] 478x1638 mem=6 {'text': 5, 'paragraph_title': 1}
R111 P bbox=[120,5618,603,6628] 483x1010 mem=3 {'paragraph_title': 1, 'text': 2}
R 98 H bbox=[2798,5710,4115,6696] 1317x986 mem=6 {'doc_title': 1, 'text': 4, 'image': 1}
R 77 H bbox=[1217,5969,2752,6682] 1535x713 mem=4 {'text': 3, 'doc_title': 1}
>>> image-only orphans REMAINING: []
🖼 Orphan photo: R42 → article R82 (an image must belong to an article)
🖼 Orphan photo: R52 → article R127 (an image must belong to an article)
🖼 Orphan photo: R63 → article R82 (an image must belong to an article)
🖼 Orphan photo: R60 → article R82 (an image must belong to an article)
🖼 Orphan photo: R38 → article R72 (an image must belong to an article)
🖼 Orphan photo: R48 → article R127 (an image must belong to an article)
🖼 Orphan photo: R42 → article R82 (an image must belong to an article)
🖼 Orphan photo: R52 → article R127 (an image must belong to an article)
🖼 Orphan photo: R63 → article R82 (an image must belong to an article)
🖼 Orphan photo: R60 → article R82 (an image must belong to an article)
🖼 Orphan photo: R38 → article R72 (an image must belong to an article)
🖼 Orphan photo: R48 → article R127 (an image must belong to an article)
🖼 Orphan photo: R42 → article R82 (an image must belong to an article)
🖼 Orphan photo: R52 → article R127 (an image must belong to an article)
🖼 Orphan photo: R63 → article R82 (an image must belong to an article)
🖼 Orphan photo: R60 → article R82 (an image must belong to an article)
🖼 Orphan photo: R38 → article R72 (an image must belong to an article)
🖼 Orphan photo: R48 → article R127 (an image must belong to an article)
🖼 Orphan photo: R42 → article R82 (an image must belong to an article)
🖼 Orphan photo: R52 → article R127 (an image must belong to an article)
🖼 Orphan photo: R63 → article R82 (an image must belong to an article)
🖼 Orphan photo: R60 → article R82 (an image must belong to an article)
DONE -> output/Sakshi_Jangaon_District_20260520_20260609_210104/all_article_crops_review

View File

@ -1,63 +0,0 @@
=== page 1: 19 crops, 16 datelines ===
R 55 H bbox=[2796,1049,4114,2002] 1318x953 mem=6 {'doc_title': 1, 'text': 4, 'image': 1}
R 52 H bbox=[664,1067,2749,2657] 2085x1590 mem=8 {'doc_title': 1, 'text': 3, 'image': 2, 'paragraph_title': 2}
R 83 H bbox=[92,1079,686,2507] 594x1428 mem=4 {'doc_title': 1, 'text': 1, 'image': 1, 'paragraph_title': 1}
R 94 P bbox=[2113,1941,2755,3257] 642x1316 mem=4 {'paragraph_title': 1, 'text': 3}
R 77 H bbox=[2793,1973,4114,3315] 1321x1342 mem=8 {'text': 6, 'doc_title': 1, 'paragraph_title': 1}
R 72 H bbox=[92,2536,685,3404] 593x868 mem=2 {'doc_title': 1, 'text': 1}
R 66 P bbox=[693,2665,1391,3349] 698x684 mem=2 {'paragraph_title': 1, 'text': 1}
R 51 P bbox=[1399,2665,2105,3349] 706x684 mem=3 {'paragraph_title': 1, 'text': 2}
R100 H bbox=[2113,2860,4114,4876] 2001x2016 mem=10 {'doc_title': 1, 'text': 5, 'image': 3, 'figure_title': 1}
R 99 H bbox=[750,3357,2068,4588] 1318x1231 mem=5 {'doc_title': 1, 'text': 3, 'image': 1}
R 67 H bbox=[92,3432,686,4743] 594x1311 mem=3 {'doc_title': 1, 'text': 1, 'image': 1}
R 78 H bbox=[749,3891,2070,6049] 1321x2158 mem=10 {'doc_title': 1, 'text': 8, 'figure_title': 1}
R 50 H bbox=[2112,4357,2752,5581] 640x1224 mem=4 {'doc_title': 1, 'text': 3}
R 54 H bbox=[2793,4368,4114,6094] 1321x1726 mem=9 {'doc_title': 1, 'text': 6, 'image': 1, 'paragraph_title': 1}
R 9 DL bbox=[92,4771,685,5982] 593x1211 mem=2 {'text': 1, 'paragraph_title': 1}
R 5 DL bbox=[2112,5609,2753,6686] 641x1077 mem=2 {'text': 1, 'paragraph_title': 1}
R 75 H bbox=[91,6012,688,6640] 597x628 mem=2 {'doc_title': 1, 'text': 1}
R 79 P bbox=[772,6082,2049,6637] 1277x555 mem=3 {'text': 2, 'paragraph_title': 1}
R 98 H bbox=[2793,6114,4114,6696] 1321x582 mem=3 {'doc_title': 1, 'text': 2}
>>> image-only orphans REMAINING: []
📐 Sakshi headline SYNTH: R100 doc_title [2126, 3353, 4097, 3452] (un-boxed display headline band, ink=0.35)
📐 Sakshi headline SYNTH: R99 doc_title [763, 3357, 2068, 3452] (un-boxed display headline band, ink=0.30)
📐 Sakshi headline WIDEN: R52 [1182, 1067, 2738, 1327] → [664, 1067, 2738, 1327] (un-boxed kicker ink alongside)
🗞️ Masthead: dropped 5 Sakshi top-band region(s) [59, 62, 63, 64, 71] (above first headline y=1049)
=== page 2: 21 crops, 11 datelines ===
R 61 O bbox=[777,474,1506,2308] 729x1834 mem=8 {'image': 3, 'text': 3, 'figure_title': 2} IMG-ORPHAN? ORPHAN
R 82 H bbox=[695,478,2747,2308] 2052x1830 mem=10 {'text': 3, 'image': 4, 'figure_title': 2, 'doc_title': 1}
R 55 O bbox=[2549,479,2801,1028] 252x549 mem=2 {'image': 1, 'text': 1} IMG-ORPHAN? ORPHAN
R129 P bbox=[80,482,769,1053] 689x571 mem=2 {'paragraph_title': 1, 'text': 1}
R 72 H bbox=[2755,482,3519,2232] 764x1750 mem=8 {'image': 3, 'text': 3, 'doc_title': 1, 'figure_title': 1}
R127 H bbox=[3353,482,4115,2215] 762x1733 mem=9 {'text': 4, 'image': 3, 'figure_title': 1, 'doc_title': 1}
R 24 O bbox=[80,1061,687,2305] 607x1244 mem=4 {'image': 1, 'figure_title': 1, 'text': 2} IMG-ORPHAN? ORPHAN
R118 H bbox=[2795,2298,4115,2954] 1320x656 mem=4 {'doc_title': 1, 'text': 1, 'image': 2}
R 91 H bbox=[72,2313,707,3101] 635x788 mem=3 {'doc_title': 1, 'text': 2}
R 41 H bbox=[753,2316,2753,3600] 2000x1284 mem=11 {'text': 9, 'doc_title': 1, 'image': 1}
R113 H bbox=[72,2417,709,4641] 637x2224 mem=7 {'doc_title': 1, 'text': 3, 'image': 2, 'figure_title': 1}
R 14 DL bbox=[3475,2685,4115,3999] 640x1314 mem=5 {'text': 3, 'image': 1, 'paragraph_title': 1}
R 3 DL bbox=[2761,2958,3467,4049] 706x1091 mem=3 {'text': 1, 'image': 1, 'figure_title': 1}
R 99 H bbox=[650,3656,2071,6145] 1421x2489 mem=10 {'image': 1, 'text': 7, 'doc_title': 1, 'paragraph_title': 1}
R 10 F bbox=[2113,3658,2752,4643] 639x985 mem=4 {'text': 2, 'image': 1, 'paragraph_title': 1}
R 70 H bbox=[2760,4057,4115,5702] 1355x1645 mem=11 {'doc_title': 1, 'text': 9, 'image': 1}
R 93 H bbox=[1216,4710,1963,5939] 747x1229 mem=6 {'text': 3, 'image': 1, 'doc_title': 1, 'figure_title': 1}
R 4 F bbox=[2002,4723,2752,5938] 750x1215 mem=4 {'text': 2, 'paragraph_title': 2}
R136 P bbox=[95,4735,1161,5529] 1066x794 mem=3 {'paragraph_title': 1, 'text': 1, 'image': 1}
R111 P bbox=[120,5618,603,6628] 483x1010 mem=3 {'paragraph_title': 1, 'text': 2}
R 98 H bbox=[2798,5710,4115,6696] 1317x986 mem=6 {'doc_title': 1, 'text': 4, 'image': 1}
R 77 H bbox=[1104,5969,2752,6682] 1648x713 mem=4 {'text': 3, 'doc_title': 1}
R139 H bbox=[614,6155,1168,6617] 554x462 mem=2 {'doc_title': 1, 'text': 1}
>>> image-only orphans REMAINING: []
📐 Sakshi headline SYNTH: R139 doc_title [614, 6155, 1168, 6236] (un-boxed display headline band, ink=0.51)
📐 Sakshi headline WIDEN: R77 [1217, 5969, 2690, 6109] → [1104, 5969, 2690, 6109] (un-boxed kicker ink alongside)
🖼 Orphan photo: R38 → article R72 (an image must belong to an article)
🖼 Orphan photo: R42 → article R82 (an image must belong to an article)
🖼 Orphan photo: R48 → article R127 (an image must belong to an article)
🖼 Orphan photo: R52 → article R127 (an image must belong to an article)
🖼 Orphan photo: R60 → article R82 (an image must belong to an article)
🖼 Orphan photo: R63 → article R82 (an image must belong to an article)
🗞️ Masthead: dropped 4 Sakshi top-band region(s) [68, 71, 84, 104] (above first headline y=499)
DONE -> output/Sakshi_Jangaon_District_20260520_20260609_210104/all_article_crops_review

View File

@ -1,54 +0,0 @@
=== page 1: 16 crops, 16 datelines ===
R 55 H bbox=[2763,1049,4114,2732] 1351x1683 mem=12 {'doc_title': 1, 'text': 9, 'image': 1, 'paragraph_title': 1}
R 52 H bbox=[664,1067,2755,3314] 2091x2247 mem=17 {'doc_title': 1, 'text': 9, 'image': 2, 'paragraph_title': 5}
R 83 H bbox=[92,1079,686,2507] 594x1428 mem=4 {'doc_title': 1, 'text': 1, 'image': 1, 'paragraph_title': 1}
R 72 H bbox=[92,2536,685,3404] 593x868 mem=2 {'doc_title': 1, 'text': 1}
R 77 H bbox=[2793,2740,4114,3303] 1321x563 mem=4 {'doc_title': 1, 'text': 1, 'image': 1, 'figure_title': 1}
R100 H bbox=[2113,3353,4113,4297] 2000x944 mem=7 {'doc_title': 1, 'text': 5, 'image': 1}
R 99 H bbox=[750,3357,2069,4605] 1319x1248 mem=8 {'doc_title': 1, 'text': 5, 'image': 1, 'figure_title': 1}
R 67 H bbox=[92,3432,686,4743] 594x1311 mem=3 {'doc_title': 1, 'text': 1, 'image': 1}
R 50 H bbox=[2112,4357,2752,5581] 640x1224 mem=5 {'text': 3, 'image': 1, 'doc_title': 1}
R 54 H bbox=[2793,4368,4114,6094] 1321x1726 mem=9 {'doc_title': 1, 'text': 6, 'image': 1, 'paragraph_title': 1}
R 78 H bbox=[749,4622,2070,6049] 1321x1427 mem=7 {'doc_title': 1, 'text': 6}
R 9 DL bbox=[92,4771,685,5982] 593x1211 mem=2 {'text': 1, 'paragraph_title': 1}
R 5 DL bbox=[2112,5609,2753,6686] 641x1077 mem=2 {'text': 1, 'paragraph_title': 1}
R 75 H bbox=[91,6012,688,6640] 597x628 mem=2 {'doc_title': 1, 'text': 1}
R 79 P bbox=[772,6082,2049,6637] 1277x555 mem=3 {'text': 2, 'paragraph_title': 1}
R 98 H bbox=[2793,6114,4114,6696] 1321x582 mem=3 {'doc_title': 1, 'text': 2}
>>> image-only orphans REMAINING: []
📐 Sakshi headline SYNTH: R100 doc_title [2126, 3353, 4097, 3452] (un-boxed display headline band, ink=0.35)
📐 Sakshi headline SYNTH: R99 doc_title [763, 3357, 2068, 3452] (un-boxed display headline band, ink=0.30)
📐 Sakshi headline WIDEN: R52 [1182, 1067, 2738, 1327] → [664, 1067, 2738, 1327] (un-boxed kicker ink alongside)
🗞️ Masthead: dropped 5 Sakshi top-band region(s) [59, 62, 63, 64, 71] (above first headline y=1049)
=== page 2: 17 crops, 11 datelines ===
R 82 H bbox=[777,474,2801,2212] 2024x1738 mem=20 {'text': 7, 'image': 8, 'figure_title': 4, 'doc_title': 1}
R127 H bbox=[2755,485,4086,2232] 1331x1747 mem=17 {'text': 8, 'image': 6, 'figure_title': 2, 'doc_title': 1}
R129 P bbox=[95,499,741,2736] 646x2237 mem=8 {'paragraph_title': 1, 'image': 2, 'text': 3, 'figure_title': 2}
R118 H bbox=[2795,2298,4115,2954] 1320x656 mem=4 {'text': 1, 'image': 2, 'doc_title': 1}
R 91 H bbox=[72,2313,707,3101] 635x788 mem=3 {'doc_title': 1, 'text': 2}
R 41 H bbox=[753,2316,2753,3600] 2000x1284 mem=11 {'text': 9, 'doc_title': 1, 'image': 1}
R 14 DL bbox=[3475,2685,4115,3999] 640x1314 mem=5 {'text': 3, 'image': 1, 'paragraph_title': 1}
R 3 DL bbox=[2761,2958,3467,4049] 706x1091 mem=3 {'text': 1, 'image': 1, 'figure_title': 1}
R113 H bbox=[72,3129,709,4641] 637x1512 mem=5 {'doc_title': 1, 'text': 3, 'image': 1}
R 99 H bbox=[650,3656,2071,6145] 1421x2489 mem=10 {'image': 1, 'text': 7, 'doc_title': 1, 'paragraph_title': 1}
R 10 F bbox=[2113,3658,2752,4643] 639x985 mem=4 {'text': 2, 'image': 1, 'paragraph_title': 1}
R 70 H bbox=[2760,4057,4115,5702] 1355x1645 mem=11 {'doc_title': 1, 'text': 9, 'image': 1}
R 93 H bbox=[1216,4710,1963,5939] 747x1229 mem=6 {'text': 3, 'image': 1, 'doc_title': 1, 'figure_title': 1}
R 4 F bbox=[2002,4723,2752,5938] 750x1215 mem=4 {'text': 2, 'paragraph_title': 2}
R136 P bbox=[95,4735,1161,5529] 1066x794 mem=3 {'paragraph_title': 1, 'text': 1, 'image': 1}
R111 P bbox=[120,5618,603,6628] 483x1010 mem=3 {'paragraph_title': 1, 'text': 2}
R 98 H bbox=[2798,5710,4115,6696] 1317x986 mem=6 {'doc_title': 1, 'text': 4, 'image': 1}
R 77 H bbox=[1104,5969,2752,6682] 1648x713 mem=4 {'text': 3, 'doc_title': 1}
R139 H bbox=[614,6155,1168,6617] 554x462 mem=2 {'doc_title': 1, 'text': 1}
>>> image-only orphans REMAINING: []
─ Sakshi rule-split: R41 → 3 bands at rules [1066, 2252]
─ Sakshi rule-split: R74 → 2 bands at rules [1066]
📐 Sakshi headline SYNTH: R139 doc_title [614, 6155, 1168, 6236] (un-boxed display headline band, ink=0.51)
📐 Sakshi headline WIDEN: R77 [1217, 5969, 2690, 6109] → [1104, 5969, 2690, 6109] (un-boxed kicker ink alongside)
🖼 Orphan photo: R38 → article R127 (an image must belong to an article)
🖼 Orphan photo: R61 → article R82 (an image must belong to an article)
🗞️ Masthead: dropped 4 Sakshi top-band region(s) [68, 71, 84, 104] (above first headline y=499)
DONE -> output/Sakshi_Jangaon_District_20260520_20260609_210104/all_article_crops_review

View File

@ -1,54 +0,0 @@
=== page 1: 16 crops, 16 datelines ===
R 55 H bbox=[2763,1049,4114,2732] 1351x1683 mem=12 {'doc_title': 1, 'text': 9, 'image': 1, 'paragraph_title': 1}
R 52 H bbox=[688,1067,2755,3314] 2067x2247 mem=17 {'doc_title': 1, 'text': 9, 'image': 2, 'paragraph_title': 5}
R 83 H bbox=[92,1079,686,2507] 594x1428 mem=4 {'doc_title': 1, 'text': 1, 'image': 1, 'paragraph_title': 1}
R 72 H bbox=[92,2536,685,3404] 593x868 mem=2 {'doc_title': 1, 'text': 1}
R 77 H bbox=[2793,2740,4114,3303] 1321x563 mem=4 {'doc_title': 1, 'text': 1, 'image': 1, 'figure_title': 1}
R100 H bbox=[2113,3353,4113,4297] 2000x944 mem=7 {'doc_title': 1, 'text': 5, 'image': 1}
R 99 H bbox=[750,3357,2069,4605] 1319x1248 mem=8 {'doc_title': 1, 'text': 5, 'image': 1, 'figure_title': 1}
R 67 H bbox=[92,3432,686,4743] 594x1311 mem=3 {'doc_title': 1, 'text': 1, 'image': 1}
R 50 H bbox=[2112,4357,2752,5581] 640x1224 mem=5 {'text': 3, 'image': 1, 'doc_title': 1}
R 54 H bbox=[2793,4368,4114,6094] 1321x1726 mem=9 {'doc_title': 1, 'text': 6, 'image': 1, 'paragraph_title': 1}
R 78 H bbox=[749,4622,2070,6049] 1321x1427 mem=7 {'doc_title': 1, 'text': 6}
R 9 DL bbox=[92,4771,685,5982] 593x1211 mem=2 {'text': 1, 'paragraph_title': 1}
R 5 DL bbox=[2112,5609,2753,6686] 641x1077 mem=2 {'text': 1, 'paragraph_title': 1}
R 75 H bbox=[91,6012,688,6640] 597x628 mem=2 {'doc_title': 1, 'text': 1}
R 79 P bbox=[772,6082,2049,6637] 1277x555 mem=3 {'text': 2, 'paragraph_title': 1}
R 98 H bbox=[2793,6114,4114,6696] 1321x582 mem=3 {'doc_title': 1, 'text': 2}
>>> image-only orphans REMAINING: []
📐 Sakshi headline SYNTH: R100 doc_title [2126, 3353, 4097, 3452] (un-boxed display headline band, ink=0.35)
📐 Sakshi headline SYNTH: R99 doc_title [763, 3357, 2068, 3452] (un-boxed display headline band, ink=0.30)
📐 Sakshi headline WIDEN: R52 [1182, 1067, 2738, 1327] → [688, 1067, 2738, 1327] (un-boxed kicker ink alongside)
🗞️ Masthead: dropped 5 Sakshi top-band region(s) [59, 62, 63, 64, 71] (above first headline y=1049)
=== page 2: 17 crops, 11 datelines ===
R 82 H bbox=[777,474,2801,2212] 2024x1738 mem=20 {'text': 7, 'image': 8, 'figure_title': 4, 'doc_title': 1}
R127 H bbox=[2755,485,4086,2232] 1331x1747 mem=17 {'text': 8, 'image': 6, 'figure_title': 2, 'doc_title': 1}
R129 P bbox=[95,499,741,2736] 646x2237 mem=8 {'paragraph_title': 1, 'image': 2, 'text': 3, 'figure_title': 2}
R118 H bbox=[2795,2298,4115,2954] 1320x656 mem=4 {'text': 1, 'image': 2, 'doc_title': 1}
R 91 H bbox=[72,2313,707,3101] 635x788 mem=3 {'doc_title': 1, 'text': 2}
R 41 H bbox=[753,2316,2753,3600] 2000x1284 mem=11 {'text': 9, 'doc_title': 1, 'image': 1}
R 14 DL bbox=[3475,2685,4115,3999] 640x1314 mem=5 {'text': 3, 'image': 1, 'paragraph_title': 1}
R 3 DL bbox=[2761,2958,3467,4049] 706x1091 mem=3 {'text': 1, 'image': 1, 'figure_title': 1}
R113 H bbox=[72,3129,709,4641] 637x1512 mem=5 {'doc_title': 1, 'text': 3, 'image': 1}
R 99 H bbox=[752,3656,2071,4649] 1319x993 mem=5 {'image': 1, 'text': 3, 'doc_title': 1}
R 4 F bbox=[2002,3658,2752,5938] 750x2280 mem=8 {'text': 4, 'image': 1, 'paragraph_title': 3}
R 70 H bbox=[2760,4057,4115,5702] 1355x1645 mem=11 {'doc_title': 1, 'text': 9, 'image': 1}
R 93 H bbox=[1216,4710,1963,5939] 747x1229 mem=4 {'text': 3, 'doc_title': 1}
R136 P bbox=[95,4735,1161,5529] 1066x794 mem=3 {'paragraph_title': 1, 'text': 1, 'image': 1}
R 44 F bbox=[650,4979,1128,6145] 478x1166 mem=5 {'text': 4, 'paragraph_title': 1}
R 77 H bbox=[1147,5193,2752,6694] 1605x1501 mem=6 {'doc_title': 1, 'text': 3, 'image': 1, 'figure_title': 1}
R111 P bbox=[120,5618,603,6628] 483x1010 mem=3 {'paragraph_title': 1, 'text': 2}
R 98 H bbox=[2798,5710,4115,6696] 1317x986 mem=6 {'doc_title': 1, 'text': 4, 'image': 1}
R139 H bbox=[614,6155,1168,6617] 554x462 mem=2 {'doc_title': 1, 'text': 1}
>>> image-only orphans REMAINING: []
─ Sakshi rule-split: R41 → 3 bands at rules [1066, 2252]
─ Sakshi rule-split: R74 → 2 bands at rules [1066]
📐 Sakshi headline SYNTH: R139 doc_title [614, 6155, 1168, 6236] (un-boxed display headline band, ink=0.51)
📐 Sakshi headline WIDEN: R77 [1217, 5969, 2690, 6109] → [1147, 5969, 2690, 6109] (un-boxed kicker ink alongside)
🖼 Orphan photo: R38 → article R127 (an image must belong to an article)
🖼 Orphan photo: R61 → article R82 (an image must belong to an article)
🗞️ Masthead: dropped 4 Sakshi top-band region(s) [68, 71, 84, 104] (above first headline y=499)
DONE -> output/Sakshi_Jangaon_District_20260520_20260609_210104/all_article_crops_review

View File

@ -1,52 +0,0 @@
=== page 1: 16 crops, 16 datelines ===
R 55 H bbox=[2763,1049,4114,2732] 1351x1683 mem=12 {'doc_title': 1, 'text': 9, 'image': 1, 'paragraph_title': 1}
R 52 H bbox=[688,1067,2755,3314] 2067x2247 mem=17 {'doc_title': 1, 'text': 9, 'image': 2, 'paragraph_title': 5}
R 83 H bbox=[92,1079,686,2507] 594x1428 mem=4 {'doc_title': 1, 'text': 1, 'image': 1, 'paragraph_title': 1}
R 72 H bbox=[92,2536,685,3404] 593x868 mem=2 {'doc_title': 1, 'text': 1}
R 77 H bbox=[2793,2740,4114,3303] 1321x563 mem=4 {'doc_title': 1, 'text': 1, 'image': 1, 'figure_title': 1}
R100 H bbox=[2113,3353,4113,4297] 2000x944 mem=7 {'doc_title': 1, 'text': 5, 'image': 1}
R 99 H bbox=[750,3357,2069,4605] 1319x1248 mem=8 {'doc_title': 1, 'text': 5, 'image': 1, 'figure_title': 1}
R 67 H bbox=[92,3432,686,4743] 594x1311 mem=3 {'doc_title': 1, 'text': 1, 'image': 1}
R 50 H bbox=[2112,4357,2752,5581] 640x1224 mem=5 {'text': 3, 'image': 1, 'doc_title': 1}
R 54 H bbox=[2793,4368,4114,6094] 1321x1726 mem=9 {'doc_title': 1, 'text': 6, 'image': 1, 'paragraph_title': 1}
R 78 H bbox=[749,4622,2070,6049] 1321x1427 mem=7 {'doc_title': 1, 'text': 6}
R 9 DL bbox=[92,4771,685,5982] 593x1211 mem=2 {'text': 1, 'paragraph_title': 1}
R 5 DL bbox=[2112,5609,2753,6686] 641x1077 mem=2 {'text': 1, 'paragraph_title': 1}
R 75 H bbox=[91,6012,688,6640] 597x628 mem=2 {'doc_title': 1, 'text': 1}
R 79 P bbox=[772,6082,2049,6637] 1277x555 mem=3 {'text': 2, 'paragraph_title': 1}
R 98 H bbox=[2793,6114,4114,6696] 1321x582 mem=3 {'doc_title': 1, 'text': 2}
>>> image-only orphans REMAINING: []
📐 Sakshi headline SYNTH: R100 doc_title [2126, 3353, 4097, 3452] (un-boxed display headline band, ink=0.35)
📐 Sakshi headline SYNTH: R99 doc_title [763, 3357, 2068, 3452] (un-boxed display headline band, ink=0.30)
📐 Sakshi headline WIDEN: R52 [1182, 1067, 2738, 1327] → [688, 1067, 2738, 1327] (un-boxed kicker ink alongside)
🗞️ Masthead: dropped 5 Sakshi top-band region(s) [59, 62, 63, 64, 71] (above first headline y=1049)
=== page 2: 17 crops, 11 datelines ===
R 82 H bbox=[777,474,2801,2212] 2024x1738 mem=20 {'text': 7, 'image': 8, 'figure_title': 4, 'doc_title': 1}
R127 H bbox=[2755,485,4086,2232] 1331x1747 mem=17 {'text': 8, 'image': 6, 'figure_title': 2, 'doc_title': 1}
R129 P bbox=[95,499,741,2736] 646x2237 mem=8 {'paragraph_title': 1, 'image': 2, 'text': 3, 'figure_title': 2}
R118 H bbox=[2795,2298,4115,2957] 1320x659 mem=5 {'text': 2, 'image': 2, 'doc_title': 1}
R 91 H bbox=[72,2313,707,3101] 635x788 mem=3 {'doc_title': 1, 'text': 2}
R 41 H bbox=[753,2316,2753,3600] 2000x1284 mem=11 {'text': 9, 'doc_title': 1, 'image': 1}
R 3 DL bbox=[2761,2958,3467,4049] 706x1091 mem=3 {'text': 1, 'image': 1, 'figure_title': 1}
R 14 DL bbox=[3475,3022,4115,3999] 640x977 mem=4 {'text': 2, 'image': 1, 'paragraph_title': 1}
R113 H bbox=[72,3129,709,4641] 637x1512 mem=5 {'doc_title': 1, 'text': 3, 'image': 1}
R 99 H bbox=[752,3656,2071,4649] 1319x993 mem=5 {'image': 1, 'text': 3, 'doc_title': 1}
R 88 P bbox=[2002,3658,2752,5938] 750x2280 mem=8 {'text': 4, 'image': 1, 'paragraph_title': 3}
R 70 H bbox=[2760,4057,4115,5702] 1355x1645 mem=11 {'doc_title': 1, 'text': 9, 'image': 1}
R 93 H bbox=[1216,4710,1963,5939] 747x1229 mem=6 {'text': 3, 'image': 1, 'doc_title': 1, 'figure_title': 1}
R136 P bbox=[95,4735,1161,5529] 1066x794 mem=3 {'paragraph_title': 1, 'text': 1, 'image': 1}
R 44 F bbox=[650,4979,1128,6617] 478x1638 mem=6 {'text': 5, 'paragraph_title': 1}
R111 P bbox=[120,5618,603,6628] 483x1010 mem=3 {'paragraph_title': 1, 'text': 2}
R 98 H bbox=[2798,5710,4115,6696] 1317x986 mem=6 {'doc_title': 1, 'text': 4, 'image': 1}
R 77 H bbox=[1147,5969,2752,6682] 1605x713 mem=4 {'text': 3, 'doc_title': 1}
>>> image-only orphans REMAINING: []
─ Sakshi rule-split: R41 → 3 bands at rules [1066, 2252]
─ Sakshi rule-split: R74 → 2 bands at rules [1066]
📐 Sakshi headline WIDEN: R77 [1217, 5969, 2690, 6109] → [1147, 5969, 2690, 6109] (un-boxed kicker ink alongside)
🖼 Orphan photo: R38 → article R127 (an image must belong to an article)
🖼 Orphan photo: R61 → article R82 (an image must belong to an article)
🗞️ Masthead: dropped 4 Sakshi top-band region(s) [68, 71, 84, 104] (above first headline y=499)
DONE -> output/Sakshi_Jangaon_District_20260520_20260609_210104/all_article_crops_review

View File

@ -1,52 +0,0 @@
=== page 1: 16 crops, 16 datelines ===
R 55 H bbox=[2763,1049,4114,2732] 1351x1683 mem=12 {'doc_title': 1, 'text': 9, 'image': 1, 'paragraph_title': 1}
R 52 H bbox=[688,1067,2755,3314] 2067x2247 mem=17 {'doc_title': 1, 'text': 9, 'image': 2, 'paragraph_title': 5}
R 83 H bbox=[92,1079,686,2507] 594x1428 mem=4 {'doc_title': 1, 'text': 1, 'image': 1, 'paragraph_title': 1}
R 72 H bbox=[92,2536,685,3404] 593x868 mem=2 {'doc_title': 1, 'text': 1}
R 77 H bbox=[2793,2740,4114,3303] 1321x563 mem=4 {'doc_title': 1, 'text': 1, 'image': 1, 'figure_title': 1}
R100 H bbox=[2113,3353,4113,4297] 2000x944 mem=7 {'doc_title': 1, 'text': 5, 'image': 1}
R 99 H bbox=[750,3357,2069,4605] 1319x1248 mem=8 {'doc_title': 1, 'text': 5, 'image': 1, 'figure_title': 1}
R 67 H bbox=[92,3432,686,4743] 594x1311 mem=3 {'doc_title': 1, 'text': 1, 'image': 1}
R 50 H bbox=[2112,4357,2752,5581] 640x1224 mem=5 {'text': 3, 'image': 1, 'doc_title': 1}
R 54 H bbox=[2793,4368,4114,6094] 1321x1726 mem=9 {'doc_title': 1, 'text': 6, 'image': 1, 'paragraph_title': 1}
R 78 H bbox=[749,4622,2070,6049] 1321x1427 mem=7 {'doc_title': 1, 'text': 6}
R 9 DL bbox=[92,4771,685,5982] 593x1211 mem=2 {'text': 1, 'paragraph_title': 1}
R 5 DL bbox=[2112,5609,2753,6686] 641x1077 mem=2 {'text': 1, 'paragraph_title': 1}
R 75 H bbox=[91,6012,688,6640] 597x628 mem=2 {'doc_title': 1, 'text': 1}
R 79 P bbox=[772,6082,2049,6637] 1277x555 mem=3 {'text': 2, 'paragraph_title': 1}
R 98 H bbox=[2793,6114,4114,6696] 1321x582 mem=3 {'doc_title': 1, 'text': 2}
>>> image-only orphans REMAINING: []
📐 Sakshi headline SYNTH: R100 doc_title [2126, 3353, 4097, 3452] (un-boxed display headline band, ink=0.35)
📐 Sakshi headline SYNTH: R99 doc_title [763, 3357, 2068, 3452] (un-boxed display headline band, ink=0.30)
📐 Sakshi headline WIDEN: R52 [1182, 1067, 2738, 1327] → [688, 1067, 2738, 1327] (un-boxed kicker ink alongside)
🗞️ Masthead: dropped 5 Sakshi top-band region(s) [59, 62, 63, 64, 71] (above first headline y=1049)
=== page 2: 17 crops, 11 datelines ===
R 82 H bbox=[777,474,2801,2212] 2024x1738 mem=20 {'text': 7, 'image': 8, 'figure_title': 4, 'doc_title': 1}
R127 H bbox=[2755,485,4086,2232] 1331x1747 mem=17 {'text': 8, 'image': 6, 'figure_title': 2, 'doc_title': 1}
R129 P bbox=[95,499,741,2209] 646x1710 mem=6 {'paragraph_title': 1, 'image': 1, 'text': 3, 'figure_title': 1}
R118 H bbox=[2795,2298,4115,2957] 1320x659 mem=5 {'text': 2, 'image': 2, 'doc_title': 1}
R 91 H bbox=[72,2313,707,3101] 635x788 mem=5 {'text': 2, 'image': 1, 'doc_title': 1, 'figure_title': 1}
R 41 H bbox=[753,2316,2753,3600] 2000x1284 mem=11 {'text': 9, 'doc_title': 1, 'image': 1}
R 3 DL bbox=[2761,2958,3467,4049] 706x1091 mem=3 {'text': 1, 'image': 1, 'figure_title': 1}
R 14 DL bbox=[3475,3022,4115,3999] 640x977 mem=4 {'text': 2, 'image': 1, 'paragraph_title': 1}
R113 H bbox=[72,3129,709,4641] 637x1512 mem=5 {'doc_title': 1, 'text': 3, 'image': 1}
R 99 H bbox=[752,3656,2071,4649] 1319x993 mem=5 {'image': 1, 'text': 3, 'doc_title': 1}
R 88 P bbox=[2002,3658,2752,5938] 750x2280 mem=8 {'text': 4, 'image': 1, 'paragraph_title': 3}
R 70 H bbox=[2760,4057,4115,5702] 1355x1645 mem=11 {'doc_title': 1, 'text': 9, 'image': 1}
R 93 H bbox=[1216,4710,1963,5939] 747x1229 mem=6 {'text': 3, 'image': 1, 'doc_title': 1, 'figure_title': 1}
R136 P bbox=[95,4735,1161,5529] 1066x794 mem=3 {'paragraph_title': 1, 'text': 1, 'image': 1}
R 44 F bbox=[650,4979,1128,6617] 478x1638 mem=6 {'text': 5, 'paragraph_title': 1}
R111 P bbox=[120,5618,603,6628] 483x1010 mem=3 {'paragraph_title': 1, 'text': 2}
R 98 H bbox=[2798,5710,4115,6696] 1317x986 mem=6 {'doc_title': 1, 'text': 4, 'image': 1}
R 77 H bbox=[1147,5969,2752,6682] 1605x713 mem=4 {'text': 3, 'doc_title': 1}
>>> image-only orphans REMAINING: []
─ Sakshi rule-split: R41 → 3 bands at rules [1066, 2252]
─ Sakshi rule-split: R74 → 2 bands at rules [1066]
📐 Sakshi headline WIDEN: R77 [1217, 5969, 2690, 6109] → [1147, 5969, 2690, 6109] (un-boxed kicker ink alongside)
🖼 Orphan photo: R38 → article R127 (an image must belong to an article)
🖼 Orphan photo: R61 → article R82 (an image must belong to an article)
🗞️ Masthead: dropped 4 Sakshi top-band region(s) [68, 71, 84, 104] (above first headline y=499)
DONE -> output/Sakshi_Jangaon_District_20260520_20260609_210104/all_article_crops_review

View File

@ -1,55 +0,0 @@
=== page 1: 16 crops, 16 datelines ===
R 55 H bbox=[2763,1049,4114,2732] 1351x1683 mem=12 {'doc_title': 1, 'text': 9, 'image': 1, 'paragraph_title': 1}
R 52 H bbox=[688,1067,2755,3314] 2067x2247 mem=17 {'doc_title': 1, 'text': 9, 'image': 2, 'paragraph_title': 5}
R 83 H bbox=[92,1079,686,2507] 594x1428 mem=4 {'doc_title': 1, 'text': 1, 'image': 1, 'paragraph_title': 1}
R 72 H bbox=[92,2536,685,3404] 593x868 mem=2 {'doc_title': 1, 'text': 1}
R 77 H bbox=[2793,2740,4114,3303] 1321x563 mem=4 {'doc_title': 1, 'text': 1, 'image': 1, 'figure_title': 1}
R100 H bbox=[2113,3353,4113,4297] 2000x944 mem=7 {'doc_title': 1, 'text': 5, 'image': 1}
R 99 H bbox=[750,3357,2069,4605] 1319x1248 mem=8 {'doc_title': 1, 'text': 5, 'image': 1, 'figure_title': 1}
R 67 H bbox=[92,3432,686,4743] 594x1311 mem=3 {'doc_title': 1, 'text': 1, 'image': 1}
R 50 H bbox=[2112,4357,2752,5581] 640x1224 mem=5 {'text': 3, 'image': 1, 'doc_title': 1}
R 54 H bbox=[2793,4368,4114,6094] 1321x1726 mem=9 {'doc_title': 1, 'text': 6, 'image': 1, 'paragraph_title': 1}
R 78 H bbox=[749,4622,2070,6049] 1321x1427 mem=7 {'doc_title': 1, 'text': 6}
R 9 DL bbox=[92,4771,685,5982] 593x1211 mem=2 {'text': 1, 'paragraph_title': 1}
R 5 DL bbox=[2112,5609,2753,6686] 641x1077 mem=2 {'text': 1, 'paragraph_title': 1}
R 75 H bbox=[91,6012,688,6640] 597x628 mem=2 {'doc_title': 1, 'text': 1}
R 79 P bbox=[772,6082,2049,6637] 1277x555 mem=3 {'text': 2, 'paragraph_title': 1}
R 98 H bbox=[2793,6114,4114,6696] 1321x582 mem=3 {'doc_title': 1, 'text': 2}
>>> image-only orphans REMAINING: []
📐 Sakshi headline SYNTH: R100 doc_title [2126, 3353, 4097, 3452] (un-boxed display headline band, ink=0.35)
📐 Sakshi headline SYNTH: R99 doc_title [763, 3357, 2068, 3452] (un-boxed display headline band, ink=0.30)
📐 Sakshi headline WIDEN: R52 [1182, 1067, 2738, 1327] → [688, 1067, 2738, 1327] (un-boxed kicker ink alongside)
🗞️ Masthead: dropped 5 Sakshi top-band region(s) [59, 62, 63, 64, 71] (above first headline y=1049)
=== page 2: 17 crops, 11 datelines ===
R 82 H bbox=[777,474,2801,2212] 2024x1738 mem=20 {'text': 7, 'image': 8, 'figure_title': 4, 'doc_title': 1}
R127 H bbox=[2755,485,4086,2232] 1331x1747 mem=17 {'text': 8, 'image': 6, 'figure_title': 2, 'doc_title': 1}
R129 P bbox=[95,499,741,2209] 646x1710 mem=6 {'paragraph_title': 1, 'image': 1, 'text': 3, 'figure_title': 1}
R118 H bbox=[2795,2298,4115,2957] 1320x659 mem=5 {'text': 2, 'image': 2, 'doc_title': 1}
R 91 H bbox=[72,2313,707,3101] 635x788 mem=5 {'text': 2, 'image': 1, 'doc_title': 1, 'figure_title': 1}
R 41 H bbox=[753,2316,2753,3600] 2000x1284 mem=11 {'text': 9, 'doc_title': 1, 'image': 1}
R 3 DL bbox=[2761,2958,3467,4049] 706x1091 mem=3 {'text': 1, 'image': 1, 'figure_title': 1}
R 14 DL bbox=[3475,3022,4115,3999] 640x977 mem=4 {'text': 2, 'image': 1, 'paragraph_title': 1}
R113 H bbox=[72,3129,709,4641] 637x1512 mem=5 {'doc_title': 1, 'text': 3, 'image': 1}
R 99 H bbox=[752,3656,2071,4649] 1319x993 mem=5 {'image': 1, 'text': 3, 'doc_title': 1}
R 88 P bbox=[2113,3658,2752,4643] 639x985 mem=4 {'text': 2, 'image': 1, 'paragraph_title': 1}
R 70 H bbox=[2760,4057,4115,5702] 1355x1645 mem=11 {'doc_title': 1, 'text': 9, 'image': 1}
R 93 H bbox=[1216,4710,2752,5939] 1536x1229 mem=10 {'text': 5, 'image': 1, 'doc_title': 1, 'paragraph_title': 2, 'figure_title': 1}
R136 P bbox=[95,4735,1161,5529] 1066x794 mem=3 {'paragraph_title': 1, 'text': 1, 'image': 1}
R 44 F bbox=[650,4979,1128,5185] 478x206 mem=1 {'text': 1}
R 92 F bbox=[653,5252,1127,5744] 474x492 mem=3 {'text': 2, 'paragraph_title': 1}
R111 P bbox=[120,5618,603,6628] 483x1010 mem=3 {'paragraph_title': 1, 'text': 2}
R 98 H bbox=[2798,5710,4115,6696] 1317x986 mem=6 {'doc_title': 1, 'text': 4, 'image': 1}
R 90 F bbox=[685,5924,1099,6145] 414x221 mem=1 {'text': 1}
R 77 H bbox=[1147,5969,2752,6682] 1605x713 mem=4 {'text': 3, 'doc_title': 1}
R110 F bbox=[668,6258,1106,6617] 438x359 mem=1 {'text': 1}
>>> image-only orphans REMAINING: []
─ Sakshi rule-split: R41 → 3 bands at rules [1066, 2252]
─ Sakshi rule-split: R74 → 2 bands at rules [1066]
📐 Sakshi headline WIDEN: R77 [1217, 5969, 2690, 6109] → [1147, 5969, 2690, 6109] (un-boxed kicker ink alongside)
🖼 Orphan photo: R38 → article R127 (an image must belong to an article)
🖼 Orphan photo: R61 → article R82 (an image must belong to an article)
🗞️ Masthead: dropped 4 Sakshi top-band region(s) [68, 71, 84, 104] (above first headline y=499)
DONE -> output/Sakshi_Jangaon_District_20260520_20260609_210104/all_article_crops_review

View File

@ -1,55 +0,0 @@
=== page 1: 12 crops, 16 datelines ===
R 55 H bbox=[2796,1049,4114,2002] 1318x953 mem=6 {'doc_title': 1, 'text': 4, 'image': 1}
R 52 H bbox=[664,1067,2749,2657] 2085x1590 mem=8 {'doc_title': 1, 'text': 3, 'image': 2, 'paragraph_title': 2}
R 83 H bbox=[92,1079,686,2507] 594x1428 mem=4 {'doc_title': 1, 'text': 1, 'image': 1, 'paragraph_title': 1}
R 94 P bbox=[2113,1941,2755,3257] 642x1316 mem=4 {'paragraph_title': 1, 'text': 3}
R 77 H bbox=[2793,1973,4114,3315] 1321x1342 mem=8 {'text': 6, 'doc_title': 1, 'paragraph_title': 1}
R 72 H bbox=[92,2536,685,3404] 593x868 mem=2 {'doc_title': 1, 'text': 1}
R 66 P bbox=[693,2665,1391,6678] 698x4013 mem=2 {'paragraph_title': 1, 'text': 1}
R 51 P bbox=[1399,2665,2105,6678] 706x4013 mem=3 {'paragraph_title': 1, 'text': 2}
R 99 H bbox=[749,2860,4114,6698] 3365x3838 mem=45 {'text': 30, 'image': 5, 'figure_title': 2, 'paragraph_title': 3, 'doc_title': 5}
R 67 H bbox=[92,3432,686,4743] 594x1311 mem=3 {'doc_title': 1, 'text': 1, 'image': 1}
R 9 DL bbox=[92,4771,685,5982] 593x1211 mem=2 {'text': 1, 'paragraph_title': 1}
R 75 H bbox=[91,6012,688,6640] 597x628 mem=2 {'doc_title': 1, 'text': 1}
>>> image-only orphans REMAINING: []
📐 Sakshi headline SYNTH: R99 doc_title [763, 3353, 4097, 3452] (un-boxed display headline band, ink=0.32)
📐 Sakshi headline WIDEN: R52 [1182, 1067, 2738, 1327] → [664, 1067, 2738, 1327] (un-boxed kicker ink alongside)
🗞️ Masthead: dropped 5 Sakshi top-band region(s) [59, 62, 63, 64, 71] (above first headline y=1049)
=== page 2: 21 crops, 11 datelines ===
R 61 O bbox=[777,474,1506,2308] 729x1834 mem=8 {'image': 3, 'text': 3, 'figure_title': 2} IMG-ORPHAN? ORPHAN
R 82 H bbox=[695,478,2747,2308] 2052x1830 mem=10 {'text': 3, 'image': 4, 'figure_title': 2, 'doc_title': 1}
R 55 O bbox=[2549,479,2801,1028] 252x549 mem=2 {'image': 1, 'text': 1} IMG-ORPHAN? ORPHAN
R129 P bbox=[80,482,769,1053] 689x571 mem=2 {'paragraph_title': 1, 'text': 1}
R 72 H bbox=[2755,482,3519,2232] 764x1750 mem=8 {'image': 3, 'text': 3, 'doc_title': 1, 'figure_title': 1}
R127 H bbox=[3353,482,4115,2215] 762x1733 mem=9 {'text': 4, 'image': 3, 'figure_title': 1, 'doc_title': 1}
R 24 O bbox=[80,1061,687,2305] 607x1244 mem=4 {'image': 1, 'figure_title': 1, 'text': 2} IMG-ORPHAN? ORPHAN
R118 H bbox=[2795,2298,4115,2954] 1320x656 mem=4 {'doc_title': 1, 'text': 1, 'image': 2}
R 91 H bbox=[72,2313,707,3101] 635x788 mem=3 {'doc_title': 1, 'text': 2}
R 41 H bbox=[753,2316,2753,3600] 2000x1284 mem=11 {'text': 9, 'doc_title': 1, 'image': 1}
R113 H bbox=[72,2417,709,4641] 637x2224 mem=7 {'doc_title': 1, 'text': 3, 'image': 2, 'figure_title': 1}
R 14 DL bbox=[3475,2685,4115,3999] 640x1314 mem=5 {'text': 3, 'image': 1, 'paragraph_title': 1}
R 3 DL bbox=[2761,2958,3467,4049] 706x1091 mem=3 {'text': 1, 'image': 1, 'figure_title': 1}
R 99 H bbox=[650,3656,2071,6145] 1421x2489 mem=10 {'image': 1, 'text': 7, 'doc_title': 1, 'paragraph_title': 1}
R 10 F bbox=[2113,3658,2752,4643] 639x985 mem=4 {'text': 2, 'image': 1, 'paragraph_title': 1}
R 70 H bbox=[2760,4057,4115,5702] 1355x1645 mem=11 {'doc_title': 1, 'text': 9, 'image': 1}
R 93 H bbox=[1216,4710,1963,5939] 747x1229 mem=6 {'text': 3, 'image': 1, 'doc_title': 1, 'figure_title': 1}
R 4 F bbox=[2002,4723,2752,5938] 750x1215 mem=4 {'text': 2, 'paragraph_title': 2}
R136 P bbox=[95,4735,1161,5529] 1066x794 mem=3 {'paragraph_title': 1, 'text': 1, 'image': 1}
R111 P bbox=[120,5618,603,6628] 483x1010 mem=3 {'paragraph_title': 1, 'text': 2}
R 98 H bbox=[2798,5710,4115,6696] 1317x986 mem=6 {'doc_title': 1, 'text': 4, 'image': 1}
R 77 H bbox=[1104,5969,2752,6682] 1648x713 mem=4 {'text': 3, 'doc_title': 1}
R139 H bbox=[614,6155,1168,6617] 554x462 mem=2 {'doc_title': 1, 'text': 1}
>>> image-only orphans REMAINING: []
📐 Sakshi headline SYNTH: R139 doc_title [614, 6155, 1168, 6236] (un-boxed display headline band, ink=0.51)
📐 Sakshi headline WIDEN: R77 [1217, 5969, 2690, 6109] → [1104, 5969, 2690, 6109] (un-boxed kicker ink alongside)
🖼 Orphan photo: R38 → article R72 (an image must belong to an article)
🖼 Orphan photo: R42 → article R82 (an image must belong to an article)
🖼 Orphan photo: R48 → article R127 (an image must belong to an article)
🖼 Orphan photo: R52 → article R127 (an image must belong to an article)
🖼 Orphan photo: R60 → article R82 (an image must belong to an article)
🖼 Orphan photo: R63 → article R82 (an image must belong to an article)
🗞️ Masthead: dropped 4 Sakshi top-band region(s) [68, 71, 84, 104] (above first headline y=499)
DONE -> output/Sakshi_Jangaon_District_20260520_20260609_210104/all_article_crops_review

View File

@ -1,41 +0,0 @@
=== page 1: 13 crops, 14 datelines ===
R 53 H bbox=[2792,1069,4115,3285] 1323x2216 mem=14 {'doc_title': 1, 'text': 9, 'image': 1, 'figure_title': 1, 'paragraph_title': 2}
R 46 H bbox=[684,1077,2784,3285] 2100x2208 mem=21 {'doc_title': 2, 'text': 11, 'image': 2, 'paragraph_title': 6}
R 66 H bbox=[99,1078,681,2654] 582x1576 mem=3 {'doc_title': 1, 'text': 1, 'paragraph_title': 1}
R 65 H bbox=[99,2678,680,4455] 581x1777 mem=6 {'text': 3, 'image': 1, 'doc_title': 1, 'paragraph_title': 1}
R 82 H bbox=[2114,3293,4115,5007] 2001x1714 mem=11 {'doc_title': 1, 'text': 7, 'image': 1, 'figure_title': 1, 'paragraph_title': 1}
R 75 H bbox=[749,3323,2069,4792] 1320x1469 mem=7 {'doc_title': 1, 'text': 5, 'image': 1}
R 3 DL bbox=[98,4463,741,5703] 643x1240 mem=2 {'text': 1, 'image': 1}
R 47 H bbox=[749,4850,2368,5588] 1619x738 mem=6 {'doc_title': 1, 'text': 2, 'image': 1, 'figure_title': 1, 'paragraph_title': 1}
R 93 H bbox=[2791,5058,4115,6247] 1324x1189 mem=6 {'doc_title': 1, 'text': 3, 'image': 1, 'figure_title': 1}
R 55 H bbox=[2137,5113,2736,6130] 599x1017 mem=2 {'doc_title': 1, 'text': 1}
R 44 H bbox=[98,5711,681,6639] 583x928 mem=2 {'doc_title': 1, 'text': 1}
R100 H bbox=[750,5782,2072,6697] 1322x915 mem=5 {'doc_title': 1, 'text': 2, 'image': 2}
R 56 H bbox=[2564,6284,4115,6691] 1551x407 mem=3 {'doc_title': 1, 'text': 2}
>>> image-only orphans REMAINING: []
📐 Sakshi headline WIDEN: R100 [765, 6130, 1350, 6228] → [765, 6130, 1949, 6228] (un-boxed kicker ink alongside)
=== page 2: 16 crops, 15 datelines ===
R 61 H bbox=[931,490,4115,2536] 3184x2046 mem=32 {'text': 15, 'image': 8, 'doc_title': 2, 'paragraph_title': 5, 'figure_title': 2}
R106 H bbox=[2081,490,2753,5535] 672x5045 mem=6 {'doc_title': 1, 'text': 1, 'image': 1, 'figure_title': 2, 'paragraph_title': 1}
R105 P bbox=[78,498,898,1656] 820x1158 mem=5 {'paragraph_title': 1, 'image': 1, 'text': 2, 'figure_title': 1}
R128 P bbox=[106,1664,860,2507] 754x843 mem=4 {'paragraph_title': 1, 'text': 1, 'image': 1, 'figure_title': 1}
R 57 H bbox=[751,2579,2754,4161] 2003x1582 mem=10 {'doc_title': 1, 'text': 7, 'image': 1, 'paragraph_title': 1}
R 69 H bbox=[2794,2589,4115,3863] 1321x1274 mem=6 {'doc_title': 1, 'text': 4, 'image': 1}
R121 DL bbox=[70,2805,709,3948] 639x1143 mem=6 {'text': 3, 'image': 1, 'paragraph_title': 1, 'figure_title': 1}
R100 H bbox=[752,3306,2070,5044] 1318x1738 mem=5 {'text': 4, 'doc_title': 1}
R 95 H bbox=[2795,3914,4115,4990] 1320x1076 mem=6 {'doc_title': 2, 'image': 1, 'text': 2, 'figure_title': 1}
R 87 DL bbox=[73,3974,709,5049] 636x1075 mem=5 {'text': 2, 'image': 2, 'figure_title': 1}
R 80 H bbox=[2814,5054,4115,6172] 1301x1118 mem=7 {'text': 4, 'image': 2, 'doc_title': 1}
R115 DL bbox=[94,5097,1161,6624] 1067x1527 mem=5 {'text': 4, 'image': 1}
R107 H bbox=[1199,5102,2071,6685] 872x1583 mem=5 {'text': 3, 'image': 1, 'doc_title': 1}
R 74 F bbox=[658,5350,1139,6624] 481x1274 mem=4 {'text': 4}
R 7 DL bbox=[2114,5559,2754,6684] 640x1125 mem=3 {'text': 1, 'image': 1, 'paragraph_title': 1}
R 90 H bbox=[2814,5760,3431,6635] 617x875 mem=4 {'doc_title': 1, 'text': 3}
R 76 H bbox=[3474,5970,4115,6634] 641x664 mem=5 {'doc_title': 1, 'text': 3, 'image': 1}
>>> image-only orphans REMAINING: []
─ Sakshi rule-split: R12 → 2 bands at rules [4170]
🖼 Orphan photo: R36 → article R87 (an image must belong to an article)
DONE -> output/Sakshi_Jangaon District_20260513_20260610_140735/all_article_crops_review

View File

@ -1,50 +0,0 @@
=== page 1: 19 crops, 14 datelines ===
R 53 H bbox=[2792,1069,4115,3285] 1323x2216 mem=14 {'text': 9, 'image': 1, 'doc_title': 1, 'figure_title': 1, 'paragraph_title': 2}
R 46 H bbox=[684,1077,2784,2187] 2100x1110 mem=8 {'doc_title': 2, 'text': 4, 'image': 1, 'paragraph_title': 1}
R 84 P bbox=[1433,1077,2107,2755] 674x1678 mem=2 {'paragraph_title': 1, 'text': 1}
R 66 H bbox=[99,1078,681,2654] 582x1576 mem=3 {'doc_title': 1, 'text': 1, 'paragraph_title': 1}
R 45 P bbox=[689,2195,1425,3315] 736x1120 mem=2 {'paragraph_title': 1, 'text': 1}
R 72 P bbox=[2115,2195,2784,2915] 669x720 mem=5 {'paragraph_title': 1, 'text': 3, 'image': 1}
R 65 H bbox=[99,2678,680,4291] 581x1613 mem=4 {'text': 2, 'image': 1, 'doc_title': 1}
R 48 P bbox=[1433,2763,2107,3315] 674x552 mem=2 {'paragraph_title': 1, 'text': 1}
R 60 P bbox=[2115,2923,2784,3285] 669x362 mem=2 {'paragraph_title': 1, 'text': 1}
R 82 H bbox=[2114,3293,4115,5007] 2001x1714 mem=11 {'text': 7, 'image': 1, 'figure_title': 1, 'paragraph_title': 1, 'doc_title': 1}
R 75 H bbox=[749,3323,2069,4792] 1320x1469 mem=7 {'doc_title': 1, 'text': 5, 'image': 1}
R 86 P bbox=[102,4299,741,4455] 639x156 mem=2 {'paragraph_title': 1, 'text': 1}
R 3 DL bbox=[98,4463,741,5703] 643x1240 mem=2 {'text': 1, 'image': 1}
R 47 H bbox=[749,4850,2368,5588] 1619x738 mem=6 {'doc_title': 1, 'text': 2, 'image': 1, 'figure_title': 1, 'paragraph_title': 1}
R 93 H bbox=[2791,5058,4115,6247] 1324x1189 mem=6 {'doc_title': 1, 'text': 3, 'image': 1, 'figure_title': 1}
R 55 H bbox=[2137,5113,2736,6130] 599x1017 mem=2 {'doc_title': 1, 'text': 1}
R 44 H bbox=[98,5711,681,6639] 583x928 mem=2 {'doc_title': 1, 'text': 1}
R100 H bbox=[750,5782,2072,6697] 1322x915 mem=5 {'doc_title': 1, 'text': 2, 'image': 2}
R 56 H bbox=[2564,6284,4115,6691] 1551x407 mem=3 {'doc_title': 1, 'text': 2}
>>> image-only orphans REMAINING: []
📐 Sakshi headline WIDEN: R100 [765, 6130, 1350, 6228] → [765, 6130, 1949, 6228] (un-boxed kicker ink alongside)
=== page 2: 19 crops, 15 datelines ===
R 61 H bbox=[931,490,4115,2536] 3184x2046 mem=32 {'text': 15, 'image': 8, 'doc_title': 2, 'paragraph_title': 5, 'figure_title': 2}
R127 P bbox=[2081,490,2754,4147] 673x3657 mem=3 {'paragraph_title': 1, 'text': 1, 'figure_title': 1}
R105 P bbox=[78,498,898,1518] 820x1020 mem=5 {'paragraph_title': 1, 'image': 1, 'text': 2, 'figure_title': 1}
R121 DL bbox=[70,1526,743,3817] 673x2291 mem=4 {'text': 2, 'image': 1, 'figure_title': 1}
R128 P bbox=[106,1664,860,2507] 754x843 mem=4 {'paragraph_title': 1, 'text': 1, 'image': 1, 'figure_title': 1}
R 57 H bbox=[754,2579,2751,3639] 1997x1060 mem=6 {'doc_title': 1, 'text': 4, 'image': 1}
R 69 H bbox=[2794,2589,4115,3863] 1321x1274 mem=6 {'doc_title': 1, 'text': 4, 'image': 1}
R 4 DL bbox=[751,3306,2071,4149] 1320x843 mem=3 {'text': 3}
R 81 P bbox=[75,3825,743,3966] 668x141 mem=2 {'paragraph_title': 1, 'text': 1}
R 95 H bbox=[2795,3914,4115,4990] 1320x1076 mem=6 {'doc_title': 2, 'image': 1, 'text': 2, 'figure_title': 1}
R 87 DL bbox=[73,3974,709,5049] 636x1075 mem=5 {'text': 2, 'image': 2, 'figure_title': 1}
R100 H bbox=[752,4203,2070,5044] 1318x841 mem=4 {'text': 3, 'doc_title': 1}
R106 H bbox=[2114,4209,2753,5535] 639x1326 mem=5 {'doc_title': 1, 'text': 1, 'image': 1, 'figure_title': 1, 'paragraph_title': 1}
R 80 H bbox=[2814,5054,4115,6172] 1301x1118 mem=7 {'text': 4, 'image': 2, 'doc_title': 1}
R115 DL bbox=[94,5097,1161,6624] 1067x1527 mem=5 {'text': 4, 'image': 1}
R107 H bbox=[1199,5102,2071,6685] 872x1583 mem=5 {'text': 3, 'image': 1, 'doc_title': 1}
R 74 F bbox=[658,5350,1139,6624] 481x1274 mem=4 {'text': 4}
R 7 DL bbox=[2114,5559,2754,6684] 640x1125 mem=3 {'text': 1, 'image': 1, 'paragraph_title': 1}
R 90 H bbox=[2814,5760,3431,6635] 617x875 mem=4 {'doc_title': 1, 'text': 3}
R 76 H bbox=[3474,5970,4115,6634] 641x664 mem=5 {'doc_title': 1, 'text': 3, 'image': 1}
>>> image-only orphans REMAINING: []
─ Sakshi rule-split: R12 → 2 bands at rules [4170]
🖼 Orphan photo: R36 → article R87 (an image must belong to an article)
DONE -> output/Sakshi_Jangaon District_20260513_20260610_140735/all_article_crops_review

View File

@ -1,42 +0,0 @@
=== page 1: 14 crops, 14 datelines ===
R 53 H bbox=[2792,1069,4115,3285] 1323x2216 mem=14 {'text': 9, 'image': 1, 'doc_title': 1, 'figure_title': 1, 'paragraph_title': 2}
R 46 H bbox=[684,1077,2784,3285] 2100x2208 mem=21 {'text': 11, 'image': 2, 'paragraph_title': 6, 'doc_title': 2}
R 66 H bbox=[99,1078,681,2654] 582x1576 mem=3 {'doc_title': 1, 'text': 1, 'paragraph_title': 1}
R 65 H bbox=[99,2678,680,4291] 581x1613 mem=4 {'text': 2, 'image': 1, 'doc_title': 1}
R 82 H bbox=[2114,3293,4115,5007] 2001x1714 mem=11 {'text': 7, 'image': 1, 'figure_title': 1, 'paragraph_title': 1, 'doc_title': 1}
R 75 H bbox=[749,3323,2069,4792] 1320x1469 mem=7 {'doc_title': 1, 'text': 5, 'image': 1}
R 86 P bbox=[102,4299,741,4455] 639x156 mem=2 {'paragraph_title': 1, 'text': 1}
R 3 DL bbox=[98,4463,741,5703] 643x1240 mem=2 {'text': 1, 'image': 1}
R 47 H bbox=[749,4850,2368,5588] 1619x738 mem=6 {'doc_title': 1, 'text': 2, 'image': 1, 'figure_title': 1, 'paragraph_title': 1}
R 93 H bbox=[2791,5058,4115,6247] 1324x1189 mem=6 {'doc_title': 1, 'text': 3, 'image': 1, 'figure_title': 1}
R 55 H bbox=[2137,5113,2736,6130] 599x1017 mem=2 {'doc_title': 1, 'text': 1}
R 44 H bbox=[98,5711,681,6639] 583x928 mem=2 {'doc_title': 1, 'text': 1}
R100 H bbox=[750,5782,2072,6697] 1322x915 mem=5 {'doc_title': 1, 'text': 2, 'image': 2}
R 56 H bbox=[2564,6284,4115,6691] 1551x407 mem=3 {'doc_title': 1, 'text': 2}
>>> image-only orphans REMAINING: []
📐 Sakshi headline WIDEN: R100 [765, 6130, 1350, 6228] → [765, 6130, 1949, 6228] (un-boxed kicker ink alongside)
=== page 2: 16 crops, 15 datelines ===
R 61 H bbox=[931,490,4115,2536] 3184x2046 mem=32 {'text': 15, 'image': 8, 'doc_title': 2, 'paragraph_title': 5, 'figure_title': 2}
R106 H bbox=[2081,490,2753,5535] 672x5045 mem=6 {'doc_title': 1, 'text': 1, 'image': 1, 'figure_title': 2, 'paragraph_title': 1}
R105 P bbox=[78,498,898,1656] 820x1158 mem=5 {'paragraph_title': 1, 'image': 1, 'text': 2, 'figure_title': 1}
R128 P bbox=[106,1664,860,2507] 754x843 mem=4 {'paragraph_title': 1, 'text': 1, 'image': 1, 'figure_title': 1}
R 57 H bbox=[751,2579,2754,4161] 2003x1582 mem=11 {'text': 8, 'image': 1, 'doc_title': 1, 'paragraph_title': 1}
R 69 H bbox=[2794,2589,4115,3863] 1321x1274 mem=6 {'doc_title': 1, 'text': 4, 'image': 1}
R121 DL bbox=[70,2805,709,3948] 639x1143 mem=6 {'text': 3, 'image': 1, 'paragraph_title': 1, 'figure_title': 1}
R 95 H bbox=[2795,3914,4115,4990] 1320x1076 mem=6 {'doc_title': 2, 'image': 1, 'text': 2, 'figure_title': 1}
R 87 DL bbox=[73,3974,709,5049] 636x1075 mem=5 {'text': 2, 'image': 2, 'figure_title': 1}
R100 H bbox=[752,4203,2070,5044] 1318x841 mem=4 {'text': 3, 'doc_title': 1}
R 80 H bbox=[2814,5054,4115,6172] 1301x1118 mem=7 {'text': 4, 'image': 2, 'doc_title': 1}
R115 DL bbox=[94,5097,1161,6624] 1067x1527 mem=5 {'text': 4, 'image': 1}
R107 H bbox=[1199,5102,2071,6685] 872x1583 mem=5 {'text': 3, 'image': 1, 'doc_title': 1}
R 74 F bbox=[658,5350,1139,6624] 481x1274 mem=4 {'text': 4}
R 7 DL bbox=[2114,5559,2754,6684] 640x1125 mem=3 {'text': 1, 'image': 1, 'paragraph_title': 1}
R 90 H bbox=[2814,5760,3431,6635] 617x875 mem=4 {'doc_title': 1, 'text': 3}
R 76 H bbox=[3474,5970,4115,6634] 641x664 mem=5 {'doc_title': 1, 'text': 3, 'image': 1}
>>> image-only orphans REMAINING: []
─ Sakshi rule-split: R12 → 2 bands at rules [4170]
🖼 Orphan photo: R36 → article R87 (an image must belong to an article)
DONE -> output/Sakshi_Jangaon District_20260513_20260610_140735/all_article_crops_review

View File

@ -1,42 +0,0 @@
=== page 1: 14 crops, 14 datelines ===
R 53 H bbox=[2792,1069,4115,3285] 1323x2216 mem=14 {'text': 9, 'image': 1, 'doc_title': 1, 'figure_title': 1, 'paragraph_title': 2}
R 46 H bbox=[684,1077,2784,3285] 2100x2208 mem=21 {'text': 11, 'image': 2, 'paragraph_title': 6, 'doc_title': 2}
R 66 H bbox=[99,1078,681,2654] 582x1576 mem=3 {'doc_title': 1, 'text': 1, 'paragraph_title': 1}
R 65 H bbox=[99,2678,680,4291] 581x1613 mem=4 {'text': 2, 'image': 1, 'doc_title': 1}
R 82 H bbox=[2114,3293,4115,5007] 2001x1714 mem=11 {'text': 7, 'image': 1, 'figure_title': 1, 'paragraph_title': 1, 'doc_title': 1}
R 75 H bbox=[749,3323,2069,4792] 1320x1469 mem=7 {'doc_title': 1, 'text': 5, 'image': 1}
R 86 P bbox=[102,4299,741,4455] 639x156 mem=2 {'paragraph_title': 1, 'text': 1}
R 3 DL bbox=[98,4463,741,5703] 643x1240 mem=2 {'text': 1, 'image': 1}
R 47 H bbox=[749,4850,2368,5588] 1619x738 mem=6 {'doc_title': 1, 'text': 2, 'image': 1, 'figure_title': 1, 'paragraph_title': 1}
R 93 H bbox=[2791,5058,4115,6247] 1324x1189 mem=6 {'doc_title': 1, 'text': 3, 'image': 1, 'figure_title': 1}
R 55 H bbox=[2137,5113,2736,6130] 599x1017 mem=2 {'doc_title': 1, 'text': 1}
R 44 H bbox=[98,5711,681,6639] 583x928 mem=2 {'doc_title': 1, 'text': 1}
R100 H bbox=[750,5782,2072,6697] 1322x915 mem=5 {'doc_title': 1, 'text': 2, 'image': 2}
R 56 H bbox=[2564,6284,4115,6691] 1551x407 mem=3 {'doc_title': 1, 'text': 2}
>>> image-only orphans REMAINING: []
📐 Sakshi headline WIDEN: R100 [765, 6130, 1350, 6228] → [765, 6130, 1949, 6228] (un-boxed kicker ink alongside)
=== page 2: 16 crops, 15 datelines ===
R 61 H bbox=[931,490,4115,2536] 3184x2046 mem=33 {'text': 15, 'image': 8, 'doc_title': 2, 'paragraph_title': 5, 'figure_title': 3}
R105 P bbox=[78,498,898,1656] 820x1158 mem=5 {'paragraph_title': 1, 'image': 1, 'text': 2, 'figure_title': 1}
R128 P bbox=[106,1664,860,2507] 754x843 mem=4 {'paragraph_title': 1, 'text': 1, 'image': 1, 'figure_title': 1}
R 57 H bbox=[751,2579,2754,4161] 2003x1582 mem=11 {'text': 8, 'image': 1, 'doc_title': 1, 'paragraph_title': 1}
R 69 H bbox=[2794,2589,4115,3863] 1321x1274 mem=6 {'doc_title': 1, 'text': 4, 'image': 1}
R121 DL bbox=[70,2805,709,3948] 639x1143 mem=6 {'text': 3, 'image': 1, 'paragraph_title': 1, 'figure_title': 1}
R 95 H bbox=[2795,3914,4115,4990] 1320x1076 mem=6 {'doc_title': 2, 'image': 1, 'text': 2, 'figure_title': 1}
R 87 DL bbox=[73,3974,709,5049] 636x1075 mem=5 {'text': 2, 'image': 2, 'figure_title': 1}
R100 H bbox=[752,4203,2070,5044] 1318x841 mem=4 {'text': 3, 'doc_title': 1}
R106 H bbox=[2114,4209,2753,5535] 639x1326 mem=5 {'doc_title': 1, 'text': 1, 'image': 1, 'figure_title': 1, 'paragraph_title': 1}
R 80 H bbox=[2814,5054,4115,6172] 1301x1118 mem=7 {'text': 4, 'image': 2, 'doc_title': 1}
R115 DL bbox=[94,5097,1161,6624] 1067x1527 mem=5 {'text': 4, 'image': 1}
R107 H bbox=[1199,5102,2071,6685] 872x1583 mem=5 {'text': 3, 'image': 1, 'doc_title': 1}
R 74 F bbox=[658,5350,1139,6624] 481x1274 mem=4 {'text': 4}
R 7 DL bbox=[2114,5559,2754,6684] 640x1125 mem=3 {'text': 1, 'image': 1, 'paragraph_title': 1}
R 90 H bbox=[2814,5760,3431,6635] 617x875 mem=4 {'doc_title': 1, 'text': 3}
R 76 H bbox=[3474,5970,4115,6634] 641x664 mem=5 {'doc_title': 1, 'text': 3, 'image': 1}
>>> image-only orphans REMAINING: []
─ Sakshi rule-split: R12 → 2 bands at rules [4170]
🖼 Orphan photo: R36 → article R87 (an image must belong to an article)
DONE -> output/Sakshi_Jangaon District_20260513_20260610_140735/all_article_crops_review

View File

@ -1,58 +0,0 @@
=== page 1: 19 crops, 16 datelines ===
R 55 H bbox=[2763,1049,4114,2732] 1351x1683 mem=12 {'text': 9, 'image': 1, 'doc_title': 1, 'paragraph_title': 1}
R 52 H bbox=[688,1067,2749,2854] 2061x1787 mem=9 {'doc_title': 1, 'text': 4, 'image': 2, 'paragraph_title': 2}
R 83 H bbox=[92,1079,686,2507] 594x1428 mem=4 {'doc_title': 1, 'text': 1, 'image': 1, 'paragraph_title': 1}
R 94 P bbox=[2113,1941,2755,3257] 642x1316 mem=4 {'paragraph_title': 1, 'text': 3}
R 72 H bbox=[92,2536,685,3404] 593x868 mem=2 {'doc_title': 1, 'text': 1}
R 66 P bbox=[749,2686,1391,3302] 642x616 mem=2 {'paragraph_title': 1, 'text': 1}
R 77 H bbox=[2793,2740,4114,3303] 1321x563 mem=4 {'doc_title': 1, 'text': 1, 'image': 1, 'figure_title': 1}
R 51 P bbox=[1399,2862,2105,3349] 706x487 mem=2 {'paragraph_title': 1, 'text': 1}
R100 H bbox=[2113,3353,4113,4297] 2000x944 mem=7 {'doc_title': 1, 'text': 5, 'image': 1}
R 99 H bbox=[750,3357,2069,4605] 1319x1248 mem=8 {'doc_title': 1, 'text': 5, 'image': 1, 'figure_title': 1}
R 67 H bbox=[92,3432,686,4743] 594x1311 mem=3 {'doc_title': 1, 'text': 1, 'image': 1}
R 50 H bbox=[2112,4357,2752,5581] 640x1224 mem=5 {'text': 3, 'image': 1, 'doc_title': 1}
R 54 H bbox=[2793,4368,4114,6094] 1321x1726 mem=9 {'doc_title': 1, 'text': 6, 'image': 1, 'paragraph_title': 1}
R 78 H bbox=[749,4622,2070,6049] 1321x1427 mem=7 {'doc_title': 1, 'text': 6}
R 9 DL bbox=[92,4771,685,5982] 593x1211 mem=2 {'text': 1, 'paragraph_title': 1}
R 5 DL bbox=[2112,5609,2753,6686] 641x1077 mem=2 {'text': 1, 'paragraph_title': 1}
R 75 H bbox=[91,6012,688,6640] 597x628 mem=2 {'doc_title': 1, 'text': 1}
R 79 P bbox=[772,6082,2049,6637] 1277x555 mem=3 {'text': 2, 'paragraph_title': 1}
R 98 H bbox=[2793,6114,4114,6696] 1321x582 mem=3 {'doc_title': 1, 'text': 2}
>>> image-only orphans REMAINING: []
📐 Sakshi headline SYNTH: R100 doc_title [2126, 3353, 4097, 3452] (un-boxed display headline band, ink=0.35)
📐 Sakshi headline SYNTH: R99 doc_title [763, 3357, 2068, 3452] (un-boxed display headline band, ink=0.30)
📐 Sakshi headline WIDEN: R52 [1182, 1067, 2738, 1327] → [688, 1067, 2738, 1327] (un-boxed kicker ink alongside)
🗞️ Masthead: dropped 5 Sakshi top-band region(s) [59, 62, 63, 64, 71] (above first headline y=1049)
=== page 2: 17 crops, 11 datelines ===
R 82 H bbox=[777,474,2801,2212] 2024x1738 mem=20 {'text': 7, 'image': 8, 'figure_title': 4, 'doc_title': 1}
R127 H bbox=[2755,485,4086,2232] 1331x1747 mem=17 {'text': 8, 'image': 6, 'figure_title': 2, 'doc_title': 1}
R129 P bbox=[95,499,741,2209] 646x1710 mem=6 {'paragraph_title': 1, 'image': 1, 'text': 3, 'figure_title': 1}
R118 H bbox=[2795,2298,4115,2957] 1320x659 mem=5 {'text': 2, 'image': 2, 'doc_title': 1}
R 91 H bbox=[72,2313,707,3101] 635x788 mem=5 {'text': 2, 'image': 1, 'doc_title': 1, 'figure_title': 1}
R 41 H bbox=[753,2316,2753,3600] 2000x1284 mem=11 {'text': 9, 'doc_title': 1, 'image': 1}
R 3 DL bbox=[2761,2958,3467,4049] 706x1091 mem=3 {'text': 1, 'image': 1, 'figure_title': 1}
R 14 DL bbox=[3475,3022,4115,3999] 640x977 mem=4 {'text': 2, 'image': 1, 'paragraph_title': 1}
R113 H bbox=[72,3129,709,4641] 637x1512 mem=5 {'doc_title': 1, 'text': 3, 'image': 1}
R 99 H bbox=[752,3656,2071,4649] 1319x993 mem=5 {'image': 1, 'text': 3, 'doc_title': 1}
R 88 P bbox=[2113,3658,2752,4643] 639x985 mem=4 {'text': 2, 'image': 1, 'paragraph_title': 1}
R 70 H bbox=[2760,4057,4115,5702] 1355x1645 mem=11 {'doc_title': 1, 'text': 9, 'image': 1}
R 93 H bbox=[1216,4710,2752,5939] 1536x1229 mem=10 {'text': 5, 'image': 1, 'doc_title': 1, 'paragraph_title': 2, 'figure_title': 1}
R136 P bbox=[95,4735,1161,5529] 1066x794 mem=3 {'paragraph_title': 1, 'text': 1, 'image': 1}
R 44 F bbox=[650,4979,1128,5185] 478x206 mem=1 {'text': 1}
R 92 F bbox=[653,5252,1127,5744] 474x492 mem=3 {'text': 2, 'paragraph_title': 1}
R111 P bbox=[120,5618,603,6628] 483x1010 mem=3 {'paragraph_title': 1, 'text': 2}
R 98 H bbox=[2798,5710,4115,6696] 1317x986 mem=6 {'doc_title': 1, 'text': 4, 'image': 1}
R 90 F bbox=[685,5924,1099,6145] 414x221 mem=1 {'text': 1}
R 77 H bbox=[1147,5969,2752,6682] 1605x713 mem=4 {'text': 3, 'doc_title': 1}
R110 F bbox=[668,6258,1106,6617] 438x359 mem=1 {'text': 1}
>>> image-only orphans REMAINING: []
─ Sakshi rule-split: R41 → 3 bands at rules [1066, 2252]
─ Sakshi rule-split: R74 → 2 bands at rules [1066]
📐 Sakshi headline WIDEN: R77 [1217, 5969, 2690, 6109] → [1147, 5969, 2690, 6109] (un-boxed kicker ink alongside)
🖼 Orphan photo: R38 → article R127 (an image must belong to an article)
🖼 Orphan photo: R61 → article R82 (an image must belong to an article)
🗞️ Masthead: dropped 4 Sakshi top-band region(s) [68, 71, 84, 104] (above first headline y=499)
DONE -> output/Sakshi_Jangaon_District_20260520_20260609_210104/all_article_crops_review

View File

@ -1,55 +0,0 @@
=== page 1: 16 crops, 16 datelines ===
R 55 H bbox=[2763,1049,4114,2732] 1351x1683 mem=12 {'text': 9, 'image': 1, 'doc_title': 1, 'paragraph_title': 1}
R 52 H bbox=[688,1067,2755,3314] 2067x2247 mem=17 {'text': 9, 'image': 2, 'paragraph_title': 5, 'doc_title': 1}
R 83 H bbox=[92,1079,686,2507] 594x1428 mem=4 {'doc_title': 1, 'text': 1, 'image': 1, 'paragraph_title': 1}
R 72 H bbox=[92,2536,685,3404] 593x868 mem=2 {'doc_title': 1, 'text': 1}
R 77 H bbox=[2793,2740,4114,3303] 1321x563 mem=4 {'doc_title': 1, 'text': 1, 'image': 1, 'figure_title': 1}
R100 H bbox=[2113,3353,4113,4297] 2000x944 mem=7 {'doc_title': 1, 'text': 5, 'image': 1}
R 99 H bbox=[750,3357,2069,4605] 1319x1248 mem=8 {'doc_title': 1, 'text': 5, 'image': 1, 'figure_title': 1}
R 67 H bbox=[92,3432,686,4743] 594x1311 mem=3 {'doc_title': 1, 'text': 1, 'image': 1}
R 50 H bbox=[2112,4357,2752,5581] 640x1224 mem=5 {'text': 3, 'image': 1, 'doc_title': 1}
R 54 H bbox=[2793,4368,4114,6094] 1321x1726 mem=9 {'doc_title': 1, 'text': 6, 'image': 1, 'paragraph_title': 1}
R 78 H bbox=[749,4622,2070,6049] 1321x1427 mem=7 {'doc_title': 1, 'text': 6}
R 9 DL bbox=[92,4771,685,5982] 593x1211 mem=2 {'text': 1, 'paragraph_title': 1}
R 5 DL bbox=[2112,5609,2753,6686] 641x1077 mem=2 {'text': 1, 'paragraph_title': 1}
R 75 H bbox=[91,6012,688,6640] 597x628 mem=2 {'doc_title': 1, 'text': 1}
R 79 P bbox=[772,6082,2049,6637] 1277x555 mem=3 {'text': 2, 'paragraph_title': 1}
R 98 H bbox=[2793,6114,4114,6696] 1321x582 mem=3 {'doc_title': 1, 'text': 2}
>>> image-only orphans REMAINING: []
📐 Sakshi headline SYNTH: R100 doc_title [2126, 3353, 4097, 3452] (un-boxed display headline band, ink=0.35)
📐 Sakshi headline SYNTH: R99 doc_title [763, 3357, 2068, 3452] (un-boxed display headline band, ink=0.30)
📐 Sakshi headline WIDEN: R52 [1182, 1067, 2738, 1327] → [688, 1067, 2738, 1327] (un-boxed kicker ink alongside)
🗞️ Masthead: dropped 5 Sakshi top-band region(s) [59, 62, 63, 64, 71] (above first headline y=1049)
=== page 2: 17 crops, 11 datelines ===
R 82 H bbox=[777,474,2801,2212] 2024x1738 mem=20 {'text': 7, 'image': 8, 'figure_title': 4, 'doc_title': 1}
R127 H bbox=[2755,485,4086,2232] 1331x1747 mem=17 {'text': 8, 'image': 6, 'figure_title': 2, 'doc_title': 1}
R129 P bbox=[95,499,741,2209] 646x1710 mem=6 {'paragraph_title': 1, 'image': 1, 'text': 3, 'figure_title': 1}
R118 H bbox=[2795,2298,4115,2957] 1320x659 mem=5 {'text': 2, 'image': 2, 'doc_title': 1}
R 91 H bbox=[72,2313,707,3101] 635x788 mem=5 {'text': 2, 'image': 1, 'doc_title': 1, 'figure_title': 1}
R 41 H bbox=[753,2316,2753,3600] 2000x1284 mem=11 {'text': 9, 'doc_title': 1, 'image': 1}
R 3 DL bbox=[2761,2958,3467,4049] 706x1091 mem=3 {'text': 1, 'image': 1, 'figure_title': 1}
R 14 DL bbox=[3475,3022,4115,3999] 640x977 mem=4 {'text': 2, 'image': 1, 'paragraph_title': 1}
R113 H bbox=[72,3129,709,4641] 637x1512 mem=5 {'doc_title': 1, 'text': 3, 'image': 1}
R 99 H bbox=[752,3656,2071,4649] 1319x993 mem=5 {'image': 1, 'text': 3, 'doc_title': 1}
R 88 P bbox=[2113,3658,2752,4643] 639x985 mem=4 {'text': 2, 'image': 1, 'paragraph_title': 1}
R 70 H bbox=[2760,4057,4115,5702] 1355x1645 mem=11 {'doc_title': 1, 'text': 9, 'image': 1}
R 93 H bbox=[1216,4710,2752,5939] 1536x1229 mem=10 {'text': 5, 'image': 1, 'doc_title': 1, 'paragraph_title': 2, 'figure_title': 1}
R136 P bbox=[95,4735,1161,5529] 1066x794 mem=3 {'paragraph_title': 1, 'text': 1, 'image': 1}
R 44 F bbox=[650,4979,1128,5185] 478x206 mem=1 {'text': 1}
R 92 F bbox=[653,5252,1127,5744] 474x492 mem=3 {'text': 2, 'paragraph_title': 1}
R111 P bbox=[120,5618,603,6628] 483x1010 mem=3 {'paragraph_title': 1, 'text': 2}
R 98 H bbox=[2798,5710,4115,6696] 1317x986 mem=6 {'doc_title': 1, 'text': 4, 'image': 1}
R 90 F bbox=[685,5924,1099,6145] 414x221 mem=1 {'text': 1}
R 77 H bbox=[1147,5969,2752,6682] 1605x713 mem=4 {'text': 3, 'doc_title': 1}
R110 F bbox=[668,6258,1106,6617] 438x359 mem=1 {'text': 1}
>>> image-only orphans REMAINING: []
─ Sakshi rule-split: R41 → 3 bands at rules [1066, 2252]
─ Sakshi rule-split: R74 → 2 bands at rules [1066]
📐 Sakshi headline WIDEN: R77 [1217, 5969, 2690, 6109] → [1147, 5969, 2690, 6109] (un-boxed kicker ink alongside)
🖼 Orphan photo: R38 → article R127 (an image must belong to an article)
🖼 Orphan photo: R61 → article R82 (an image must belong to an article)
🗞️ Masthead: dropped 4 Sakshi top-band region(s) [68, 71, 84, 104] (above first headline y=499)
DONE -> output/Sakshi_Jangaon_District_20260520_20260609_210104/all_article_crops_review

View File

@ -1,55 +0,0 @@
=== page 1: 16 crops, 16 datelines ===
R 55 H bbox=[2763,1049,4114,2732] 1351x1683 mem=12 {'text': 9, 'image': 1, 'doc_title': 1, 'paragraph_title': 1}
R 52 H bbox=[688,1067,2755,3314] 2067x2247 mem=17 {'text': 9, 'image': 2, 'paragraph_title': 5, 'doc_title': 1}
R 83 H bbox=[92,1079,686,2507] 594x1428 mem=4 {'doc_title': 1, 'text': 1, 'image': 1, 'paragraph_title': 1}
R 72 H bbox=[92,2536,685,3404] 593x868 mem=2 {'doc_title': 1, 'text': 1}
R 77 H bbox=[2793,2740,4114,3303] 1321x563 mem=4 {'doc_title': 1, 'text': 1, 'image': 1, 'figure_title': 1}
R100 H bbox=[2113,3353,4113,4297] 2000x944 mem=7 {'doc_title': 1, 'text': 5, 'image': 1}
R 99 H bbox=[750,3357,2069,4605] 1319x1248 mem=8 {'doc_title': 1, 'text': 5, 'image': 1, 'figure_title': 1}
R 67 H bbox=[92,3432,686,4743] 594x1311 mem=3 {'doc_title': 1, 'text': 1, 'image': 1}
R 50 H bbox=[2112,4357,2752,5581] 640x1224 mem=5 {'text': 3, 'image': 1, 'doc_title': 1}
R 54 H bbox=[2793,4368,4114,6094] 1321x1726 mem=9 {'doc_title': 1, 'text': 6, 'image': 1, 'paragraph_title': 1}
R 78 H bbox=[749,4622,2070,6049] 1321x1427 mem=7 {'doc_title': 1, 'text': 6}
R 9 DL bbox=[92,4771,685,5982] 593x1211 mem=2 {'text': 1, 'paragraph_title': 1}
R 5 DL bbox=[2112,5609,2753,6686] 641x1077 mem=2 {'text': 1, 'paragraph_title': 1}
R 75 H bbox=[91,6012,688,6640] 597x628 mem=2 {'doc_title': 1, 'text': 1}
R 79 P bbox=[772,6082,2049,6637] 1277x555 mem=3 {'text': 2, 'paragraph_title': 1}
R 98 H bbox=[2793,6114,4114,6696] 1321x582 mem=3 {'doc_title': 1, 'text': 2}
>>> image-only orphans REMAINING: []
📐 Sakshi headline SYNTH: R100 doc_title [2126, 3353, 4097, 3452] (un-boxed display headline band, ink=0.35)
📐 Sakshi headline SYNTH: R99 doc_title [763, 3357, 2068, 3452] (un-boxed display headline band, ink=0.30)
📐 Sakshi headline WIDEN: R52 [1182, 1067, 2738, 1327] → [688, 1067, 2738, 1327] (un-boxed kicker ink alongside)
🗞️ Masthead: dropped 5 Sakshi top-band region(s) [59, 62, 63, 64, 71] (above first headline y=1049)
=== page 2: 17 crops, 11 datelines ===
R 82 H bbox=[777,474,2801,2212] 2024x1738 mem=20 {'text': 7, 'image': 8, 'figure_title': 4, 'doc_title': 1}
R127 H bbox=[2755,485,4086,2232] 1331x1747 mem=17 {'text': 8, 'image': 6, 'figure_title': 2, 'doc_title': 1}
R129 P bbox=[95,499,741,2209] 646x1710 mem=6 {'paragraph_title': 1, 'image': 1, 'text': 3, 'figure_title': 1}
R118 H bbox=[2795,2298,4115,2957] 1320x659 mem=5 {'text': 2, 'image': 2, 'doc_title': 1}
R 91 H bbox=[72,2313,707,3101] 635x788 mem=5 {'text': 2, 'image': 1, 'doc_title': 1, 'figure_title': 1}
R 41 H bbox=[753,2316,2753,3600] 2000x1284 mem=11 {'text': 9, 'doc_title': 1, 'image': 1}
R 3 DL bbox=[2761,2958,3467,4049] 706x1091 mem=3 {'text': 1, 'image': 1, 'figure_title': 1}
R 14 DL bbox=[3475,3022,4115,3999] 640x977 mem=4 {'text': 2, 'image': 1, 'paragraph_title': 1}
R113 H bbox=[72,3129,709,4641] 637x1512 mem=5 {'doc_title': 1, 'text': 3, 'image': 1}
R 99 H bbox=[752,3656,2071,4649] 1319x993 mem=5 {'image': 1, 'text': 3, 'doc_title': 1}
R 88 P bbox=[2113,3658,2752,4643] 639x985 mem=4 {'text': 2, 'image': 1, 'paragraph_title': 1}
R 70 H bbox=[2760,4057,4115,5702] 1355x1645 mem=11 {'doc_title': 1, 'text': 9, 'image': 1}
R 93 H bbox=[1216,4710,2752,5939] 1536x1229 mem=10 {'text': 5, 'image': 1, 'doc_title': 1, 'paragraph_title': 2, 'figure_title': 1}
R136 P bbox=[95,4735,1161,5529] 1066x794 mem=3 {'paragraph_title': 1, 'text': 1, 'image': 1}
R 44 F bbox=[650,4979,1128,5185] 478x206 mem=1 {'text': 1}
R 92 F bbox=[653,5252,1127,5744] 474x492 mem=3 {'text': 2, 'paragraph_title': 1}
R111 P bbox=[120,5618,603,6628] 483x1010 mem=3 {'paragraph_title': 1, 'text': 2}
R 98 H bbox=[2798,5710,4115,6696] 1317x986 mem=6 {'doc_title': 1, 'text': 4, 'image': 1}
R 90 F bbox=[685,5924,1099,6145] 414x221 mem=1 {'text': 1}
R 77 H bbox=[1147,5969,2752,6682] 1605x713 mem=4 {'text': 3, 'doc_title': 1}
R110 F bbox=[668,6258,1106,6617] 438x359 mem=1 {'text': 1}
>>> image-only orphans REMAINING: []
─ Sakshi rule-split: R41 → 3 bands at rules [1066, 2252]
─ Sakshi rule-split: R74 → 2 bands at rules [1066]
📐 Sakshi headline WIDEN: R77 [1217, 5969, 2690, 6109] → [1147, 5969, 2690, 6109] (un-boxed kicker ink alongside)
🖼 Orphan photo: R38 → article R127 (an image must belong to an article)
🖼 Orphan photo: R61 → article R82 (an image must belong to an article)
🗞️ Masthead: dropped 4 Sakshi top-band region(s) [68, 71, 84, 104] (above first headline y=499)
DONE -> output/Sakshi_Jangaon_District_20260520_20260609_210104/all_article_crops_review

View File

@ -1,55 +0,0 @@
=== page 1: 16 crops, 16 datelines ===
R 55 H bbox=[2763,1049,4114,2732] 1351x1683 mem=12 {'text': 9, 'image': 1, 'doc_title': 1, 'paragraph_title': 1}
R 52 H bbox=[688,1067,2755,3314] 2067x2247 mem=17 {'text': 9, 'image': 2, 'paragraph_title': 5, 'doc_title': 1}
R 83 H bbox=[92,1079,686,2507] 594x1428 mem=4 {'doc_title': 1, 'text': 1, 'image': 1, 'paragraph_title': 1}
R 72 H bbox=[92,2536,685,3404] 593x868 mem=2 {'doc_title': 1, 'text': 1}
R 77 H bbox=[2793,2740,4114,3303] 1321x563 mem=4 {'doc_title': 1, 'text': 1, 'image': 1, 'figure_title': 1}
R100 H bbox=[2113,3353,4113,4297] 2000x944 mem=7 {'doc_title': 1, 'text': 5, 'image': 1}
R 99 H bbox=[750,3357,2069,4605] 1319x1248 mem=8 {'doc_title': 1, 'text': 5, 'image': 1, 'figure_title': 1}
R 67 H bbox=[92,3432,686,4743] 594x1311 mem=3 {'doc_title': 1, 'text': 1, 'image': 1}
R 50 H bbox=[2112,4357,2752,5581] 640x1224 mem=5 {'text': 3, 'image': 1, 'doc_title': 1}
R 54 H bbox=[2793,4368,4114,6094] 1321x1726 mem=9 {'doc_title': 1, 'text': 6, 'image': 1, 'paragraph_title': 1}
R 78 H bbox=[749,4622,2070,6049] 1321x1427 mem=7 {'doc_title': 1, 'text': 6}
R 9 DL bbox=[92,4771,685,5982] 593x1211 mem=2 {'text': 1, 'paragraph_title': 1}
R 5 DL bbox=[2112,5609,2753,6686] 641x1077 mem=2 {'text': 1, 'paragraph_title': 1}
R 75 H bbox=[91,6012,688,6640] 597x628 mem=2 {'doc_title': 1, 'text': 1}
R 79 P bbox=[772,6082,2049,6637] 1277x555 mem=3 {'text': 2, 'paragraph_title': 1}
R 98 H bbox=[2793,6114,4114,6696] 1321x582 mem=3 {'doc_title': 1, 'text': 2}
>>> image-only orphans REMAINING: []
📐 Sakshi headline SYNTH: R100 doc_title [2126, 3353, 4097, 3452] (un-boxed display headline band, ink=0.35)
📐 Sakshi headline SYNTH: R99 doc_title [763, 3357, 2068, 3452] (un-boxed display headline band, ink=0.30)
📐 Sakshi headline WIDEN: R52 [1182, 1067, 2738, 1327] → [688, 1067, 2738, 1327] (un-boxed kicker ink alongside)
🗞️ Masthead: dropped 5 Sakshi top-band region(s) [59, 62, 63, 64, 71] (above first headline y=1049)
=== page 2: 17 crops, 11 datelines ===
R 82 H bbox=[777,474,2801,2212] 2024x1738 mem=20 {'text': 7, 'image': 8, 'figure_title': 4, 'doc_title': 1}
R127 H bbox=[2755,485,4086,2232] 1331x1747 mem=17 {'text': 8, 'image': 6, 'figure_title': 2, 'doc_title': 1}
R129 P bbox=[95,499,741,2209] 646x1710 mem=6 {'paragraph_title': 1, 'image': 1, 'text': 3, 'figure_title': 1}
R118 H bbox=[2795,2298,4115,2957] 1320x659 mem=5 {'text': 2, 'image': 2, 'doc_title': 1}
R 91 H bbox=[72,2313,707,3101] 635x788 mem=5 {'text': 2, 'image': 1, 'doc_title': 1, 'figure_title': 1}
R 41 H bbox=[753,2316,2753,3600] 2000x1284 mem=11 {'text': 9, 'doc_title': 1, 'image': 1}
R 3 DL bbox=[2761,2958,3467,4049] 706x1091 mem=3 {'text': 1, 'image': 1, 'figure_title': 1}
R 14 DL bbox=[3475,3022,4115,3999] 640x977 mem=4 {'text': 2, 'image': 1, 'paragraph_title': 1}
R113 H bbox=[72,3129,709,4641] 637x1512 mem=5 {'doc_title': 1, 'text': 3, 'image': 1}
R 99 H bbox=[752,3656,2071,4649] 1319x993 mem=5 {'image': 1, 'text': 3, 'doc_title': 1}
R 88 P bbox=[2113,3658,2752,4643] 639x985 mem=4 {'text': 2, 'image': 1, 'paragraph_title': 1}
R 70 H bbox=[2760,4057,4115,5702] 1355x1645 mem=11 {'doc_title': 1, 'text': 9, 'image': 1}
R 93 H bbox=[1216,4710,2752,5939] 1536x1229 mem=10 {'text': 5, 'image': 1, 'doc_title': 1, 'paragraph_title': 2, 'figure_title': 1}
R136 P bbox=[95,4735,1161,5529] 1066x794 mem=3 {'paragraph_title': 1, 'text': 1, 'image': 1}
R 44 F bbox=[650,4979,1128,5185] 478x206 mem=1 {'text': 1}
R 92 F bbox=[653,5252,1127,5744] 474x492 mem=3 {'text': 2, 'paragraph_title': 1}
R111 P bbox=[120,5618,603,6628] 483x1010 mem=3 {'paragraph_title': 1, 'text': 2}
R 98 H bbox=[2798,5710,4115,6696] 1317x986 mem=6 {'doc_title': 1, 'text': 4, 'image': 1}
R 90 F bbox=[685,5924,1099,6145] 414x221 mem=1 {'text': 1}
R 77 H bbox=[1147,5969,2752,6682] 1605x713 mem=4 {'text': 3, 'doc_title': 1}
R110 F bbox=[668,6258,1106,6617] 438x359 mem=1 {'text': 1}
>>> image-only orphans REMAINING: []
─ Sakshi rule-split: R41 → 3 bands at rules [1066, 2252]
─ Sakshi rule-split: R74 → 2 bands at rules [1066]
📐 Sakshi headline WIDEN: R77 [1217, 5969, 2690, 6109] → [1147, 5969, 2690, 6109] (un-boxed kicker ink alongside)
🖼 Orphan photo: R38 → article R127 (an image must belong to an article)
🖼 Orphan photo: R61 → article R82 (an image must belong to an article)
🗞️ Masthead: dropped 4 Sakshi top-band region(s) [68, 71, 84, 104] (above first headline y=499)
DONE -> output/Sakshi_Jangaon_District_20260520_20260609_210104/all_article_crops_review

View File

@ -1,50 +0,0 @@
"""Sandbox simulation of the Sakshi Jangaon page-1/2 crop run.
Telugu tesseract is unavailable here, so dateline starts are INJECTED with the
exact anchor set the real 20260609_210104 run found (DL anchors from the saved
crop filenames). Usage: python3 _sim71.py <tag>
Writes block table to stdout and crops to output/.../_sim_crops_<tag>/."""
import sys, types
sys.modules.setdefault("fitz", types.ModuleType("fitz"))
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
TAG = sys.argv[1] if len(sys.argv) > 1 else "base"
RUN = Path("output/Sakshi_Jangaon_District_20260520_20260609_210104"); D = RUN / "pages"
OUT = RUN / f"_sim_crops_{TAG}"; P = "sakshi"
DL_IDS = {1: [71, 11, 4, 3, 9, 5], 2: []} # real run's headline-less datelines
if OUT.exists(): shutil.rmtree(OUT)
for pg in (1, 2):
png = str(D / f"page_{pg:03d}.png")
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, P, pg, png)
regs = se.drop_classifieds_regions(regs, png)
regs = se.tag_legal_notices(regs, png)
regs = se.promote_paragraph_titles(regs, png, P)
regs = se.mark_bullet_titles(regs, png)
rm = {r["id"]: r for r in regs}
ds = [{"region_id": i, "dateline": "sim:", "bbox": rm[i]["bbox"],
"headline_region": None} for i in DL_IDS[pg] if i in rm]
bars = separator_barriers(png, regs)
blocks = se.cluster_all_article_blocks(regs, ds, sep_lines=bars)
n = se.crop_all_article_blocks(png, regs, str(OUT), pg,
dateline_starts=ds, sep_lines=bars)
print(f"=== page {pg}: {n} crops, {len(ds)} injected datelines ===")
for b in sorted(blocks, key=lambda b: (b["bbox"][1], b["bbox"][0])):
x1, y1, x2, y2 = b["bbox"]
types = {}
for m in b["members"]:
t = rm.get(m, {}).get("type", "?"); types[t] = types.get(t, 0) + 1
print(f" R{b['anchor_id']:>3} {b['kind']} bbox=[{x1},{y1},{x2},{y2}] "
f"{x2-x1}x{y2-y1} mem={len(b['members'])} {types}")
for l in buf.getvalue().splitlines():
if "Masthead" in l: print(" ", l.strip())
print("DONE ->", OUT)

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 218 KiB

View File

@ -1,18 +0,0 @@
ADEA ASEXE shotloo Sr crsrAs
Boas dof datwera, Ads Soseor
weak? Hiirtht dod Siro. Kew0e vOt
BORD arLBSCOS TS SUNG HOTS
SS SHS EH ert. SYS OED HU,
Brag SomoSodS Dweakl SASHyw
TY. 80 OY GSo DHWBwHS S%So Bra
oer BS BP wid Sard dren Sewn
Sndke dSKo Hnowt, & Ysos!
BraS Zodoh soerr Gardsivg
DUS HEH OZ dbx Som Soebrey
Perle SH Spor Sad Seared. ac
GAS SOShowsh dso SO advert
Sto, SEBS SrerS ZokoH Sodh ws
B%o BLISS SS SyPHHS Ser
UPSPAE SOY. wisp Ero HS Koha
SE SK0. Stot dSthen Kar aeh'B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 178 KiB

View File

@ -1,12 +0,0 @@
BS: GSS Sel Ste (ohowS)
Srghoh SES wQos*s eer wpideSo
& NODA. 2025 ws8 LeeS* Snifo Tox
©%8 S0508 ZHf6* ToXoT09 s0A8
SeghoF SQ erp, 90.59 wo Karciws
8008. 20m 72,194 0 LY soshoh
wokofire 408. warshdS(SgE ssp
espe) Soms 2,33,75 Tre, 31.93 wdor
608. vert & 3018 5 d45* HOR ay
Segboh SOB 3.214 Sow wonsen
weberthen BDar%.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 KiB

View File

@ -1,18 +0,0 @@
BPSASOU: DeogS adFgroo wdhen L608
woxso maaan. oY SAijo mddos
Dio AGSL0B. wd Gesey wwe od:
BOE nO AE SHE wSsr¥o ¥Oy0N0
&. SiSHoE NDS Gadag we nod
CRE AHIYHasryon. wond Neds
PH SrSo nddo woo SASS ors
Gets. OY aro{go SpSaras Higher, OF
ROARS, DAS PASS, Rrcsorer Bo S*ar
doS HS Sy b3de Se, Smaysd
aPOE URES DS WES BdaryWS SEyhe
S850 wdgsore Boorres Ga GE & Hearrs
RS Yond OWGE doryim Sod. oHo8
wont DeiegS Soxseo ae ads, bf es
8, éé a ALa6, dé 25K4495 aod
Bo Exp 0% J actyso Sodd davrd) s08.
BaSSoo8 nado BE 4408. 3&% &%7.0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 185 KiB

View File

@ -1,18 +0,0 @@
ADEA ASEXE shotloo Sr crsrAs
Boas dof datwera, Ads Soseor
weak? Hiirtht dod Siro. Kew0e vOt
BORD arLBSCOS TS SUNG HOTS
SS SHS EH ert. SYS OED HU,
Brag SomoSodS Dweakl SASHyw
TY. 80 OY GSo DHWBwHS S%So Bra
oer BS BP wid Sard dren Sewn
Sndke dSKo Hnowt, & Ysos!
BraS Zodoh soerr Gardsivg
DUS HEH OZ dbx Som Soebrey
Perle SH Spor Sad Seared. ac
GAS SOShowsh dso SO advert
Sto, SEBS SrerS ZokoH Sodh ws
B%o BLISS SS SyPHHS Ser
UPSPAE SOY. wisp Ero HS Koha
SE SK0. Stot dSthen Kar aeh'B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 178 KiB

View File

@ -1,19 +0,0 @@
Sorisarote: SONS Srsowird dir
wdho OY Siro Sho vbsrthen Go
wy GS ONSey BOB. donBI*G
oped wostren adie Stgods
DRaho BORod. ak DoxRebo sod by
G0dS GSS FONE DoF, HAtyeo Dory»,
ProreosD Aor BOAS Swydrcen,
RES BL FORH, Divwr pasos aided
SEfoh wOwrcre Berk Ago dasep
Seirardo. 180 Sars! sorgsties wxosoe
©, BRAS Sbxfeo Ntglrodocss Bots
BrHoxood SSarigen Syoxsew BOLO
8. wr Goss armen Sorl¥arwo &
Ahoo AKowo Sk O50 waisr¥o 6%)
ey BSrardo. Bots 2S sossoWo 5
Kotor PSE darosoiiyee Seord¥od. Sao
oO S8orsed woerss 180 See wh
DO dxoen Grd JasD) dotwod.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 186 KiB

Some files were not shown because too many files have changed in this diff Show More