fix(chunker): תיקון זיהוי כותרות טענות הצדדים ביחיד/נקבה + שלוש שכבות הגנה
All checks were successful
G12 Leak-Guard / leak-guard (pull_request) Successful in 4s
Lint — undefined names / undefined-names (pull_request) Successful in 9s

**סיבת-שורש:** רג'קס respondent_claims כיסה רק צורת רבים (המשיבים/המשיבין),
ולא יחיד נקבה (המשיבה) ויחיד זכר (המשיב). הכותרת "טענות המשיבה:" בתיק 8181-21
נבלעה לתוך מקטע ruling → חולצה כהלכה שגויה.

**שלוש שכבות הגנה:**
1. chunker.py — הרחבת SECTION_PATTERNS לכסות יחיד/זכר/נקבה + תגובת/תשובת
2. halacha_extractor.py — עיגון חיובי: drop ל-ruling chunks שלפני legal_analysis
3. halacha_quality.py — FLAG_PARTY_CLAIM: זיהוי שפת-טענות-צד בציטוט התומך

**היקף:** 93 תיקים עם 0 chunks של טענות (כנראה בגלל כותרות ביחיד שלא הוכרו);
628 הלכות מאושרות מתיקים אלה — חלקן עשויות להיות תקינות, יש לעשות re-chunk.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-17 15:12:05 +00:00
parent fa7fe85177
commit 42376db4c5
5 changed files with 275 additions and 5 deletions

View File

@@ -270,3 +270,55 @@ def test_lexical_near_duplicate_band():
assert hq.lexical_near_duplicate(a, b) is True
c = "המועד להגשת ערר על שומה הוא שלושים ימים"
assert hq.lexical_near_duplicate(a, c) is False
# ── party-claim language detector (FLAG_PARTY_CLAIM) ────────────────────────
@pytest.mark.parametrize("quote", [
# Named-party attribution — always party-claim language
"לטענת העורר אין בסיס לחיוב בהיטל",
"לטענת המשיבה יש לדחות את הערר",
"לטענת המשיב לא הייתה כל השבחה",
"לטענת המשיבים ההחלטה תקינה",
"טוענת המשיבה כי אין מקום לפיצוי",
])
def test_detect_party_claim_language_hits(quote):
assert hq.detect_party_claim_language(quote) is not None, (
f"Quote '{quote[:40]}' should trigger party_claim detection"
)
@pytest.mark.parametrize("quote", [
# Court's own reasoning — must NOT trigger the flag
"ועדת הערר קובעת כי ההיתר תואם את התכנית",
"מן הטעמים האמורים, הערר מתקבל",
"לאחר בחינת הטענות אנו סבורים כי יש לדחות",
# Broad passive forms courts also use in their reasoning (excluded from markers)
"נטען כי ההיתר ניתן שלא כדין",
"נטען על ידי העורר כי השומה שגויה",
# The 8181-21 bad halacha quote — no party-claim markers
"גם אם ניתן בעבר פטור לעוררת על בסיס פרשנות הוראות החוק שהשתנתה כיום הרי שיש לפעול בהתאם לפרשנות כיום",
])
def test_detect_party_claim_language_misses(quote):
assert hq.detect_party_claim_language(quote) is None, (
f"Quote '{quote[:40]}' must NOT trigger party_claim detection"
)
def test_party_claim_flag_in_compute_quality_flags():
flags = hq.compute_quality_flags(
"ביטול היתר מחייב בסיס חוקי",
"לטענת העורר ההיתר ניתן שלא כדין ויש לבטלו",
quote_verified=True,
)
assert hq.FLAG_PARTY_CLAIM in flags
def test_court_quote_does_not_trigger_party_claim_flag():
flags = hq.compute_quality_flags(
"ביטול היתר מחייב בסיס חוקי מוצק",
"ועדת הערר קובעת כי ביטול היתר מחייב בסיס חוקי מוצק בדמות פגיעה ממשית באינטרס ציבורי",
quote_verified=True,
rule_type="holding",
)
assert hq.FLAG_PARTY_CLAIM not in flags