#!/usr/bin/env python3 """URGENT — `KasuleTrevor/lg_100hrs` est DANS NOTRE CHAMPION `joint_cont` et declare dans COMPLIANCE.md comme derive de Mozilla Common Voice. Or le MEME auteur publie `Lingala_100hrs`, dont on vient de mesurer qu'il contient 5,4 % de transcriptions du SPLIT TEST de WAXAL. Si lg_100hrs est construit de la meme facon, notre propre systeme serait entraine sur du test. Test : comparer les transcriptions de lg_100hrs aux splits test / train / validation LUGANDA de google/WaxalNLP. """ import glob, os, re os.environ.setdefault("HF_HUB_DISABLE_XET", "1") os.environ.setdefault("HF_HOME", "/scratch/hf_home") import pyarrow.parquet as pq from huggingface_hub import HfApi, hf_hub_download, snapshot_download tok = open(os.path.expanduser("~/.cache/huggingface/token")).read().strip() api = HfApi(token=tok) def norm(s): return " ".join(re.sub(r"[^\w ]", " ", str(s).lower()).split()) def texts(paths, cands=("text", "sentence", "transcription", "transcript")): out = [] for p in paths: names = pq.ParquetFile(p).schema_arrow.names c = next((x for x in cands if x in names), None) if not c: continue out += [norm(v) for v in pq.read_table(p, columns=[c]).column(c).to_pylist() if v] return out print("=== splits LUGANDA de WAXAL ===", flush=True) snapshot_download("google/WaxalNLP", repo_type="dataset", allow_patterns=["data/ASR/lug/lug-test-*.parquet", "data/ASR/lug/lug-validation-*.parquet", "data/ASR/lug/lug-train-00000*.parquet"], local_dir="/scratch/waxlug", token=tok, max_workers=8) ref = {} for split in ("test", "validation", "train"): fs = sorted(glob.glob("/scratch/waxlug/data/ASR/lug/lug-%s-*.parquet" % split)) ref[split] = set(texts(fs)) print(" %-11s %d parquets | %d phrases uniques" % (split, len(fs), len(ref[split])), flush=True) print("\n=== echantillon de lg_100hrs ===", flush=True) fs = [s.rfilename for s in api.dataset_info("KasuleTrevor/lg_100hrs").siblings if s.rfilename.endswith(".parquet")] print(" %d parquets au total" % len(fs), flush=True) sel = fs[:8] paths = [hf_hub_download("KasuleTrevor/lg_100hrs", f, repo_type="dataset", token=tok, local_dir="/scratch/dllg") for f in sel] lg = texts(paths) print(" %d parquets lus | %d lignes" % (len(paths), len(lg)), flush=True) names = pq.ParquetFile(paths[0]).schema_arrow.names print(" colonnes : %s" % names, flush=True) for c in ("audio", "path", "id", "audio_id"): if c in names: try: v = pq.read_table(paths[0], columns=[c]).column(c).to_pylist()[:2] print(" %s -> %s" % (c, str(v)[:160]), flush=True) except Exception: pass print("\n=== VERDICT ===", flush=True) for split in ("test", "validation", "train"): n = sum(1 for t in lg if t in ref[split]) flag = "" if split == "test": flag = " <<< CONTIENT DU TEST -- PROBLEME" if n else " <<< aucune trace de test : OK" print(" recouvrement avec WAXAL lug %-11s : %d/%d (%.1f %%)%s" % (split, n, len(lg), 100 * n / max(len(lg), 1), flag), flush=True) for t in lg[:3]: print(" ex : %s" % t[:110], flush=True) print("LG100_CHECK_DONE", flush=True)