youssefreda9 commited on
Commit
524d4e0
·
1 Parent(s): 5e42d03

Critical: Isolate grammar rules in try/except so regex fallback ALWAYS runs

Browse files

The camel-tools dependent rules (SV agreement, nasb, gender) were crashing
inside process() and the exception propagated up, causing the regex-based
fallback rules (preposition case, nasb regex, five nouns) to NEVER execute.

Now each rule runs independently - if one fails, the rest still apply.

Files changed (1) hide show
  1. src/nlp/grammar/grammar_rules.py +18 -7
src/nlp/grammar/grammar_rules.py CHANGED
@@ -365,13 +365,24 @@ class ArabicGrammarGuard:
365
  def process(self, original_text, generated_text):
366
  """Apply all grammar rules to model output."""
367
  text = self.preserve_numbers(original_text, generated_text)
368
- text = self.fix_number_and_gender_agreement(text)
369
- text = self.smart_asmaa_khamsa_fix(text)
370
- text = self.fix_verbs_nasb_and_jazm(text)
371
- text = self.fix_gender_agreement(text)
372
- text = self.fix_prepositions_advanced(text)
373
- text = self.fix_subject_verb_agreement(text) # Fix G1
374
- text = self.regex_rules_fallback(text)
 
 
 
 
 
 
 
 
 
 
 
375
  text = re.sub(r'\s+', ' ', text).strip()
376
  return text
377
 
 
365
  def process(self, original_text, generated_text):
366
  """Apply all grammar rules to model output."""
367
  text = self.preserve_numbers(original_text, generated_text)
368
+
369
+ # Each rule is wrapped in try/except so that if camel-tools
370
+ # functions fail, the regex-based rules still execute.
371
+ for rule_name, rule_fn in [
372
+ ('fix_number_and_gender_agreement', self.fix_number_and_gender_agreement),
373
+ ('smart_asmaa_khamsa_fix', self.smart_asmaa_khamsa_fix),
374
+ ('fix_verbs_nasb_and_jazm', self.fix_verbs_nasb_and_jazm),
375
+ ('fix_gender_agreement', self.fix_gender_agreement),
376
+ ('fix_prepositions_advanced', self.fix_prepositions_advanced),
377
+ ('fix_subject_verb_agreement', self.fix_subject_verb_agreement),
378
+ ('regex_rules_fallback', self.regex_rules_fallback),
379
+ ]:
380
+ try:
381
+ text = rule_fn(text)
382
+ except Exception as e:
383
+ logger.warning(f"[GRAMMAR-RULES] {rule_name} failed: {e}")
384
+ # Continue with remaining rules
385
+
386
  text = re.sub(r'\s+', ' ', text).strip()
387
  return text
388