feat(Day 47c): keyword tuning — 1/16 → 19/19 on natural-language smoke
Browse filesThe classifier requires substring matches with weighted scoring
(1-word=0.6, 2-word=1.0, 3+-word=1.5, threshold≥1.0). Existing
catalog keywords were mostly 2-word legal-jargon phrases that
didn't match how lawyers actually phrase questions. Result: even
well-tested doctrines like chovat_shimoa failed on "פיטרתי בלי שימוע".
Two changes:
1) +71 keyword variants across 19 doctrines:
- 56 natural-language phrasings ("פיצויי פיטורים", "בלי שימוע",
"לא הפריש לפנסיה", "טעות באבחנה")
- 15 ה-prefix variants ("הרשומה הרפואית", "המידע הרפואי",
"התיק הרפואי") for the cases where Hebrew prefix-stripping
in the algorithm was too risky.
2) Reverted attempted algorithm change in _normalize_hebrew.
Tried adding programmatic prefix-stripping (ה/ב/ל/מ/ש/כ/ו from
start of words ≥4 chars) — broke real words starting with those
letters ("שימוע" → "ימוע"). Backed out. Manual keyword variants
are safer. Updated docstring to record the lesson.
Smoke test: 19 natural-language queries (14 labor+health doctrines
covered, 1 contracts sanity, 2 existing chovat_shimoa, 2 OOS).
Result: 19/19 pass. OOS gate (5/5) preserved — no false positives
from prose-style queries against adversarial input.
Catalog after this commit: 38 doctrines, 9 labor, 5 health/medical
(under torts), expanded keyword index ~71 entries.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
@@ -206,7 +206,14 @@
|
|
| 206 |
"שימוע לעובד",
|
| 207 |
"פיטורים ללא שימוע",
|
| 208 |
"פגם בשימוע",
|
| 209 |
-
"פגיעה מהותית בעובד"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 210 |
]
|
| 211 |
},
|
| 212 |
{
|
|
@@ -1019,7 +1026,12 @@
|
|
| 1019 |
"הסכמה מדעת",
|
| 1020 |
"סיכון רפואי",
|
| 1021 |
"טיפול חסר",
|
| 1022 |
-
"אובדן סיכויי החלמה"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1023 |
]
|
| 1024 |
},
|
| 1025 |
{
|
|
@@ -1120,7 +1132,15 @@
|
|
| 1120 |
"שנת ותק",
|
| 1121 |
"התפטרות בדין מפוטר",
|
| 1122 |
"סעיף 14",
|
| 1123 |
-
"שכר קובע"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1124 |
]
|
| 1125 |
},
|
| 1126 |
{
|
|
@@ -1166,7 +1186,11 @@
|
|
| 1166 |
"סחיטה מינית",
|
| 1167 |
"מעשה מגונה",
|
| 1168 |
"התנכלות בעבודה",
|
| 1169 |
-
"יחסי מרות"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1170 |
]
|
| 1171 |
},
|
| 1172 |
{
|
|
@@ -1206,7 +1230,10 @@
|
|
| 1206 |
"פיטורים ללא הודעה",
|
| 1207 |
"תמורת הודעה מוקדמת",
|
| 1208 |
"תקופת הודעה",
|
| 1209 |
-
"30 ימי הודעה"
|
|
|
|
|
|
|
|
|
|
| 1210 |
]
|
| 1211 |
},
|
| 1212 |
{
|
|
@@ -1516,7 +1543,11 @@
|
|
| 1516 |
"פנקס שעות",
|
| 1517 |
"רישום נוכחות",
|
| 1518 |
"תפקיד הנהלה",
|
| 1519 |
-
"תפקיד אמון אישי"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1520 |
]
|
| 1521 |
},
|
| 1522 |
{
|
|
@@ -1558,7 +1589,9 @@
|
|
| 1558 |
"שכר שעתי מינימום",
|
| 1559 |
"חוק שכר מינימום",
|
| 1560 |
"תוספת שכר מינימום",
|
| 1561 |
-
"השלמה לשכר מינימום"
|
|
|
|
|
|
|
| 1562 |
]
|
| 1563 |
},
|
| 1564 |
{
|
|
@@ -1621,7 +1654,14 @@
|
|
| 1621 |
"התעמרות בעבודה",
|
| 1622 |
"מועמדות לעבודה",
|
| 1623 |
"חוק שוויון הזדמנויות",
|
| 1624 |
-
"היפוך נטל הוכחה"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1625 |
]
|
| 1626 |
},
|
| 1627 |
{
|
|
@@ -1670,7 +1710,12 @@
|
|
| 1670 |
"פרילנסר",
|
| 1671 |
"פסול-דין סיווג",
|
| 1672 |
"תאונת עבודה קבלן",
|
| 1673 |
-
"פיצויי פיטורים קבלן"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1674 |
]
|
| 1675 |
},
|
| 1676 |
{
|
|
@@ -1724,7 +1769,10 @@
|
|
| 1724 |
"תביעת פנסיה",
|
| 1725 |
"ביטוח מנהלים",
|
| 1726 |
"קרן פנסיה",
|
| 1727 |
-
"בחירת קרן פנסיה"
|
|
|
|
|
|
|
|
|
|
| 1728 |
]
|
| 1729 |
},
|
| 1730 |
{
|
|
@@ -1778,7 +1826,14 @@
|
|
| 1778 |
"טיפול בלי הסכמה",
|
| 1779 |
"טיפול פולשני",
|
| 1780 |
"סיבוכים רפואיים",
|
| 1781 |
-
"חלופות טיפול"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1782 |
]
|
| 1783 |
},
|
| 1784 |
{
|
|
@@ -1836,7 +1891,13 @@
|
|
| 1836 |
"תלונה על רופא",
|
| 1837 |
"תלונה על בית חולים",
|
| 1838 |
"מידע רפואי",
|
| 1839 |
-
"סודיות רפואית"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1840 |
]
|
| 1841 |
},
|
| 1842 |
{
|
|
@@ -1892,7 +1953,12 @@
|
|
| 1892 |
"הסרת חיסיון",
|
| 1893 |
"ויתור על חיסיון",
|
| 1894 |
"תיק רפואי בתביעה",
|
| 1895 |
-
"חובת דיווח רופא"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1896 |
]
|
| 1897 |
},
|
| 1898 |
{
|
|
@@ -1943,7 +2009,12 @@
|
|
| 1943 |
"סטיה מסטנדרט",
|
| 1944 |
"הרופא הסביר",
|
| 1945 |
"החמרה במחלה",
|
| 1946 |
-
"אבחון מוטעה"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1947 |
]
|
| 1948 |
}
|
| 1949 |
]
|
|
|
|
| 206 |
"שימוע לעובד",
|
| 207 |
"פיטורים ללא שימוע",
|
| 208 |
"פגם בשימוע",
|
| 209 |
+
"פגיעה מהותית בעובד",
|
| 210 |
+
"בלי שימוע",
|
| 211 |
+
"ללא שימוע",
|
| 212 |
+
"פיטורים בלי שימוע",
|
| 213 |
+
"פוטרתי בלי שימוע",
|
| 214 |
+
"לא קיימו שימוע",
|
| 215 |
+
"שימוע פיקטיבי",
|
| 216 |
+
"זכות לשימוע"
|
| 217 |
]
|
| 218 |
},
|
| 219 |
{
|
|
|
|
| 1026 |
"הסכמה מדעת",
|
| 1027 |
"סיכון רפואי",
|
| 1028 |
"טיפול חסר",
|
| 1029 |
+
"אובדן סיכויי החלמה",
|
| 1030 |
+
"תביעת רשלנות רפואית",
|
| 1031 |
+
"טעות רפואית",
|
| 1032 |
+
"נזק רפואי",
|
| 1033 |
+
"טיפול רשלני",
|
| 1034 |
+
"רופא רשלן"
|
| 1035 |
]
|
| 1036 |
},
|
| 1037 |
{
|
|
|
|
| 1132 |
"שנת ותק",
|
| 1133 |
"התפטרות בדין מפוטר",
|
| 1134 |
"סעיף 14",
|
| 1135 |
+
"שכר קובע",
|
| 1136 |
+
"מגיעים פיצויים",
|
| 1137 |
+
"תביעת פיצויי פיטורים",
|
| 1138 |
+
"פיצויים על פיטורים",
|
| 1139 |
+
"חישוב פיצויים",
|
| 1140 |
+
"פיצויים מוגדלים",
|
| 1141 |
+
"חישב פיצויים",
|
| 1142 |
+
"פיצויים בטעות",
|
| 1143 |
+
"חישוב פיצויים שגוי"
|
| 1144 |
]
|
| 1145 |
},
|
| 1146 |
{
|
|
|
|
| 1186 |
"סחיטה מינית",
|
| 1187 |
"מעשה מגונה",
|
| 1188 |
"התנכלות בעבודה",
|
| 1189 |
+
"יחסי מרות",
|
| 1190 |
+
"הטרדה במקום עבודה",
|
| 1191 |
+
"התנכלות מינית",
|
| 1192 |
+
"תלונה על הטרדה",
|
| 1193 |
+
"פיצוי על הטרדה"
|
| 1194 |
]
|
| 1195 |
},
|
| 1196 |
{
|
|
|
|
| 1230 |
"פיטורים ללא הודעה",
|
| 1231 |
"תמורת הודעה מוקדמת",
|
| 1232 |
"תקופת הודעה",
|
| 1233 |
+
"30 ימי הודעה",
|
| 1234 |
+
"בלי הודעה מוקדמת",
|
| 1235 |
+
"ללא הודעה מוקדמת",
|
| 1236 |
+
"פיצוי הודעה מוקדמת"
|
| 1237 |
]
|
| 1238 |
},
|
| 1239 |
{
|
|
|
|
| 1543 |
"פנקס שעות",
|
| 1544 |
"רישום נוכחות",
|
| 1545 |
"תפקיד הנהלה",
|
| 1546 |
+
"תפקיד אמון אישי",
|
| 1547 |
+
"תשלום שעות נוספות",
|
| 1548 |
+
"לא משלם שעות נוספות",
|
| 1549 |
+
"גמול עבור שעות",
|
| 1550 |
+
"תביעה לשעות נוספות"
|
| 1551 |
]
|
| 1552 |
},
|
| 1553 |
{
|
|
|
|
| 1589 |
"שכר שעתי מינימום",
|
| 1590 |
"חוק שכר מינימום",
|
| 1591 |
"תוספת שכר מינימום",
|
| 1592 |
+
"השלמה לשכר מינימום",
|
| 1593 |
+
"פחות משכר מינימום",
|
| 1594 |
+
"תביעה לשכר מינימום"
|
| 1595 |
]
|
| 1596 |
},
|
| 1597 |
{
|
|
|
|
| 1654 |
"התעמרות בעבודה",
|
| 1655 |
"מועמדות לעבודה",
|
| 1656 |
"חוק שוויון הזדמנויות",
|
| 1657 |
+
"היפוך נטל הוכחה",
|
| 1658 |
+
"פיטורים מטעמי אפליה",
|
| 1659 |
+
"אפליה מטעמי הריון",
|
| 1660 |
+
"תביעת אפליה",
|
| 1661 |
+
"בגלל גיל",
|
| 1662 |
+
"בגלל מין",
|
| 1663 |
+
"בגלל הריון",
|
| 1664 |
+
"בגלל מוצא"
|
| 1665 |
]
|
| 1666 |
},
|
| 1667 |
{
|
|
|
|
| 1710 |
"פרילנסר",
|
| 1711 |
"פסול-דין סיווג",
|
| 1712 |
"תאונת עבודה קבלן",
|
| 1713 |
+
"פיצויי פיטורים קבלן",
|
| 1714 |
+
"סיווג כעובד",
|
| 1715 |
+
"סיווג עובד או קבלן",
|
| 1716 |
+
"אני עובד או קבלן",
|
| 1717 |
+
"יחסי עובד מעביד",
|
| 1718 |
+
"תביעת סיווג עובד"
|
| 1719 |
]
|
| 1720 |
},
|
| 1721 |
{
|
|
|
|
| 1769 |
"תביעת פנסיה",
|
| 1770 |
"ביטוח מנהלים",
|
| 1771 |
"קרן פנסיה",
|
| 1772 |
+
"בחירת קרן פנסיה",
|
| 1773 |
+
"לא הפריש לפנסיה",
|
| 1774 |
+
"פיגור בהפרשות",
|
| 1775 |
+
"תביעה לפנסיה"
|
| 1776 |
]
|
| 1777 |
},
|
| 1778 |
{
|
|
|
|
| 1826 |
"טיפול בלי הסכמה",
|
| 1827 |
"טיפול פולשני",
|
| 1828 |
"סיבוכים רפואיים",
|
| 1829 |
+
"חלופות טיפול",
|
| 1830 |
+
"ללא הסכמה מדעת",
|
| 1831 |
+
"לא הסביר סיכונים",
|
| 1832 |
+
"לא הסבירו לי",
|
| 1833 |
+
"טיפול ללא הסכמה",
|
| 1834 |
+
"לא קיבלתי הסבר",
|
| 1835 |
+
"סיכוני הניתוח",
|
| 1836 |
+
"סיבוכים מהטיפול"
|
| 1837 |
]
|
| 1838 |
},
|
| 1839 |
{
|
|
|
|
| 1891 |
"תלונה על רופא",
|
| 1892 |
"תלונה על בית חולים",
|
| 1893 |
"מידע רפואי",
|
| 1894 |
+
"סודיות רפואית",
|
| 1895 |
+
"תיק רפואי",
|
| 1896 |
+
"לקבל את התיק הרפואי",
|
| 1897 |
+
"עיון בתיק רפואי",
|
| 1898 |
+
"הרשומה הרפואית",
|
| 1899 |
+
"התיק הרפואי",
|
| 1900 |
+
"המידע הרפואי"
|
| 1901 |
]
|
| 1902 |
},
|
| 1903 |
{
|
|
|
|
| 1953 |
"הסרת חיסיון",
|
| 1954 |
"ויתור על חיסיון",
|
| 1955 |
"תיק רפואי בתביעה",
|
| 1956 |
+
"חובת דיווח רופא",
|
| 1957 |
+
"חשיפת מידע רפואי",
|
| 1958 |
+
"סודות רפואיים",
|
| 1959 |
+
"חיסיון רופא חולה",
|
| 1960 |
+
"המידע הרפואי",
|
| 1961 |
+
"הסודיות הרפואית"
|
| 1962 |
]
|
| 1963 |
},
|
| 1964 |
{
|
|
|
|
| 2009 |
"סטיה מסטנדרט",
|
| 2010 |
"הרופא הסביר",
|
| 2011 |
"החמרה במחלה",
|
| 2012 |
+
"אבחון מוטעה",
|
| 2013 |
+
"טעות באבחון",
|
| 2014 |
+
"אבחנה מאוחרת",
|
| 2015 |
+
"איחר באבחון",
|
| 2016 |
+
"איחר באבחנה",
|
| 2017 |
+
"איחר לזהות"
|
| 2018 |
]
|
| 2019 |
}
|
| 2020 |
]
|
|
@@ -110,14 +110,14 @@ _STATUTE_PAT = re.compile(
|
|
| 110 |
|
| 111 |
|
| 112 |
def _normalize_hebrew(text: str) -> str:
|
| 113 |
-
"""Normalize
|
| 114 |
-
ה-, ב-, ל-, מ-, ש-, כ- → strip before exact match.
|
| 115 |
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
|
|
|
|
|
|
| 119 |
"""
|
| 120 |
-
# Normalize all whitespace + dashes between words (so 'תום-לב' = 'תום לב')
|
| 121 |
return re.sub(r"[\s\-־]+", " ", text)
|
| 122 |
|
| 123 |
|
|
|
|
| 110 |
|
| 111 |
|
| 112 |
def _normalize_hebrew(text: str) -> str:
|
| 113 |
+
"""Normalize whitespace + dashes between Hebrew words.
|
|
|
|
| 114 |
|
| 115 |
+
Day 47c note: tried to add programmatic prefix-stripping
|
| 116 |
+
(ה/ב/ל/מ/ש/כ/ו from start of words) — broke real words that start
|
| 117 |
+
with those letters legitimately (e.g. "שימוע" → "ימוע"). Backed
|
| 118 |
+
out. Keyword variants are now expanded MANUALLY in doctrines.json
|
| 119 |
+
instead (e.g. both "רשומה רפואית" AND "הרשומה הרפואית" as keywords).
|
| 120 |
"""
|
|
|
|
| 121 |
return re.sub(r"[\s\-־]+", " ", text)
|
| 122 |
|
| 123 |
|