Stoicheia-code / insc /data /build_pap_shards.py
Ericu950's picture
Stoicheia: training and evaluation code
5952424 verified
Raw
History Blame Contribute Delete
1.9 kB
"""Build memmap shards from documentary papyri TRAIN segments (TM digit rule:
3=test / 4=val never enter training data). Same plane format as Stoicheia
shards; tier='iphi' deliberately (interface compat: the finetune's TierSpec
filter and mix keys are reused unchanged), source='ddbdp'.
python insc_data/build_pap_shards.py --out $INS_DATA/shards/pap_punct
"""
from __future__ import annotations
import argparse, json, sys
from pathlib import Path
import numpy as np
import pyarrow as pa
import pyarrow.parquet as pq
sys.path.insert(0, str(Path(__file__).resolve().parent))
from papyri import load
PLANES = ("chars", "boundary", "dia", "cap", "punct")
def main():
ap = argparse.ArgumentParser()
ap.add_argument("--out", required=True)
ap.add_argument("--min-len", type=int, default=32)
a = ap.parse_args()
out = Path(a.out); out.mkdir(parents=True, exist_ok=True)
bufs = {p: [] for p in PLANES}
rows = {"offset": [], "length": [], "tier": [], "clean": [], "source": [], "id": [],
"region_id": [], "century_id": []}
off = 0
for r in load(split="train", min_len=a.min_len):
for p in PLANES:
bufs[p].append(r[p])
rows["offset"].append(off); rows["length"].append(len(r["chars"]))
rows["tier"].append("iphi"); rows["clean"].append(1.0)
rows["source"].append("ddbdp"); rows["id"].append(f"{r['phi_id']}#{r['seg']}")
rows["region_id"].append(r["region_id"]); rows["century_id"].append(r["century_id"])
off += len(r["chars"])
for p in PLANES:
np.concatenate(bufs[p]).tofile(out / f"{p}.bin")
pq.write_table(pa.table(rows), out / "index.parquet")
(out / "stats.json").write_text(json.dumps(dict(records=len(rows["offset"]), letters=off)))
print(f"papyri shards: {len(rows['offset']):,} records, {off/1e6:.1f}M letters -> {out}")
if __name__ == "__main__":
main()