Download scripts/phi_dogrulama.py from SevdanurGenc/Text-to-SQL: direct link, hf CLI and curl.
- Browser
- Download file 3.59 kB
-
https://huggingface.co/SevdanurGenc/Text-to-SQL/resolve/main/scripts/phi_dogrulama.py
- Command line
-
hf download hf://SevdanurGenc/Text-to-SQL/scripts/phi_dogrulama.py
-
curl -L -o phi_dogrulama.py https://huggingface.co/SevdanurGenc/Text-to-SQL/resolve/main/scripts/phi_dogrulama.py
3.59 kB
| """φ_tr'nin bağımsız doğrulaması: üreteçteki ham sayısal değerler ile ayrıştırılan değerlerin karşılaştırılması. | |
| Referans veritabanı D*, doğru içerik dosyalarındaki Türkçe biçimli metinlerden φ_tr ile kurulur. Bu nedenle φ_tr'deki | |
| bir hata D*'ye de taşınır ve sayı biçimi ablasyonunda görünmez. Bu betik, örnek belge üretecini (aynı tohumla) | |
| bellekte yeniden çalıştırır; tr(), tr_paren() ve pct() biçimlendiricilerine giren HAM değerleri kaydeder ve doğru | |
| içerik dosyalarındaki her sayısal hücre için φ_tr(metin) ile ham değeri karşılaştırır. Belge ve doğru içerik dosyaları | |
| geçici bir klasöre yazılır; proje dosyaları değişmez. | |
| Kullanım: python scripts/phi_dogrulama.py -> outputs/phi_dogrulama.json | |
| """ | |
| from __future__ import annotations | |
| import importlib.util | |
| import json | |
| import sys | |
| import tempfile | |
| from pathlib import Path | |
| ROOT = Path(__file__).resolve().parent.parent | |
| sys.path.insert(0, str(ROOT)) | |
| from t2s.trnum import parse_number # noqa: E402 | |
| def main(): | |
| spec = importlib.util.spec_from_file_location("gen", ROOT / "data" / "generate_samples.py") | |
| gen = importlib.util.module_from_spec(spec) | |
| spec.loader.exec_module(gen) # modül düzeyinde yalnızca yazı tipi kaydı ve rng=Random(2026) çalışır | |
| raw: dict[str, set[float]] = {} | |
| o_tr, o_paren, o_pct = gen.tr, gen.tr_paren, gen.pct | |
| def rec(s, v): | |
| raw.setdefault(s, set()).add(v) | |
| return s | |
| def tr(x, dec=2): | |
| s = o_tr(x, dec) | |
| return rec(s, round(float(x), dec)) if x is not None else s | |
| def tr_paren(x, dec=0): | |
| return rec(o_paren(x, dec), round(float(x), dec)) | |
| def pct(x, dec=1): | |
| return rec(o_pct(x, dec), round(float(x), dec)) | |
| gen.tr, gen.tr_paren, gen.pct = tr, tr_paren, pct | |
| with tempfile.TemporaryDirectory() as tmp: | |
| gen.DOCS, gen.GT = Path(tmp) / "docs", Path(tmp) / "gt" | |
| gen.DOCS.mkdir() | |
| gen.build_pdfs() | |
| gen.build_htmls() | |
| gts = [json.loads(p.read_text(encoding="utf-8")) for p in sorted(gen.GT.glob("*.json"))] | |
| # yeniden üretilen doğru içerik, depodakiyle birebir aynı olmalı (tohum kontrolü) | |
| repo = {p.stem: json.loads(p.read_text(encoding="utf-8")) for p in (ROOT / "data" / "ground_truth").glob("*.json")} | |
| same_seed = all(repo.get(g["tablo_id"], {}).get("govde") == g["govde"] for g in gts) | |
| n = ok = amb = 0 | |
| bad = [] | |
| for g in gts: | |
| for row in g["govde"]: | |
| for cell in row: | |
| if cell not in raw: | |
| continue # sayısal biçimlendiriciden geçmemiş hücre (ad, tarih, yıl başlığı vb.) | |
| vals = raw[cell] | |
| if len(vals) > 1: | |
| amb += 1 | |
| n += 1 | |
| p = parse_number(cell, "tr") | |
| if p.ok and p.value is not None and any(abs(p.value - v) <= 1e-9 * max(1, abs(v)) for v in vals): | |
| ok += 1 | |
| else: | |
| bad.append({"tablo": g["tablo_id"], "hucre": cell, "ham": sorted(vals), "phi_tr": p.value}) | |
| out = {"tohum_ayni": same_seed, "sayisal_hucre": n, "dogru": ok, "hatali": len(bad), | |
| "belirsiz_esleme": amb, "oran": round(100 * ok / n, 2) if n else None, "hatalar": bad[:20]} | |
| (ROOT / "outputs" / "phi_dogrulama.json").write_text(json.dumps(out, ensure_ascii=False, indent=1), encoding="utf-8") | |
| print(json.dumps({k: v for k, v in out.items() if k != "hatalar"}, ensure_ascii=False)) | |
| for b in bad[:10]: | |
| print(" ✗", b) | |
| if __name__ == "__main__": | |
| main() | |