Commit ·
524d4e0
1
Parent(s): 5e42d03
Critical: Isolate grammar rules in try/except so regex fallback ALWAYS runs
Browse filesThe 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.
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 |
-
|
| 369 |
-
|
| 370 |
-
|
| 371 |
-
|
| 372 |
-
|
| 373 |
-
|
| 374 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
|