File size: 4,769 Bytes
e7c1175 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | import os
import sys
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')))
from src.nlp.grammar.grammar_rules import ArabicGrammarGuard
from src.nlp.spelling.araspell_rules import AraSpellPostProcessor
def process_text(text, grammar, spell):
# Pipeline simulation
text = grammar.smart_asmaa_khamsa_fix(text)
text = grammar.fix_subject_verb_agreement(text)
text = grammar.fix_gender_agreement(text)
text = grammar.fix_prepositions_advanced(text)
text = grammar.fix_initial_hamza(text)
text = grammar.fix_conditional_sentences(text)
text = grammar.fix_verbs_nasb_and_jazm(text)
text = grammar.fix_noun_adjective_agreement_advanced(text)
text = grammar.fix_number_and_gender_agreement(text)
text = grammar.fix_kana_and_inna(text)
text = grammar.regex_rules_fallback(text)
text = grammar.fix_tanween_fathah(text)
text = spell.fix_common_hamza(text)
text = spell.join_fragments(text)
text = spell.fix_hamza_conservative(text)
text = spell.remove_word_repetition_with_wa(text)
text = spell.remove_hallucinations(text)
return text.strip()
def run_tests():
grammar = ArabicGrammarGuard()
spell = AraSpellPostProcessor()
test_cases = [
# 1. Asmaa Khamsa
("رأيت أخاك في السوق.", "رأيت أخاك في السوق."),
("جاء أبوك اليوم.", "جاء أبوك اليوم."),
# 2. Non-human plural
("السيارات تسير بسرعة.", "السيارات تسير بسرعة."),
("المدارس كبيرة.", "المدارس كبيرة."),
# 3. Masc ends with Ta Marbuta
("أسامة بطل شجاع.", "أسامة بطل شجاع."),
("حضر القضاة الكبار.", "حضر القضاة الكبار."),
# 4. Words ending in ون not plural
("قرأت عن قانون جديد.", "قرأت عن قانون جديد."),
("زرعت زيتونًا في الأرض.", "زرعت زيتونًا في الأرض."),
# 5. Inna after Qawl
("قال إنه قادم.", "قال إنه قادم."),
("يقول إنه يعرف الحقيقة.", "يقول إنه يعرف الحقيقة."),
# 6. Ma Naafiya vs Conditional
("ما يذهب محمد إلى المدرسة.", "ما يذهب محمد إلى المدرسة."),
("ما فعلت ذلك.", "ما فعلت ذلك."),
# 7. Lam Al-Ta'leel
("ذهبت لأتعلم.", "ذهبت لأتعلم."),
("جاء ليساعد صديقه.", "جاء ليساعد صديقه."),
# 8. Broken Plural + Adjective
("جاء الرجال الطويلون.", "جاء الرجال الطويلون."),
("رأيت الرجال الأقوياء.", "رأيت الرجال الأقوياء."),
# 9. Defective verbs
("هم رموا الكرة.", "هم رموا الكرة."),
("دعوا الله.", "دعوا الله."),
# 10. Haa Milkiya vs Ta Marbuta
("هذا كتابه.", "هذا كتابه."),
("سمعت صوته.", "سمعت صوته."),
# 11. Merged words
("أحمد درس اليوم.", "أحمد درس اليوم."),
("يوم مشمس جميل.", "يوم مشمس جميل."),
# 12. Imma / Amma
("إما هذا أو ذاك.", "إما هذا أو ذاك."),
("أما بعد، فهذا أمر مهم.", "أما بعد، فهذا أمر مهم."),
# 13. Trailing Hamza
("قرأ الطالب الكتاب.", "قرأ الطالب الكتاب."),
("هذا مبدأ مهم.", "هذا مبدأ مهم."),
# 14. Fake Prepositions
("هذا كتاب منطقي.", "هذا كتاب منطقي."),
("أكلت فيتامينات كثيرة.", "أكلت فيتامينات كثيرة."),
# 15. Conditional In
("سأذهب إن جاء أحمد.", "سأذهب إن جاء أحمد."),
("إن تدرس تنجح.", "إن تدرس تنجح.")
]
print("Running ChatGPT Regression Test Suite...\n")
passed = 0
for idx, (input_text, expected) in enumerate(test_cases, 1):
final_text = process_text(input_text, grammar, spell)
if final_text == expected:
status = "✅ PASS"
passed += 1
else:
status = "❌ FAIL"
print(f"Test {idx}: {status}")
print(f"Input : {input_text}")
print(f"Output : {final_text}")
if final_text != expected:
print(f"Expected: {expected}")
print("-" * 40)
print(f"\nTotal Passed: {passed}/{len(test_cases)}")
if __name__ == '__main__':
run_tests()
|