Download tests/test_engine.py from Alayoob/qari: direct link, hf CLI and curl.
- Browser
- Download file 3.09 kB
-
https://huggingface.co/spaces/Alayoob/qari/resolve/main/tests/test_engine.py
- Command line
-
hf download hf://spaces/Alayoob/qari/tests/test_engine.py
-
curl -L -o test_engine.py https://huggingface.co/spaces/Alayoob/qari/resolve/main/tests/test_engine.py
3.09 kB
| """اختبارات المحرك بسيناريوهات نطق محاكاة.""" | |
| import json, sys, os | |
| sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..")) | |
| from qari.g2p import words_from_text | |
| from qari.mock import synth | |
| from qari.analyze import analyze | |
| TEXT = "عِنْدَ جَدَّتِي قِطَّةٌ بَيْضَاءُ. تَشْرَبُ القِطَّةُ الحَلِيبَ." | |
| def run(script, text=TEXT): | |
| W = words_from_text(text) | |
| probs, V, blank, fs, wav = synth(script) | |
| return W, analyze(W, probs, V, blank, fs, wav) | |
| def phones(text): | |
| return [w.phones for w in words_from_text(text)] | |
| def show(r): | |
| m = r["metrics"] | |
| print(f" دقة الكلمات {m['word_accuracy']}% | الحركات {m['haraka_accuracy']}% | الأصوات {m['phoneme_accuracy']}% | تأتأة/100 مقطع {m['sld_per_100']} | ك/د {m['wcpm']}") | |
| for w in r["words"]: | |
| errs = "; ".join(f"{e['label']}[{e['status']}] {e['detail']}" for e in w["errors"]) | |
| dis = "; ".join(f"{d['label']}: {d['detail']}" for d in w["disfluencies"]) | |
| print(f" {w['text']:<12} {w['status']:<9} سُمع: {w['heard']:<14} {errs} {('| ' + dis) if dis else ''}") | |
| for x in r["extras"]: | |
| print(" + إضافة:", x["heard"]) | |
| P = phones(TEXT) | |
| flat = lambda ws: [p for w in ws for p in w + ["|"]] | |
| cases = {} | |
| # 1) قراءة سليمة مع الوقف على أواخر الكلمات | |
| cases["سليمة (وقف)"] = ["_"] + flat([P[0], P[1], ["q","I","TT","A","h"], ["b","a","y","D","AA","<"], ["t","a","$","r","a","b"], ["<","a","l","q","I","TT","A","h"], ["<","a","l","H","a","l","ii","b"]]) | |
| # 2) أخطاء: ج←ح بثقة، حذف الشدة، ضمة بدل فتحة، ب←ت | |
| cases["أخطاء حروف وتشكيل"] = ["_"] + flat([P[0], ["H","a","d","a","t","ii"], P[2], ["b","u","y","D","AA","<","u"], ["t","a","$","r","a","t","u"], P[5], P[6]]) | |
| # 3) حالة مشكوك فيها: سمع ح بثقة ضعيفة و ج محتملة | |
| cases["حالة تحتاج تأكيد"] = ["_"] + flat([P[0], [("H",0.08,0.55,"j",0.35),"a","dd","a","t","ii"], P[2], P[3], P[4], P[5], P[6]]) | |
| # 4) تأتأة: ب-ب-ب بيضاء، مط السين، تكرار كلمة، انحباس، حشو، وقفة | |
| st = ["_"] + flat([P[0], P[1], P[2]]) | |
| st += ["b","a","|","b","a","|","b","a"] + P[3][2:] + ["|"] # بَ-بَ-بَيضاء | |
| st += ["t","a",("~$",0.8),"r",("_",0.45),"a","b","u","|"] # مط الشين + انحباس داخل تشرب | |
| st += [("a",0.1),("_",0.1),("m",0.3),("_",1.4)] # امم + وقفة | |
| st += P[5] + ["|"] + P[5] + ["|"] # تكرار كلمة القطة | |
| st += ["l","H","a","l","ii","b","a"] | |
| cases["تأتأة"] = st | |
| # 5) كلمة محذوفة | |
| cases["حذف كلمة"] = ["_"] + flat([P[0], P[1], P[3], P[4], P[5], P[6]]) | |
| if __name__ == "__main__": | |
| for name, sc in cases.items(): | |
| print("=" * 10, name) | |
| W, r = run(sc) | |
| show(r) | |
| for d in r["disfluencies"]: | |
| print(" ~", d["label"], "|", d["detail"], "|", d["start"], "-", d["end"]) | |