diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 09c4a21e..bc79d249 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -919,5 +919,25 @@ jobs: run: ./scripts/ara/fetch_kaikki.sh - name: Arabic golden harness with two-oracle regression gate run: cargo run --release --bin golden_ara -- data/ara/unimorph.tsv data/ara/kaikki.tsv --check + - name: Cache UniMorph heb + id: unimorph-heb + uses: actions/cache@v5 + with: + path: data/heb/unimorph.tsv + key: unimorph-heb-v1 + - name: Fetch UniMorph heb + if: steps.unimorph-heb.outputs.cache-hit != 'true' + run: ./scripts/heb/fetch_unimorph.sh + - name: Cache kaikki heb + id: kaikki-heb + uses: actions/cache@v5 + with: + path: data/heb/kaikki.tsv + key: kaikki-heb-v1 + - name: Fetch kaikki heb + if: steps.kaikki-heb.outputs.cache-hit != 'true' + run: ./scripts/heb/fetch_kaikki.sh + - name: Hebrew golden harness with two-oracle regression gate + run: cargo run --release --bin golden_heb -- data/heb/unimorph.tsv data/heb/kaikki.tsv --check - name: Reverse-lookup gate (fra, spa, eng; deu needs the kaikki dump) run: cargo run --release --bin reverse_gate -- --check --langs fra,spa,eng diff --git a/Cargo.toml b/Cargo.toml index 43e2fb4b..83789aed 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -64,6 +64,8 @@ include = [ "data/ydd/parts.tsv", "data/ara/parts.tsv", "data/ara/overrides.tsv", + "data/heb/parts.tsv", + "data/heb/overrides.tsv", "data/por/classes.tsv", "data/por/verbs.tsv", "data/ron/classes.tsv", diff --git a/data/heb/overrides.tsv b/data/heb/overrides.tsv new file mode 100644 index 00000000..893f0eeb --- /dev/null +++ b/data/heb/overrides.tsv @@ -0,0 +1,128 @@ +# lemma features form +# Mined weak-root residue: cells the rules do not reach (ה-final +# strong homographs, double-waw ל״ה, פ״נ, and lexical irregulars). +# Regenerate with scripts/heb/mine_overrides.py. +אבד V;1;FUT;SG אבד +אבה V;1;FUT;SG אבה +אהב V;1;FUT;SG אהב +אחז V;1;FUT;SG אוחז +אכל V;1;FUT;SG אוכל +אמר V;1;FUT;SG אומר +אפה V;1;FUT;SG אופה +האט V;FEM;PRS;SG מאטה +הגן V;FEM;PRS;SG מגינה +הוכה V;FEM;PRS;SG מוכית +הוראה V;FEM;PRS;SG מוראית +החל V;FEM;PRS;SG מחילה +היטגן V;1;FUT;SG אטגן +היטהר V;1;FUT;SG אטהר +היטנף V;1;FUT;SG אטנף +הסב V;FEM;PRS;SG מסבה +העז V;FEM;PRS;SG מעזה +הפר V;FEM;PRS;SG מפירה +הצל V;FEM;PRS;SG מצילה +הקל V;FEM;PRS;SG מקילה +הקר V;FEM;PRS;SG מקירה +הרע V;FEM;PRS;SG מריעה +התמהמה V;1;PL;PST התמהמהנו +התמהמה V;1;PST;SG התמהמהתי +התמהמה V;2;FEM;FUT;PL תתמהמהנה +התמהמה V;2;FEM;FUT;SG תתמהמהי +התמהמה V;2;FEM;PL;PST התמהמהתן +התמהמה V;2;FEM;PST;SG התמהמהת +התמהמה V;2;FUT;MASC;PL תתמהמהו +התמהמה V;2;MASC;PL;PST התמהמהתם +התמהמה V;2;MASC;PST;SG התמהמהת +התמהמה V;3;FEM;FUT;PL תתמהמהנה +התמהמה V;3;FEM;PST;SG התמהמהה +התמהמה V;3;FUT;MASC;PL יתמהמהו +התמהמה V;3;PL;PST התמהמהו +התמהמה V;FEM;PL;PRS מתמהמהות +התמהמה V;FEM;PRS;SG מתמהמהת +התמהמה V;MASC;PL;PRS מתמהמהים +חווה V;2;FUT;MASC;PL תחוו +חווה V;3;FUT;MASC;PL יחוו +חווה V;3;PL;PST חוו +חי V;1;PL;PST חיינו +חי V;1;PST;SG חייתי +חי V;2;FEM;PL;PST חייתן +חי V;2;FEM;PST;SG חיית +חי V;2;MASC;PL;PST חייתם +חי V;2;MASC;PST;SG חיית +יכול V;3;FEM;PST;SG יכלה +יכול V;3;PL;PST יכלו +יכול V;FEM;PRS;SG יכולה +כמה V;1;PL;PST כמהנו +כמה V;1;PST;SG כמהתי +כמה V;2;FEM;FUT;PL תכמהנה +כמה V;2;FEM;FUT;SG תכמהי +כמה V;2;FEM;PL;PST כמהתן +כמה V;2;FEM;PST;SG כמהת +כמה V;2;FUT;MASC;PL תכמהו +כמה V;2;MASC;PL;PST כמהתם +כמה V;2;MASC;PST;SG כמהת +כמה V;3;FEM;FUT;PL תכמהנה +כמה V;3;FEM;PST;SG כמהה +כמה V;3;FUT;MASC;PL יכמהו +כמה V;3;PL;PST כמהו +כמה V;FEM;PL;PRS כמהות +כמה V;FEM;PRS;SG כמהה +כמה V;MASC;PL;PRS כמהים +נבל V;2;FEM;FUT;PL תבלנה +נבל V;3;FEM;FUT;PL תבלנה +נגה V;1;PL;PST נגהנו +נגה V;1;PST;SG נגהתי +נגה V;2;FEM;FUT;PL תגהנה +נגה V;2;FEM;FUT;SG תגהי +נגה V;2;FEM;PL;PST נגהתן +נגה V;2;FEM;PST;SG נגהת +נגה V;2;FUT;MASC;PL תגהו +נגה V;2;MASC;PL;PST נגהתם +נגה V;2;MASC;PST;SG נגהת +נגה V;3;FEM;FUT;PL תגהנה +נגה V;3;FEM;PST;SG נגהה +נגה V;3;FUT;MASC;PL יגהו +נגה V;3;PL;PST נגהו +נגה V;FEM;PL;PRS נוגהות +נגה V;FEM;PRS;SG נוגהת +נגה V;MASC;PL;PRS נוגהים +נטל V;2;FEM;FUT;PL תטלנה +נטל V;3;FEM;FUT;PL תטלנה +ניגש V;1;FUT;SG אגש +נכווה V;2;FUT;MASC;PL תיכוו +נכווה V;3;FUT;MASC;PL ייכוו +נכווה V;3;PL;PST נכוו +נכווה V;FEM;PL;PRS נכוות +נמס V;1;PL;PST נמסונו +נמס V;1;PST;SG נמסותי +נמס V;2;FEM;PL;PST נמסותן +נמס V;2;FEM;PST;SG נמסות +נמס V;2;MASC;PL;PST נמסותם +נמס V;2;MASC;PST;SG נמסות +נעם V;FEM;PRS;SG נעימה +נפל V;2;FEM;FUT;PL תיפולנה +נפל V;3;FEM;FUT;PL תיפולנה +נתן V;1;PST;SG נתתי +נתן V;2;FEM;PL;PST נתתן +נתן V;2;FEM;PST;SG נתת +נתן V;2;MASC;PL;PST נתתם +נתן V;2;MASC;PST;SG נתת +קטון V;3;FEM;PST;SG קטנה +קטון V;3;PL;PST קטנו +קטון V;FEM;PRS;SG קטנה +תמה V;1;PL;PST תמהנו +תמה V;1;PST;SG תמהתי +תמה V;2;FEM;FUT;PL תתמהנה +תמה V;2;FEM;FUT;SG תתמהי +תמה V;2;FEM;PL;PST תמהתן +תמה V;2;FEM;PST;SG תמהת +תמה V;2;FUT;MASC;PL תתמהו +תמה V;2;MASC;PL;PST תמהתם +תמה V;2;MASC;PST;SG תמהת +תמה V;3;FEM;FUT;PL תתמהנה +תמה V;3;FEM;PST;SG תמהה +תמה V;3;FUT;MASC;PL יתמהו +תמה V;3;PL;PST תמהו +תמה V;FEM;PL;PRS תמהות +תמה V;FEM;PRS;SG תמהה +תמה V;MASC;PL;PRS תמהים diff --git a/data/heb/parts.tsv b/data/heb/parts.tsv new file mode 100644 index 00000000..84d52c48 --- /dev/null +++ b/data/heb/parts.tsv @@ -0,0 +1,2052 @@ +# lemma past future present infinitive +אבד אבד יאבד אובד לאבוד +אבה אבה יאבה אובה לאבות +אבזר אבזר יאבזר מאבזר - +אבחן אבחן יאבחן מאבחן - +אבטח אבטח יאבטח מאבטח - +אבל אבל יאבל אבל לאבול +אגר אגר יאגור אוגר לאגור +אהב אהב יאהב אוהב לאהוב +אהד אהד יאהד אוהד לאהוד +אהל אהל יאהל אוהל - +אובזר אובזר יאובזר מאובזר - +אובחן אובחן יאובחן מאובחן - +אובטח אובטח יאובטח מאובטח - +אוגד אגד יאגד מאגד - +אוורר אורר יאורר מאורר - +אוזכר אוזכר יאוזכר מאוזכר - +אוחד אוחד יאוחד מאוחד - +אוית אית יאית מאית - +אוכל אוכל יאוכל מאוכל - +אומלל אומלל יאומלל מאומלל - +אומן אומן יאומן מאומן - +אומץ אומץ יאומץ מאומץ - +אונן אונן יאונן מאונן לאונן +אור אור יאור אור - +אורס אורס יאורס מאורס - +אושר אשר יאשר מאשר - +אותר אתר יאתר מאתר - +אותת אותת יאותת מאותת לאותת +אזכר אזכר יאזכר מאזכר - +אזל אזל יאזל אוזל לאזול +אחז אחז יאחז אוחז לאחוז +אחסן אחסן יאחסן מאחסן - +אטלק אטלק יאטלק מאטלק - +אטם אטם יאטם אוטם - +אטר אטר יאטר אוטר - +איבד איבד יאבד מאבד לאבד +איבזר איבזר יאבזר מאבזר לאבזר +איבטח איבטח יאבטח מאבטח לאבטח +אידה אידה יאדה מאדה לאדות +איווה אוה יאוה מאוה - +איזכר איזכר יאזכר מאזכר לאזכר +איזן אזן יאזן מאזן - +איחד איחד יאחד מאחד לאחד +איחל אחל יאחל מאחל - +איחר איחר יאחר מאחר לאחר +איים איים יאיים מאיים לאיים +אייר איר יאיר מאיר - +איית אית יאית מאית - +איכל אכל יאכל מאכל - +איכף אכף יאכף מאכף - +אילם אלם יאלם מאלם - +אילף אילף יאלף מאלף לאלף +אימן אמן יאמן מאמן - +אימץ אימץ יאמץ מאמץ לאמץ +אימת אמת יאמת מאמת - +איפר אפר יאפר מאפר - +אירח ארח יארח מארח - +אירע ארע - - - +אירש ארש יארש מארש - +אישר אישר יאשר מאשר לאשר +איתר אתר יאתר מאתר - +אכזב אכזב יאכזב מאכזב - +אכל אכל יאכל אוכל לאכול +אכלס אכלס יאכלס מאכלס - +אלתר אלתר יאלתר מאלתר - +אמד אמד יאמוד אומד לאמוד +אמלל אמלל יאמלל מאמלל - +אמר אמר יאמר אומר לומר +אנס אנס יאנוס אונס לאנוס +אסף אסף יאסוף אוסף לאסוף +אספן אספן יאספן מאספן - +אסר אסר יאסור אוסר לאסור +אפה אפה יאפה אופה לאפות +אפיין אפין יאפין מאפין - +אפשר אפשר יאפשר מאפשר - +אץ אץ יאוץ אץ לאוץ +אצר אצר יאצר אוצר - +ארב ארב יארוב אורב לארוב +ארג ארג יארג אורג - +ארגן ארגן יארגן מארגן - +ארז ארז יארוז אורז לארוז +ארח ארח יארח אורח לארוח +אשם אשם יאשם אושם - +אשפז אשפז יאשפז מאשפז - +אשרר אשרר יאשרר מאשרר - +אתגר אתגר יאתגר מאתגר - +אתה אתה יאתה אותה - +בא בא יבוא בא לבוא +באש באש יבאש בואש - +בגד בגד יבגוד בוגד לבגוד +בדה בדה יבדה בודה לבדות +בדל בדל יבדל בדל - +בדק בדק יבדוק בודק לבדוק +בהה בהה יבהה בוהה - +בואר באר יבאר מבאר - +בודד בודד יבודד מבודד לבודד +בוזה בזה יבזה מבזה - +בוטא בוטא יבוטא מבוטא - +בוטל בוטל יבוטל מבוטל - +בוית בית יבית מבית - +בוקר בוקר יבוקר מבוקר - +בורך בורך יבורך מבורך - +בוש בוש יבוש בוש לבוש +בז בז יבוז בז לבוז +בזבז בזבז יבזבז מבזבז - +בזה בזה יבזה מבזה - +בחן בחן יבחן בוחן - +בחר בחר יבחר בוחר לבחור +בחש בחש יבחש בוחש - +בטח בטח יבטח בוטח לבטוח +בטל בטל יבטל בטל - +ביאס ביאס יבאס מבאס לבאס +ביאר ביאר יבאר מבאר לבאר +בידח בידח יבדח מבדח לבדח +בידל בידל יבדל מבדל לבדל +ביהל בהל יבהל מבהל - +ביזבז ביזבז יבזבז מבזבז לבזבז +ביזה בזה יבזה מבזה - +ביטא ביטא יבטא מבטא לבטא +ביטל ביטל יבטל מבטל לבטל +ביים בים יבים מבים - +ביית בית יבית מבית - +ביכה ביכה יבכה מבכה לבכות +ביכר ביכר יבכר מבכר לבכר +בילבל בילבל יבלבל מבלבל לבלבל +בילה בילה יבלה מבלה לבלות +בילע בילע יבלע מבלע לבלע +ביסס בסס יבסס מבסס - +ביער בער יבער מבער - +ביצע ביצע יבצע מבצע לבצע +ביקע ביקע יבקע מבקע לבקע +ביקר ביקר יבקר מבקר לבקר +ביקש ביקש יבקש מבקש לבקש +בירך בירך יברך מברך לברך +בישל בישל יבשל מבשל לבשל +בישר בישר יבשר מבשר לבשר +בכה בכה יבכה בוכה לבכות +בלבל בלבל יבלבל מבלבל - +בלה בלה יבלה בלה לבלות +בלט בלט יבלט בולט - +בלל בלל יבלל בולל - +בלם בלם יבלום בולם לבלום +בלע בלע יבלע בולע לבלוע +בן בן יבין בן לבין +בנה בנה יבנה בונה לבנות +בעבע בעבע יבעבע מבעבע - +בעט בעט יבעט בועט לבעוט +בעל בעל יבעל בועל לבעול +בער בער יבער בוער לבעור +בצר בצר יבצר בוצר - +בקבק בקבק יבקבק מבקבק - +בקע בקע יבקע בוקע לבקוע +ברא ברא יברא בורא לברוא +ברבר ברבר יברבר מברבר - +ברח ברח יברח בורח לברוח +ברר ברר יבר בורר - +בתר בתר יבתר בותר - +גאה גאה יגאה גואה - +גאל גאל יגאל גואל לגאול +גבה גבה יגבה גובה - +גבל גבל יגבל גובל - +גבר גבר יגבר גובר לגבור +גדל גדל יגדל גדל לגדול +גדש גדש יגדש גודש - +גווע גוע יגוע גווע - +גויס גיס יגיס מגיס - +גולה גולה יגולה מגולה - +גורש גורש יגורש מגורש - +גז גז יגוז גז לגוז +גזז גזז יגזז גוזז - +גזל גזל יגזל גוזל - +גזר גזר יגזור גוזר לגזור +גז׳דר גז׳דר יגז׳דר מגז׳דר - +גחן גחן יגחן גוחן - +גיבה גיבה יגבה מגבה לגבות +גיגל גגל יגגל מגגל - +גידל גידל יגדל מגדל לגדל +גידף גדף יגדף מגדף - +גיהק גהק יגהק מגהק - +גייס גיס יגיס מגיס - +גייר גיר יגיר מגיר - +גילגל גילגל יגלגל מגלגל לגלגל +גילה גילה יגלה מגלה לגלות +גילח גילח יגלח מגלח לגלח +גילף גלף יגלף מגלף - +גימד גימד יגמד מגמד לגמד +גינה גינה יגנה מגנה לגנות +גינן גנן יגנן מגנן - +גירד גרד יגרד מגרד - +גירה גירה יגרה מגרה לגרות +גירר גרר יגרר מגרר - +גירש גירש יגרש מגרש לגרש +גישר גשר יגשר מגשר - +גישש גשש יגשש מגשש - +גלגל גלגל יגלגל מגלגל - +גלה גלה יגלה גולה לגלות +גלל גלל יגלל גולל - +גלף גלף יגלף גולף - +גלש גלש יגלש גולש - +גמגם גמגם יגמגם מגמגם - +גמל גמל יגמול גומל לגמול +גמר גמר יגמור גומר לגמור +גנב גנב יגנוב גונב לגנוב +גנז גנז יגנוז גונז לגנוז +גנן גנן יגנן גונן - +גר גר יגור גר לגור +גרב גרב יגרוב גורב לגרוב +גרם גרם יגרום גורם לגרום +גרס גרס יגרס גורס - +גרף גרף יגרף גורף - +גרר גרר יגרור גורר לגרור +גשר גשר יגשר גושר - +ג׳ונרט ג׳נרט יג׳נרט מג׳נרט - +דאב דאב ידאב דואב - +דאג דאג ידאג דואג לדאוג +דאה דאה ידאה דואה לדאות +דבלל דבלל ידבלל מדבלל - +דבק דבק ידבק דובק לדבוק +דג דג ידוג דג לדוג +דגדג דגדג ידגדג מדגדג - +דהר דהר ידהר דוהר - +דובר דובר ידובר מדובר - +דוכא דוכא ידוכא מדוכא - +דוכדך דוכדך ידוכדך מדוכדך - +דומה דמה ידמה מדמה - +דחה דחה ידחה דוחה לדחות +דחס דחס ידחס דוחס - +דחף דחף ידחוף דוחף לדחוף +דיבר דיבר ידבר מדבר לדבר +דיגדג דיגדג ידגדג מדגדג לדגדג +דיגל דיגל ידגל מדגל לדגל +דיווח דוח ידוח מדוח - +דיכא דיכא ידכא מדכא לדכא +דיכדך דיכדך ידכדך מדכדך לדכדך +דילל דלל ידלל מדלל - +דימה דמה ידמה מדמה - +דימם דימם ידמם מדמם לדמם +דכדך דכדך ידכדך מדכדך - +דלה דלה ידלה דולה לדלות +דלף דלף ידלף דולף - +דלק דלק ידלק דולק - +דמה דמה ידמה דומה לדמות +דמיין דמיין ידמיין מדמיין - +דמם דמם ידם דומם - +דמע דמע ידמע דומע - +דן דן ידון דן לדון +דעך דעך ידעך דועך - +דפדף דפדף ידפדף מדפדף - +דפס דפס ידפס דופס - +דפק דפק ידפוק דופק לדפוק +דקלם דקלם ידקלם מדקלם - +דקר דקר ידקור דוקר לדקור +דר דר ידור דר לדור +דרדר דרדר ידרדר מדרדר - +דרך דרך ידרוך דורך לדרוך +דרס דרס ידרוס דורס לדרוס +דרש דרש ידרוש דורש לדרוש +דש דש ידוש דש לדוש +דשא דשא ידשא דושא - +האביס האביס יאביס מאביס להאביס +האביר האביר יאביר מאביר - +האדים האדים יאדים מאדים - +האזין האזין יאזין מאזין - +האחיד האחיד יאחיד מאחיד - +האט האט יאט מאט להאט +האיץ האיץ יאיץ מאיץ להאיץ +האיר האיר יאיר מאיר להאיר +האמין האמין יאמין מאמין להאמין +האמיר האמיר יאמיר מאמיר - +האריך האריך יאריך מאריך - +האשים האשים יאשים מאשים - +הבאיש הבאיש יבאיש מבאיש - +הבדיל הבדיל יבדיל מבדיל להבדיל +הבהיר הבהיר יבהיר מבהיר להבהיר +הבטיח הבטיח יבטיח מבטיח להבטיח +הביא הביא יביא מביא להביא +הביט הביט יביט מביט להביט +הביך הביך יביך מביך - +הבין הבין יבין מבין להבין +הביס הביס יביס מביס להביס +הביע הביע יביע מביע - +הבליט הבליט יבליט מבליט - +הבליע הבליע יבליע מבליע להבליע +הבנה הבנה יבנה מבנה - +הבעיר הבעיר יבעיר מבעיר - +הבקיע הבקיע יבקיע מבקיע - +הבריא הבריא יבריא מבריא - +הבריג הבריג יבריג מבריג להבריג +הבריח הבריח יבריח מבריח - +הבריק הבריק יבריק מבריק - +הבשיל הבשיל יבשיל מבשיל - +הגביה הגביה יגביה מגביה - +הגביל הגביל יגביל מגביל להגביל +הגביר הגביר יגביר מגביר להגביר +הגדיל הגדיל יגדיל מגדיל להגדיל +הגדיר הגדיר יגדיר מגדיר - +הגה הגה יהגה הוגה להגות +הגזים הגזים יגזים מגזים להגזים +הגיב הגיב יגיב מגיב להגיב +הגיד הגיד יגיד מגיד להגיד +הגיח הגיח יגיח מגיח - +הגיע הגיע יגיע מגיע להגיע +הגיף הגיף יגיף מגיף - +הגיש הגיש יגיש מגיש - +הגן הגן יגן מגן להגן +הגניב הגניב יגניב מגניב - +הגעיל הגעיל יגעיל מגעיל - +הדאיג הדאיג ידאיג מדאיג להדאיג +הדביק הדביק ידביק מדביק - +הדגים הדגים ידגים מדגים - +הדגיש הדגיש ידגיש מדגיש - +הדהים הדהים ידהים מדהים - +הדחיק הדחיק ידחיק מדחיק - +הדיח הדיח ידיח מדיח - +הדליק הדליק ידליק מדליק להדליק +הדפיס הדפיס ידפיס מדפיס - +הדריך הדריך ידריך מדריך להדריך +הדרים הדרים ידרים מדרים - +הדשיא הדשיא ידשיא מדשיא - +ההסה ההסה יהסה מהסה - +הואיל הואיל יואיל מואיל - +הואץ הואץ יואץ מואץ - +הואר הואר יואר מואר - +הוארך הארך יארך מארך - +הוביל הוביל יוביל מוביל להוביל +הובל הובל יובל מובל - +הובס הובס יובס מובס - +הוברח הברח יברח מברח - +הוגבר הוגבר יוגבר מוגבר - +הוגנב הגנב יגנב מגנב - +הודאג הדאג ידאג מדאג - +הודה הודה יודה מודה להודות +הודיע הודיע יודיע מודיע להודיע +הווריד הוריד יוריד מוריד - +הוזז הוזז יוזז מוזז - +הוזיל הוזיל יוזיל מוזיל - +הוזכר הוזכר יוזכר מוזכר - +הוחלט הוחלט יוחלט מוחלט - +הוטב הוטב יוטב מוטב - +הוכה הוכה יוכה מוכה - +הוכח הוכח יוכח מוכח - +הוכיח הוכיח יוכיח מוכיח להוכיח +הוכן הוכן יוכן מוכן - +הוכנס הוכנס יוכנס מוכנס - +הוכר הוכר יוכר מוכר - +הוכרח הכרח יכרח מכרח - +הוכשר הוכשר יוכשר מוכשר - +הוכתר הכתר יכתר מכתר - +הוליד הוליד יוליד מוליד להוליד +הוליך הוליך יוליך מוליך - +הוסב הוסב יוסב מוסב - +הוסיף הוסיף יוסיף מוסיף להוסיף +הוסע הוסע יוסע מוסע - +הוסף הוסף יוסף מוסף - +הועבר העבר יעבר מעבר - +הועיל הועיל יועיל מועיל - +הופיע הופיע יופיע מופיע להופיע +הופל הופל יופל מופל - +הופשט הופשט יופשט מופשט - +הופתע הפתע יפתע מפתע - +הוצא הוצא יוצא מוצא - +הוציא הוציא יוציא מוציא להוציא +הוצל הוצל יוצל מוצל - +הוצע הוצע יוצע מוצע - +הוקיע הוקיע יוקיע מוקיע - +הוקלט הקלט יקלט מקלט - +הוקם הוקם יוקם מוקם - +הוקף הוקף יוקף מוקף - +הוקשח הקשח יקשח מקשח - +הוראה הוראה יוראה מוראה - +הורגש הורגש יורגש מורגש - +הורד הורד יורד מורד - +הורה הורה יורה מורה להורות +הוריד הוריד יוריד מוריד להוריד +הוריק הוריק יוריק מוריק - +הוריש הוריש יוריש מוריש להוריש +הורעל הרעל ירעל מרעל - +הורשע הורשע יורשע מורשע - +הושב הושב יושב מושב - +הושיב הושיב יושיב מושיב להושיב +הושיע הושיע יושיע מושיע להושיע +הושלט הושלט יושלט מושלט - +הושלם השלם ישלם משלם - +הושעה השעה ישעה משעה - +הושפע השפע ישפע משפע - +הושתק הושתק יושתק מושתק - +הותיר הותיר יותיר מותיר להותיר +הותפל הותפל יותפל מותפל - +הותקן הותקן יותקן מותקן - +הותקף הותקף יותקף מותקף - +הותש התש יתש מתש - +הזדהה הזדהה יזדהה מזדהה - +הזדיין הזדין יזדין מזדין - +הזדעזע הזדעזע יזדעזע מזדעזע להזדעזע +הזדקן הזדקן יזדקן מזדקן להזדקן +הזדקף הזדקף יזדקף מזדקף - +הזדקק הזדקק יזדקק מזדקק - +הזדרז הזדרז יזדרז מזדרז להזדרז +הזה הזה יהזה הוזה להזות +הזהיר הזהיר יזהיר מזהיר - +הזיז הזיז יזיז מזיז להזיז +הזיע הזיע יזיע מזיע להזיע +הזיק הזיק יזיק מזיק להזיק +הזכיר הזכיר יזכיר מזכיר להזכיר +הזליף הזליף יזליף מזליף - +הזמין הזמין יזמין מזמין להזמין +הזניח הזניח יזניח מזניח - +הזריק הזריק יזריק מזריק - +החביא החביא יחביא מחביא - +החדיר החדיר יחדיר מחדיר - +החווה החוה יחוה מחוה - +החזיק החזיק יחזיק מחזיק - +החזיר החזיר יחזיר מחזיר להחזיר +החטיא החטיא יחטיא מחטיא - +החיה החיה יחיה מחיה - +החיל החיל יחיל מחיל להחיל +החכים החכים יחכים מחכים להחכים +החל החל יחל מחל להחל +החליד החליד יחליד מחליד - +החליט החליט יחליט מחליט להחליט +החליף החליף יחליף מחליף - +החליק החליק יחליק מחליק להחליק +החמיא החמיא יחמיא מחמיא - +החמיץ החמיץ יחמיץ מחמיץ להחמיץ +החנה החנה יחנה מחנה - +החרים החרים יחרים מחרים - +החשיך החשיך יחשיך מחשיך - +הטביע הטביע יטביע מטביע להטביע +הטה הטה יטה מטה להטות +הטהר הטהר יטהר מטהר - +הטיב הטיב יטיב מטיב להטיב +הטיל הטיל יטיל מטיל - +הטיס הטיס יטיס מטיס - +הטיף הטיף יטיף מטיף - +הטמין הטמין יטמין מטמין - +הטעה הטעה יטעה מטעה - +הטעים הטעים יטעים מטעים - +היגר הגר יהגר מהגר - +הידק הדק יהדק מהדק - +היה היה יהיה הווה להיות +היווה הוה יהוה מהוה - +היוון הון יהון מהון - +היטגן היטגן ייטגן מיטגן להיטגן +היטהר היטהר ייטהר מיטהר להיטהר +היטיב היטיב ייטיב מיטיב להיטיב +היטנף היטנף ייטנף מיטנף להיטנף +הילל הילל יהלל מהלל להלל +הימהם הימהם יהמהם מהמהם להמהם +הימין הימין יימין מימין להימין +הימם המם יהמם מהמם - +הימר המר יהמר מהמר - +הימשה המשה ימשה ממשה - +היניק היניק ייניק מיניק להיניק +היסס הסס יהסס מהסס - +הירס הרס יהרס מהרס - +הכאיב הכאיב יכאיב מכאיב - +הכביד הכביד יכביד מכביד - +הכה הכה יכה מכה להכות +הכחיד הכחיד יכחיד מכחיד - +הכחיל הכחיל יכחיל מכחיל - +הכחיש הכחיש יכחיש מכחיש להכחיש +הכיל הכיל יכיל מכיל להכיל +הכין הכין יכין מכין להכין +הכיר הכיר יכיר מכיר להכיר +הכיש הכיש יכיש מכיש - +הכליל הכליל יכליל מכליל - +הכניס הכניס יכניס מכניס להכניס +הכניע הכניע יכניע מכניע - +הכעיס הכעיס יכעיס מכעיס להכעיס +הכפיל הכפיל יכפיל מכפיל - +הכריז הכריז יכריז מכריז להכריז +הכריח הכריח יכריח מכריח להכריח +הכריע הכריע יכריע מכריע - +הכשיל הכשיל יכשיל מכשיל - +הכשיר הכשיר יכשיר מכשיר להכשיר +הכתיב הכתיב יכתיב מכתיב - +הכתים הכתים יכתים מכתים - +הכתיר הכתיר יכתיר מכתיר - +הלאים הלאים ילאים מלאים - +הלבין הלבין ילבין מלבין - +הלביש הלביש ילביש מלביש להלביש +הלהיט הלהיט ילהיט מלהיט - +הלווה הלוה ילוה מלוה - +הלחים הלחים ילחים מלחים - +הלחיץ הלחיץ ילחיץ מלחיץ - +הלך הלך ילך הולך ללכת +הלם הלם יהלם הולם - +הלעיב הלעיב ילעיב מלעיב - +הלעיט הלעיט ילעיט מלעיט - +הלשין הלשין ילשין מלשין - +המה המה יהמה הומה - +המהם המהם יהמהם מהמהם - +המחיז המחיז ימחיז ממחיז - +המחיש המחיש ימחיש ממחיש - +המיר המיר ימיר ממיר - +המית המית ימית ממית להמית +המליח המליח ימליח ממליח - +המליך המליך ימליך ממליך - +המליץ המליץ ימליץ ממליץ להמליץ +המס המס ימס ממס - +המציא המציא ימציא ממציא להמציא +המקים המקים ימקים ממקים - +המריא המריא ימריא ממריא - +המשיך המשיך ימשיך ממשיך - +המתין המתין ימתין ממתין להמתין +הנדס הנדס יהנדס מהנדס - +הנהיג הנהיג ינהיג מנהיג - +הנחה הנחה ינחה מנחה להנחות +הנחיל הנחיל ינחיל מנחיל - +הניח הניח יניח מניח להניח +הניף הניף יניף מניף - +הנמיך הנמיך ינמיך מנמיך - +הנפיש הנפיש ינפיש מנפיש - +הסב הסב יסב מסב להסב +הסביר הסביר יסביר מסביר להסביר +הסגביר הסגביר יסגביר מסגביר - +הסגיר הסגיר יסגיר מסגיר - +הסיט הסיט יסיט מסיט - +הסיע הסיע יסיע מסיע להסיע +הסיק הסיק יסיק מסיק - +הסיר הסיר יסיר מסיר להסיר +הסכים הסכים יסכים מסכים להסכים +הסמיך הסמיך יסמיך מסמיך - +הסמיק הסמיק יסמיק מסמיק להסמיק +הסניף הסניף יסניף מסניף - +הספיג הספיג יספיג מספיג - +הספיק הספיק יספיק מספיק - +הסתבך הסתבך יסתבך מסתבך - +הסתגל הסתגל יסתגל מסתגל - +הסתגר הסתגר יסתגר מסתגר להסתגר +הסתדר הסתדר יסתדר מסתדר - +הסתובב הסתובב יסתובב מסתובב - +הסתופף הסתופף יסתופף מסתופף - +הסתיים הסתים יסתים מסתים - +הסתיר הסתיר יסתיר מסתיר להסתיר +הסתכל הסתכל יסתכל מסתכל להסתכל +הסתכן הסתכן יסתכן מסתכן - +הסתלק הסתלק יסתלק מסתלק - +הסתמן הסתמן יסתמן מסתמן - +הסתעף הסתעף יסתעף מסתעף להסתעף +הסתערב הסתערב יסתערב מסתערב להסתערב +הסתפק הסתפק יסתפק מסתפק - +הסתפר הסתפר יסתפר מסתפר - +הסתתר הסתתר יסתתר מסתתר להסתתר +העביד העביד יעביד מעביד - +העביר העביר יעביר מעביר להעביר +העדה העדה יעדה מעדה - +העדין העדין יעדין מעדין - +העדיף העדיף יעדיף מעדיף להעדיף +העז העז יעז מעז להעז +העטיר העטיר יעטיר מעטיר להעטיר +העיז העיז יעיז מעיז - +העיף העיף יעיף מעיף להעיף +העיר העיר יעיר מעיר להעיר +העלה העלה יעלה מעלה להעלות +העליב העליב יעליב מעליב - +העלים העלים יעלים מעלים להעלים +העמיד העמיד יעמיד מעמיד להעמיד +העמיס העמיס יעמיס מעמיס - +העמיק העמיק יעמיק מעמיק להעמיק +העניק העניק יעניק מעניק - +העניש העניש יעניש מעניש - +העפיל העפיל יעפיל מעפיל - +העציב העציב יעציב מעציב - +העצים העצים יעצים מעצים - +העריך העריך יעריך מעריך להעריך +העריץ העריץ יעריץ מעריץ להעריץ +העתיק העתיק יעתיק מעתיק - +הפגיז הפגיז יפגיז מפגיז - +הפגין הפגין יפגין מפגין להפגין +הפחיד הפחיד יפחיד מפחיד להפחיד +הפחית הפחית יפחית מפחית להפחית +הפטיר הפטיר יפטיר מפטיר להפטיר +הפיל הפיל יפיל מפיל להפיל +הפיץ הפיץ יפיץ מפיץ להפיץ +הפיק הפיק יפיק מפיק - +הפך הפך יהפוך הופך להפוך +הפלה הפלה יפלה מפלה - +הפליא הפליא יפליא מפליא להפליא +הפליג הפליג יפליג מפליג - +הפליט הפליט יפליט מפליט - +הפליץ הפליץ יפליץ מפליץ להפליץ +הפנה הפנה יפנה מפנה - +הפנים הפנים יפנים מפנים - +הפסיד הפסיד יפסיד מפסיד להפסיד +הפסיק הפסיק יפסיק מפסיק להפסיק +הפעיל הפעיל יפעיל מפעיל להפעיל +הפציץ הפציץ יפציץ מפציץ - +הפציר הפציר יפציר מפציר - +הפקיע הפקיע יפקיע מפקיע - +הפקיר הפקיר יפקיר מפקיר - +הפר הפר יפר מפר להפר +הפריד הפריד יפריד מפריד - +הפריע הפריע יפריע מפריע להפריע +הפריש הפריש יפריש מפריש - +הפשיט הפשיט יפשיט מפשיט להפשיט +הפשיר הפשיר יפשיר מפשיר - +הפתיע הפתיע יפתיע מפתיע להפתיע +הצביע הצביע יצביע מצביע להצביע +הצדיע הצדיע יצדיע מצדיע - +הצהיב הצהיב יצהיב מצהיב - +הצהיר הצהיר יצהיר מצהיר להצהיר +הצחיק הצחיק יצחיק מצחיק להצחיק +הצטבר הצטבר יצטבר מצטבר - +הצטברח הצטברח יצטברח מצטברח להצטברח +הצטחק הצטחק יצטחק מצטחק להצטחק +הצטלם הצטלם יצטלם מצטלם להצטלם +הצטמק הצטמק יצטמק מצטמק - +הצטנן הצטנן יצטנן מצטנן להצטנן +הצטער הצטער יצטער מצטער להצטער +הצטרך הצטרך יצטרך מצטרך - +הצטרף הצטרף יצטרף מצטרף להצטרף +הציב הציב יציב מציב - +הציג הציג יציג מציג - +הציל הציל יציל מציל להציל +הציע הציע יציע מציע להציע +הציף הציף יציף מציף - +הציץ הציץ יציץ מציץ - +הצית הצית יצית מצית להצית +הצל הצל יצל מצל להצל +הצליח הצליח יצליח מצליח להצליח +הצמיד הצמיד יצמיד מצמיד - +הצעיק הצעיק יצעיק מצעיק - +הצפין הצפין יצפין מצפין - +הקביל הקביל יקביל מקביל להקביל +הקדים הקדים יקדים מקדים - +הקדיש הקדיש יקדיש מקדיש - +הקהיל הקהיל יקהיל מקהיל - +הקטין הקטין יקטין מקטין להקטין +הקטיר הקטיר יקטיר מקטיר להקטיר +הקיא הקיא יקיא מקיא - +הקים הקים יקים מקים להקים +הקיף הקיף יקיף מקיף להקיף +הקיץ הקיץ יקיץ מקיץ - +הקיש הקיש יקיש מקיש - +הקל הקל יקל מקל להקל +הקליד הקליד יקליד מקליד - +הקליט הקליט יקליט מקליט - +הקליק הקליק יקליק מקליק - +הקסים הקסים יקסים מקסים - +הקפיא הקפיא יקפיא מקפיא להקפיא +הקפיץ הקפיץ יקפיץ מקפיץ - +הקציב הקציב יקציב מקציב - +הקציף הקציף יקציף מקציף - +הקר הקר יקר מקר להקר +הקריא הקריא יקריא מקריא להקריא +הקריב הקריב יקריב מקריב - +הקרין הקרין יקרין מקרין - +הקריס הקריס יקריס מקריס להקריס +הקריש הקריש יקריש מקריש - +הקשה הקשה יקשה מקשה - +הקשיב הקשיב יקשיב מקשיב להקשיב +הקשיח הקשיח יקשיח מקשיח - +הראה הראה יראה מראה להראות +הרבה הרבה ירבה מרבה להרבות +הרביץ הרביץ ירביץ מרביץ - +הרג הרג יהרוג הורג להרוג +הרגיז הרגיז ירגיז מרגיז - +הרגיע הרגיע ירגיע מרגיע להרגיע +הרגיש הרגיש ירגיש מרגיש להרגיש +הרהר הרהר יהרהר מהרהר - +הרוויח הרויח ירויח מרויח - +הרחיב הרחיב ירחיב מרחיב להרחיב +הרחיק הרחיק ירחיק מרחיק להרחיק +הרטיב הרטיב ירטיב מרטיב להרטיב +הריח הריח יריח מריח להריח +הרים הרים ירים מרים להרים +הריץ הריץ יריץ מריץ - +הריק הריק יריק מריק - +הרכיב הרכיב ירכיב מרכיב להרכיב +הרס הרס יהרס הורס - +הרע הרע ירע מרע להרע +הרעיל הרעיל ירעיל מרעיל - +הרצה הרצה ירצה מרצה - +הרשה הרשה ירשה מרשה - +הרשים הרשים ירשים מרשים להרשים +הרתיח הרתיח ירתיח מרתיח להרתיח +השאיל השאיל ישאיל משאיל - +השאיר השאיר ישאיר משאיר - +השביח השביח ישביח משביח - +השבית השבית ישבית משבית - +השגיח השגיח ישגיח משגיח - +השהה השהה ישהה משהה להשהות +השווה השוה ישוה משוה - +השוויץ השויץ ישויץ משויץ - +השחיז השחיז ישחיז משחיז - +השחים השחים ישחים משחים להשחים +השחיר השחיר ישחיר משחיר - +השחית השחית ישחית משחית - +השיא השיא ישיא משיא - +השיב השיב ישיב משיב להשיב +השיג השיג ישיג משיג להשיג +השים השים ישים משים - +השיר השיר ישיר משיר - +השכיב השכיב ישכיב משכיב - +השכים השכים ישכים משכים - +השליג השליג ישליג משליג להשליג +השליט השליט ישליט משליט להשליט +השליך השליך ישליך משליך להשליך +השלים השלים ישלים משלים להשלים +השליש השליש ישליש משליש - +השמיד השמיד ישמיד משמיד להשמיד +השמיט השמיט ישמיט משמיט - +השמין השמין ישמין משמין - +השמיע השמיע ישמיע משמיע להשמיע +השעה השעה ישעה משעה - +השפיל השפיל ישפיל משפיל - +השפיע השפיע ישפיע משפיע להשפיע +השפריץ השפריץ ישפריץ משפריץ - +השקה השקה ישקה משקה להשקות +השקיע השקיע ישקיע משקיע - +השקיף השקיף ישקיף משקיף - +השרה השרה ישרה משרה - +השתאה השתאה ישתאה משתאה - +השתגע השתגע ישתגע משתגע להשתגע +השתדל השתדל ישתדל משתדל להשתדל +השתהד השתהד ישתהד משתהד - +השתוחח השתוחח ישתוחח משתוחח להשתוחח +השתזף השתזף ישתזף משתזף להשתזף +השתחוה השתחוה ישתחוה משתחוה - +השתחווה השתחווה ישתחוה משתחווה להשתחוות +השתחרר השתחרר ישתחרר משתחרר להשתחרר +השתייך השתיך ישתיך משתיך - +השתיל השתיל ישתיל משתיל להשתיל +השתין השתין ישתין משתין להשתין +השתיק השתיק ישתיק משתיק להשתיק +השתכנז השתכנז ישתכנז משתכנז להשתכנז +השתכנע השתכנע ישתכנע משתכנע להשתכנע +השתכר השתכר ישתכר משתכר להשתכר +השתלב השתלב ישתלב משתלב - +השתלח השתלח ישתלח משתלח להשתלח +השתלט השתלט ישתלט משתלט להשתלט +השתמד השתמד ישתמד משתמד - +השתמט השתמט ישתמט משתמט - +השתמר השתמר ישתמר משתמר להשתמר +השתמש השתמש ישתמש משתמש להשתמש +השתנה השתנה ישתנה משתנה להשתנות +השתנק השתנק ישתנק משתנק - +השתעל השתעל ישתעל משתעל - +השתעמם השתעמם ישתעמם משתעמם - +השתפר השתפר ישתפר משתפר להשתפר +השתרש השתרש ישתרש משתרש - +השתתף השתתף ישתתף משתתף להשתתף +התאבד התאבד יתאבד מתאבד להתאבד +התאבך התאבך יתאבך מתאבך להתאבך +התאבל התאבל יתאבל מתאבל להתאבל +התאגד התאגד יתאגד מתאגד להתאגד +התאגרף התאגרף יתאגרף מתאגרף להתאגרף +התאדה התאדה יתאדה מתאדה להתאדות +התאהב התאהב יתאהב מתאהב להתאהב +התאווה התאוה יתאוה מתאוה - +התאושש התאושש יתאושש מתאושש להתאושש +התאזן התאזן יתאזן מתאזן להתאזן +התאזרח התאזרח יתאזרח מתאזרח להתאזרח +התאחד התאחד יתאחד מתאחד - +התאים התאים יתאים מתאים - +התאכזב התאכזב יתאכזב מתאכזב להתאכזב +התאלמן התאלמן יתאלמן מתאלמן - +התאמן התאמן יתאמן מתאמן להתאמן +התאמץ התאמץ יתאמץ מתאמץ להתאמץ +התאסלם התאסלם יתאסלם מתאסלם - +התאסף התאסף יתאסף מתאסף להתאסף +התאפיין התאפין יתאפין מתאפין - +התאפק התאפק יתאפק מתאפק - +התאפר התאפר יתאפר מתאפר - +התאקלם התאקלם יתאקלם מתאקלם - +התארגן התארגן יתארגן מתארגן להתארגן +התבדח התבדח יתבדח מתבדח להתבדח +התבודד התבודד יתבודד מתבודד להתבודד +התבונן התבונן יתבונן מתבונן - +התבוסס התבוסס יתבוסס מתבוסס - +התבזבז התבזבז יתבזבז מתבזבז להתבזבז +התבטא התבטא יתבטא מתבטא להתבטא +התבטל התבטל יתבטל מתבטל - +התבכיין התבכין יתבכין מתבכין - +התבלבל התבלבל יתבלבל מתבלבל להתבלבל +התבלה התבלה יתבלה מתבלה להתבלות +התבקש התבקש יתבקש מתבקש להתבקש +התבשל התבשל יתבשל מתבשל להתבשל +התגאה התגאה יתגאה מתגאה - +התגבר התגבר יתגבר מתגבר להתגבר +התגבש התגבש יתגבש מתגבש - +התגונן התגונן יתגונן מתגונן - +התגורר התגורר יתגורר מתגורר - +התגייס התגיס יתגיס מתגיס - +התגייר התגיר יתגיר מתגיר - +התגלגל התגלגל יתגלגל מתגלגל להתגלגל +התגלה התגלה יתגלה מתגלה להתגלות +התגלח התגלח יתגלח מתגלח להתגלח +התגעגע התגעגע יתגעגע מתגעגע להתגעגע +התגרש התגרש יתגרש מתגרש להתגרש +התגשם התגשם יתגשם מתגשם - +התהווה התהוה יתהוה מתהוה - +התוודע התודע יתודע מתודע - +התווה התוה יתוה מתוה - +התווכח התווכח יתווכח מתווכח להתווכח +התוכח התוכח יתוכח מתוכח להתוכח +התחבא התחבא יתחבא מתחבא להתחבא +התחבר התחבר יתחבר מתחבר להתחבר +התחדד התחדד יתחדד מתחדד - +התחדש התחדש יתחדש מתחדש - +התחזק התחזק יתחזק מתחזק - +התחיל התחיל יתחיל מתחיל להתחיל +התחלק התחלק יתחלק מתחלק - +התחמם התחמם יתחמם מתחמם להתחמם +התחמק התחמק יתחמק מתחמק - +התחנך התחנך יתחנך מתחנך להתחנך +התחנן התחנן יתחנן מתחנן להתחנן +התחסן התחסן יתחסן מתחסן - +התחפש התחפש יתחפש מתחפש להתחפש +התחרה התחרה יתחרה מתחרה - +התחרט התחרט יתחרט מתחרט להתחרט +התחשב התחשב יתחשב מתחשב - +התחשמל התחשמל יתחשמל מתחשמל להתחשמל +התחתן התחתן יתחתן מתחתן - +התיוון התיון יתיון מתיון - +התיז התיז יתיז מתיז - +התייאש התיאש יתיאש מתיאש - +התייבש התיבש יתיבש מתיבש - +התייהד התיהד יתיהד מתיהד - +התייחס התיחס יתיחס מתיחס - +התייפח התיפח יתיפח מתיפח - +התייצב התיצב יתיצב מתיצב - +התייקר התיקר יתיקר מתיקר - +התיישב התישב יתישב מתישב - +התיר התיר יתיר מתיר להתיר +התיש התיש יתיש מתיש - +התכוון התכון יתכון מתכון - +התכווץ התכוץ יתכוץ מתכוץ - +התכונן התכונן יתכונן מתכונן להתכונן +התכופף התכופף יתכופף מתכופף להתכופף +התכייף התכיף יתכיף מתכיף - +התכנס התכנס יתכנס מתכנס להתכנס +התכרבל התכרבל יתכרבל מתכרבל - +התכתב התכתב יתכתב מתכתב להתכתב +התלבש התלבש יתלבש מתלבש להתלבש +התלווה התלוה יתלוה מתלוה - +התלונן התלונן יתלונן מתלונן להתלונן +התלכלך התלכלך יתלכלך מתלכלך להתלכלך +התלקח התלקח יתלקח מתלקח - +התמהמה התמהמה יתמהמה מתמהמה להתמהמה +התמודד התמודד יתמודד מתמודד להתמודד +התמוטט התמוטט יתמוטט מתמוטט - +התמיד התמיד יתמיד מתמיד - +התמכר התמכר יתמכר מתמכר להתמכר +התמלא התמלא יתמלא מתמלא להתמלא +התמצא התמצא יתמצא מתמצא להתמצא +התמקח התמקח יתמקח מתמקח - +התמרמר התמרמר יתמרמר מתמרמר - +התמתח התמתח יתמתח מתמתח להתמתח +התנבא התנבא יתנבא מתנבא להתנבא +התנגד התנגד יתנגד מתנגד להתנגד +התנגש התנגש יתנגש מתנגש - +התנדב התנדב יתנדב מתנדב להתנדב +התנדנד התנדנד יתנדנד מתנדנד - +התנהג התנהג יתנהג מתנהג להתנהג +התנהל התנהל יתנהל מתנהל - +התנודב התנדב יתנדב מתנדב - +התנודד התנודד יתנודד מתנודד - +התנזר התנזר יתנזר מתנזר להתנזר +התנחל התנחל יתנחל מתנחל להתנחל +התנחשל התנחשל יתנחשל מתנחשל - +התניע התניע יתניע מתניע - +התנכל התנכל יתנכל מתנכל - +התנכר התנכר יתנכר מתנכר להתנכר +התנסה התנסה יתנסה מתנסה להתנסות +התנער התנער יתנער מתנער להתנער +התנפח התנפח יתנפח מתנפח - +התנפל התנפל יתנפל מתנפל להתנפל +התנפץ התנפץ יתנפץ מתנפץ - +התנצל התנצל יתנצל מתנצל להתנצל +התנצר התנצר יתנצר מתנצר - +התנקף התנקף יתנקף מתנקף להתנקף +התנקש התנקש יתנקש מתנקש להתנקש +התנשא התנשא יתנשא מתנשא - +התנשם התנשם יתנשם מתנשם להתנשם +התנשק התנשק יתנשק מתנשק להתנשק +התעבה התעבה יתעבה מתעבה - +התעדה התעדה יתעדה מתעדה - +התעדן התעדן יתעדן מתעדן - +התעורר התעורר יתעורר מתעורר להתעורר +התעטף התעטף יתעטף מתעטף להתעטף +התעטש התעטש יתעטש מתעטש - +התעייף התעיף יתעיף מתעיף - +התעכב התעכב יתעכב מתעכב - +התעלה התעלה יתעלה מתעלה להתעלות +התעלל התעלל יתעלל מתעלל להתעלל +התעלם התעלם יתעלם מתעלם - +התעלף התעלף יתעלף מתעלף להתעלף +התעמל התעמל יתעמל מתעמל להתעמל +התעמר התעמר יתעמר מתעמר להתעמר +התענג התענג יתענג מתענג - +התעצל התעצל יתעצל מתעצל להתעצל +התעקש התעקש יתעקש מתעקש להתעקש +התערב התערב יתערב מתערב להתערב +התערבב התערבב יתערבב מתערבב - +התעשר התעשר יתעשר מתעשר - +התפאר התפאר יתפאר מתפאר להתפאר +התפוגג התפוגג יתפוגג מתפוגג - +התפוטר התפטר יתפטר מתפטר - +התפוצץ התפוצץ יתפוצץ מתפוצץ להתפוצץ +התפורר התפורר יתפורר מתפורר - +התפטר התפטר יתפטר מתפטר להתפטר +התפיח התפיח יתפיח מתפיח - +התפלא התפלא יתפלא מתפלא להתפלא +התפלל התפלל יתפלל מתפלל להתפלל +התפלש התפלש יתפלש מתפלש - +התפנה התפנה יתפנה מתפנה - +התפספס התפספס יתפספס מתפספס להתפספס +התפעל התפעל יתפעל מתפעל - +התפרד התפרד יתפרד מתפרד להתפרד +התפרחח התפרחח יתפרחח מתפרחח - +התפרסם התפרסם יתפרסם מתפרסם להתפרסם +התפרע התפרע יתפרע מתפרע להתפרע +התפרק התפרק יתפרק מתפרק - +התפשט התפשט יתפשט מתפשט להתפשט +התפתה התפתה יתפתה מתפתה להתפתות +התפתח התפתח יתפתח מתפתח - +התקבל התקבל יתקבל מתקבל להתקבל +התקבץ התקבץ יתקבץ מתקבץ - +התקדם התקדם יתקדם מתקדם להתקדם +התקדש התקדש יתקדש מתקדש להתקדש +התקהל התקהל יתקהל מתקהל להתקהל +התקומם התקומם יתקומם מתקומם להתקומם +התקטן התקטן יתקטן מתקטן - +התקין התקין יתקין מתקין להתקין +התקיף התקיף יתקיף מתקיף - +התקלח התקלח יתקלח מתקלח להתקלח +התקלקל התקלקל יתקלקל מתקלקל להתקלקל +התקמט התקמט יתקמט מתקמט להתקמט +התקנא התקנא יתקנא מתקנא להתקנא +התקרב התקרב יתקרב מתקרב להתקרב +התקרח התקרח יתקרח מתקרח להתקרח +התקרר התקרר יתקרר מתקרר להתקרר +התקשר התקשר יתקשר מתקשר להתקשר +התראה התראה יתראה מתראה להתראות +התראיין התראין יתראין מתראין - +התרבה התרבה יתרבה מתרבה להתרבות +התרגז התרגז יתרגז מתרגז להתרגז +התרגל התרגל יתרגל מתרגל להתרגל +התרגש התרגש יתרגש מתרגש להתרגש +התרה התרה יתרה מתרה - +התרומם התרומם יתרומם מתרומם להתרומם +התרוקן התרוקן יתרוקן מתרוקן להתרוקן +התרחץ התרחץ יתרחץ מתרחץ להתרחץ +התרחש התרחש יתרחש מתרחש להתרחש +התרכז התרכז יתרכז מתרכז - +התרסק התרסק יתרסק מתרסק - +התרפא התרפא יתרפא מתרפא להתרפא +התרפה התרפה יתרפה מתרפה - +וידא ודא יודא מודא - +וילן ולן יולן מולן - +ויתר ותר יותר מותר - +זב זב יזוב זב לזוב +זבח זבח יזבח זובח - +זבל זבל יזבל זובל - +זגזג זגזג יזגזג מזגזג - +זוד זד יזוד זד - +זוהה זהה יזהה מזהה - +זוהם זוהם יזוהם מזוהם - +זועזע זועזע יזועזע מזועזע - +זז זז יזוז זז לזוז +זחל זחל יזחל זוחל לזחול +זיגג זגג יזגג מזגג - +זיהה זיהה יזהה מזהה לזהות +זיהם זיהם יזהם מזהם לזהם +זיין זיין יזיין מזיין לזיין +זייף זיף יזיף מזיף - +זיכה זכה יזכה מזכה - +זימן זמן יזמן מזמן - +זימר זימר יזמר מזמר לזמר +זיעזע זיעזע יזעזע מזעזע לזעזע +זיקק זקק יזקק מזקק - +זירז זרז יזרז מזרז - +זכה זכה יזכה זוכה לזכות +זכר זכר יזכור זוכר לזכור +זמבר זמבר יזמבר מזמבר - +זמם זמם יזמם זומם - +זמר זמר יזמר זומר - +זן זן יזון זן לזון +זנה זנה יזנה זונה לזנות +זנח זנח יזנח זונח לזנוח +זע זע יזוע זע - +זעזע זעזע יזעזע מזעזע - +זעם זעם יזעם זועם - +זעף זעף יזעף זועף לזעוף +זעק זעק יזעק זועק - +זקן זקן יזקן זקן לזקון +זקף זקף יזקוף זוקף לזקוף +זרח זרח יזרח זורח לזרוח +זרם זרם יזרם זורם - +זרע זרע יזרע זורע לזרוע +זרק זרק יזרוק זורק לזרוק +חבט חבט יחבט חובט - +חבק חבק יחבק חובק - +חבר חבר יחבר חובר - +חבש חבש יחבש חובש - +חג חג יחוג חג לחוג +חגג חגג יחגג חוגג - +חגר חגר יחגור חוגר לחגור +חד חד יחוד חד לחוד +חדל חדל יחדל חדל - +חדר חדר יחדור חודר לחדור +חובר חובר יחובר מחובר - +חווה חווה יחווה חווה לחוות +חוזק חוזק יחוזק מחוזק - +חולל חולל יחולל מחולל לחולל +חומם חמם יחמם מחמם - +חונך חונך יחונך מחונך - +חוקק חוקק יחוקק מחוקק לחוקק +חושב חושב יחושב מחושב - +חזה חזה יחזה חוזה - +חזק חזק יחזק חזק לחזוק +חזר חזר יחזור חוזר לחזור +חטא חטא יחטא חוטא לחטוא +חטף חטף יחטוף חוטף לחטוף +חי חי יחיה חי לחיות +חיבל חיבל יחבל מחבל לחבל +חיבק חיבק יחבק מחבק לחבק +חיבר חיבר יחבר מחבר לחבר +חידד חדד יחדד מחדד - +חידש חידש יחדש מחדש לחדש +חיווט חוט יחוט מחוט - +חיזק חיזק יחזק מחזק לחזק +חיזר חזר יחזר מחזר - +חיטא חיטא יחטא מחטא לחטא +חייב חיב יחיב מחיב - +חייג חיג יחיג מחיג - +חייך חייך יחייך מחייך לחייך +חייל חיל יחיל מחיל - +חיכה חיכה יחכה מחכה לחכות +חילל חילל יחלל מחלל לחלל +חילץ חלץ יחלץ מחלץ - +חילק חילק יחלק מחלק לחלק +חימם חימם יחמם מחמם לחמם +חימש חמש יחמש מחמש - +חינך חינך יחנך מחנך לחנך +חיסל חסל יחסל מחסל - +חיפה חיפה יחפה מחפה לחפות +חיפש חיפש יחפש מחפש לחפש +חיצרץ חיצרץ יחצרץ מחצרץ לחצרץ +חיקה חיקה יחקה מחקה לחקות +חירף חרף יחרף מחרף - +חישב חישב יחשב מחשב לחשב +חיתן חתן יחתן מחתן - +חכם חכם יחכם חכם לחכום +חל חל יחול חל לחול +חלב חלב יחלוב חולב לחלוב +חלה חלה יחלה חולה לחלות +חלט חלט יחלט חולט - +חלם חלם יחלום חולם לחלום +חלף חלף יחלוף חולף לחלוף +חלק חלק יחלוק חולק לחלוק +חמד חמד יחמוד חומד לחמוד +חמל חמל יחמל חומל - +חמס חמס יחמס חומס - +חמץ חמץ יחמץ חמץ - +חמק חמק יחמק חומק - +חנה חנה יחנה חונה לחנות +חנך חנך יחנך חונך - +חנק חנק יחנוק חונק לחנוק +חס חס יחוס חס לחוס +חסה חסה יחסה חוסה לחסות +חסך חסך יחסך חוסך - +חסם חסם יחסם חוסם - +חפף חפף יחפף חופף - +חפץ חפץ יחפץ חפץ - +חפר חפר יחפור חופר לחפור +חצב חצב יחצב חוצב - +חצה חצה יחצה חוצה לחצות +חצרץ חצרץ יחצרץ מחצרץ - +חקק חקק יחקק חוקק - +חקר חקר יחקור חוקר לחקור +חרב חרב יחרב חרב לחרוב +חרבן חרבן יחרבן מחרבן - +חרה חרה יחרה חורה לחרות +חרז חרז יחרז חורז - +חרטט חרטט יחרטט מחרטט - +חרך חרך יחרך חורך - +חרפ חרפ יחרופ חורפ לחרופ +חרץ חרץ יחרץ חורץ - +חרק חרק יחרק חורק - +חרש חרש יחרש חורש - +חש חש יחוש חש - +חשב חשב יחשוב חושב לחשוב +חשד חשד יחשד חושד - +חשף חשף יחשף חושף - +חשש חשש יחשש חושש - +חתך חתך יחתוך חותך לחתוך +חתם חתם יחתם חותם - +חתר חתר יחתר חותר - +טאטא טאטא יטאטא מטאטא - +טבח טבח יטבח טובח לטבוח +טבל טבל יטבל טובל - +טבע טבע יטבע טובע לטבוע +טואטא טואטא יטואטא מטואטא - +טוגן טגן יטגן מטגן - +טווה טוה יטוה טווה - +טולטל טולטל יטולטל מטולטל - +טונף טונף יטונף מטונף - +טופל טופל יטופל מטופל - +טח טח יטוח טח - +טחן טחן יטחן טוחן לטחון +טיאטא טיאטא יטאטא מטאטא לטאטא +טיגן טיגן יטגן מטגן לטגן +טיהר טהר יטהר מטהר - +טייח טיח יטיח מטיח - +טייל טיל יטיל מטיל - +טילטל טילטל יטלטל מטלטל לטלטל +טילפן טילפן יטלפן מטלפן לטלפן +טינף טינף יטנף מטנף לטנף +טיפל טיפל יטפל מטפל לטפל +טיפס טיפס יטפס מטפס לטפס +טלגרף טלגרף יטלגרף מטלגרף - +טלטל טלטל יטלטל מטלטל - +טלפן טלפן יטלפן מטלפן - +טמן טמן יטמן טומן - +טס טס יטוס טס לטוס +טעה טעה יטעה טועה לטעות +טעם טעם יטעם טועם לטעום +טען טען יטען טוען לטעון +טפח טפח יטפח טופח לטפוח +טפל טפל יטפל טופל - +טרף טרף יטרוף טורף לטרוף +טרפד טרפד יטרפד מטרפד - +טשטש טשטש יטשטש מטשטש - +ידה ידה יידה יודה לידות +ידע ידע ידע יודע לדעת +יודע ידע יידע מידע - +יוחם יחם ייחם מיחם - +יועל יעל ייעל מיעל - +יוצר יצר ייצר מיצר - +יזם יזם ייזם יוזם - +ייאש יאש ייאש מיאש - +ייבא יבא ייבא מיבא - +ייבש יבש ייבש מיבש - +ייגה יגה ייגה מיגה - +יידע ידע יידע מידע - +ייוון יון ייון מיון - +ייחד ייחד ייחד מיחד ליחד +ייחס יחס ייחס מיחס - +ייסד יסד ייסד מיסד - +ייעד יעד ייעד מיעד - +ייעל יעל ייעל מיעל - +ייעץ יעץ ייעץ מיעץ - +ייער יער ייער מיער - +ייצא יצא ייצא מיצא - +ייצג יצג ייצג מיצג - +יישם ישם יישם מישם - +יישר ישר יישר מישר - +יכול יכול יוכל יכול - +ילד ילד ילד יולד ללדת +ינק ינק יינק יונק לינוק +יעץ יעץ ייעץ יועץ - +יצא יצא יצא יוצא לצאת +יצק יצק יצק יוצק - +יצר יצר ייצור יוצר ליצור +יקע יקע יקע יוקע - +ירא ירא יירא ירא לירוא +ירד ירד ירד יורד לרדת +ירה ירה יירה יורה לירות +ירש ירש יירש יורש לרשת +ישב ישב ישב יושב לשבת +ישן ישן יישן ישן לישון +כאב כאב יכאב כואב לכאוב +כבד כבד יכבד כבד - +כבר כבר יכבר כובר - +כבש כבש יכבוש כובש לכבוש +כובה כובה יכובה מכובה - +כונן כונן יכונן מכונן לכונן +כונס כונס יכונס מכונס - +כחל כחל יכחל כוחל - +כיבד כיבד יכבד מכבד לכבד +כיבה כיבה יכבה מכבה לכבות +כיבס כיבס יכבס מכבס לכבס +כיהן כהן יכהן מכהן - +כיוון כון יכון מכון - +כיווץ כוץ יכוץ מכוץ - +כיזב כיזב יכזב מכזב לכזב +כיחד כחד יכחד מכחד - +כייס כיס יכיס מכיס - +כיכב כיכב יככב מככב לככב +כילה כילה יכלה מכלה לכלות +כינה כנה יכנה מכנה - +כינס כינס יכנס מכנס לכנס +כיסה כיסה יכסה מכסה לכסות +כיפר כיפר יכפר מכפר לכפר +כיתר כיתר יכתר מכתר לכתר +כלא כלא יכלא כולא - +כלה כלה יכלה כלה לכלות +כלל כלל יכלל כולל - +כמה כמה יכמה כמה לכמוה +כסה כסה יכסה כוסה - +כעס כעס יכעס כועס לכעוס +כפה כפה יכפה כופה לכפות +כפל כפל יכפול כופל לכפול +כפף כפף יכפף כופף - +כפתר כפתר יכפתר מכפתר - +כרה כרה יכרה כורה - +כרך כרך יכרך כורך - +כרסם כרסם יכרסם מכרסם - +כרע כרע יכרע כורע לכרוע +כרת כרת יכרות כורת לכרות +כשל כשל יכשל כושל - +כתב כתב יכתוב כותב לכתוב +כתש כתש יכתש כותש - +לבלב לבלב ילבלב מלבלב - +לבש לבש ילבש לובש ללבוש +לגם לגם ילגם לוגם - +להה להה ילהה לוהה - +להט להט ילהט לוהט ללהוט +לובן לבן ילבן מלבן - +לווה לוה ילוה לווה - +לוקק לוקק ילוקק מלוקק - +לחץ לחץ ילחץ לוחץ ללחוץ +לחש לחש ילחש לוחש ללחוש +ליבב ליבב ילבב מלבב ללבב +ליבן ליבן ילבן מלבן ללבן +ליווה לוה ילוה מלוה - +ליטף ליטף ילטף מלטף ללטף +ליטש לטש ילטש מלטש - +לימד לימד ילמד מלמד ללמד +ליקט לקט ילקט מלקט - +ליקק ליקק ילקק מלקק ללקק +לכד לכד ילכד לוכד - +לכלך לכלך ילכלך מלכלך - +לכסן לכסן ילכסן מלכסן - +למד למד ילמד לומד ללמוד +לן לן ילון לן ללון +לעז לעז ילעז לועז - +לעס לעס ילעס לועס - +לקה לקה ילקה לוקה ללקות +לקח לקח ייקח לוקח ליקוח +לקט לקט ילקט לוקט - +לש לש ילוש לש ללוש +מאס מאס ימאס מואס - +מדד מדד ימדוד מודד למדוד +מהל מהל ימהל מוהל - +מהר מהר ימהר מוהר - +מוזג מוזג ימוזג ממוזג - +מוטט מוטט ימוטט ממוטט למוטט +מולא מולא ימולא ממולא - +מומן ממן יממן מממן - +מופה מופה ימופה ממופה - +מוקש מוקש ימוקש ממוקש - +מותג מתג ימתג ממתג - +מזג מזג ימזג מוזג - +מחזר מחזר ימחזר ממחזר - +מחל מחל ימחל מוחל - +מחץ מחץ ימחץ מוחץ - +מחק מחק ימחק מוחק - +מיאן מיאן ימאן ממאן למאן +מיהר מיהר ימהר ממהר למהר +מיזג מיזג ימזג ממזג למזג +מיין מיין ימיין ממיין למיין +מילא מילא ימלא ממלא למלא +מימן ממן יממן מממן - +מימש ממש יממש מממש - +מינה מנה ימנה ממנה - +מיעט מעט ימעט ממעט - +מיפה מיפה ימפה ממפה למפות +מיקד מקד ימקד ממקד - +מיקם מיקם ימקם ממקם למקם +מיתן מיתן ימתן ממתן למתן +מכר מכר ימכור מוכר למכור +מל מל ימול מל - +מלא מלא ימלא מלא למלוא +מלך מלך ימלוך מולך למלוך +מלמל מלמל ימלמל ממלמל - +מלצר מלצר ימלצר ממלצר - +מנה מנה ימנה מונה למנות +מנע מנע ימנע מונע למנוע +מסה מסה ימסה מוסה - +מסך מסך ימסך מוסך - +מספר מספר ימספר ממספר - +מסר מסר ימסור מוסר למסור +מעד מעד ימעד מועד - +מעך מעך ימעך מועך למעוך +מעל מעל ימעל מועל למעול +מצא מצא ימצא מוצא למצוא +מצמץ מצמץ ימצמץ ממצמץ - +מצץ מצץ ימצוץ מוצץ למצוץ +מרד מרד ימרוד מורד למרוד +מרח מרח ימרח מורח למרוח +מרט מרט ימרט מורט - +מרמר מרמר ימרמר ממרמר - +מרפק מרפק ימרפק ממרפק - +משח משח ימשח מושח למשוח +משך משך ימשוך מושך למשוך +משל משל ימשול מושל למשול +משמע משמע ימשמע ממשמע - +מת מת ימות מת למות +מתח מתח ימתח מותח - +נאבד נאבד יאבד נאבד - +נאבק נאבק ייאבק נאבק להיאבק +נאגר נאגר ייאגר נאגר להיאגר +נאהב נאהב ייאהב נאהב להיאהב +נאהד נאהד ייאהד נאהד להיאהד +נאות נאות יאות נאות - +נאחז נאחז ייאחז נאחז להיאחז +נאכל נאכל ייאכל נאכל להיאכל +נאכף נאכף ייאכף נאכף להיאכף +נאמן נאמן ייאמן נאמן להיאמן +נאמר נאמר יאמר נאמר - +נאף נאף ינאף נואף לנאוף +נאץ נאץ ינאץ נואץ - +נאצל נאצל ייאצל נאצל להיאצל +נאשם נאשם יאשם נאשם - +נבדק נבדק ייבדק נבדק להיבדק +נבהל נבהל יבהל נבהל - +נבח נבח ייבח נובח ליבוח +נבחר נבחר ייבחר נבחר להיבחר +נבל נבל ייבול נובל ליבול +נבנה נבנה ייבנה נבנה להיבנות +נבע נבע ינבע נובע - +נבעת נבעת יבעת נבעת - +נברא נברא ייברא נברא להיברא +נגאל נגאל ייגאל נגאל להיגאל +נגד נגד ינגוד נוגד לנגוד +נגה נגה ייגה נוגה ליגוה +נגח נגח יגח נוגח - +נגלה נגלה ייגלה נגלה להיגלות +נגמר נגמר ייגמר נגמר להיגמר +נגנב נגנב ייגנב נגנב להיגנב +נגע נגע ייגע נוגע ליגוע +נגעל נגעל יגעל נגעל - +נגרם נגרם יגרם נגרם - +נד נד ינוד נד - +נדב נדב ידב נודב - +נדד נדד ינדד נודד - +נדחה נדחה יידחה נדחה להידחות +נדפס נדפס ידפס נדפס - +נדקר נדקר ידקר נדקר - +נדרס נדרס יידרס נדרס להידרס +נהג נהג ינהג נוהג לנהוג +נהגה נהגה ייהגה נהגה להיהגות +נהיה נהיה - נהיה - +נהנה נהנה ייהנה נהנה ליהנות +נהק נהק ינהק נוהק - +נהר נהר ינהר נוהר לנהור +נהרג נהרג ייהרג נהרג להיהרג +נהרס נהרס יהרס נהרס - +נודע נודע יודע נודע - +נוכח נוכח יוכח נוכח - +נולד נולד יולד נולד - +נוסד נוסד יוסד נוסד - +נוסה נוסה ינוסה מנוסה - +נוסף נוסף יוסף נוסף - +נועד נועד יועד נועד - +נופף נופף ינופף מנופף - +נושע נושע ייושע נושע להיושע +נותר נותר יותר נותר - +נזהר נזהר יזהר נזהר - +נזכר נזכר ייזכר נזכר להיזכר +נזף נזף ינזף נוזף - +נזר נזר ינזר נזר - +נזרק נזרק יזרק נזרק - +נח נח ינוח נח לנוח +נחל נחל ינחל נוחל לנחול +נחלץ נחלץ יחלץ נחלץ - +נחלק נחלק ייחלק נחלק להיחלק +נחנק נחנק יחנק נחנק - +נחס נחס ינחס מנחס - +נחקר נחקר ייחקר נחקר להיחקר +נחשב נחשב ייחשב נחשב להיחשב +נחת נחת ינחת נוחת - +נטה נטה ייטה נוטה לנטות +נטל נטל ייטול נוטל ליטול +נטמע נטמע יטמע נטמע - +נטע נטע ייטע נוטע ליטוע +נטר נטר יטר נוטר - +נטש נטש יטש נוטש - +ניאץ נאץ ינאץ מנאץ - +ניבא ניבא ינבא מנבא לנבא +ניגב נגב ינגב מנגב - +ניגן ניגן ינגן מנגן לנגן +ניגש ניגש ייגש ניגש לגשת +נידד נדד ינדד מנדד - +נידה נדה ינדה מנדה - +ניהל נהל ינהל מנהל - +ניווט נוט ינוט מנוט - +ניחם ניחם ינחם מנחם לנחם +ניחש ניחש ינחש מנחש לנחש +ניטל ניטל יינטל ניטל להינטל +ניכה נכה ינכה מנכה - +ניכר ניכר ינכר מנכר לנכר +ניכש נכש ינכש מנכש - +ניסה ניסה ינסה מנסה לנסות +ניסח נסח ינסח מנסח - +ניסר נסר ינסר מנסר - +ניער נער ינער מנער - +ניפה נפה ינפה מנפה - +ניפח נפח ינפח מנפח - +ניפץ ניפץ ינפץ מנפץ לנפץ +ניצב ניצב - ניצב - +ניצח ניצח ינצח מנצח לנצח +ניצל ניצל ינצל מנצל לנצל +ניצר ניצר ינצר מנצר לנצר +ניקב נקב ינקב מנקב - +ניקה ניקה ינקה מנקה לנקות +ניקז נקז ינקז מנקז - +ניקר נקר ינקר מנקר - +נישא נישא יינשא נישא להינשא +נישה נשה ינשה מנשה - +נישק נישק ינשק מנשק לנשק +ניתב נתב ינתב מנתב - +ניתח נתח ינתח מנתח - +ניתן ניתן יינתן ניתן להינתן +ניתק נתק ינתק מנתק - +ניתר נתר ינתר מנתר - +נכווה נכווה ייכווה נכווה להיכוות +נכלל נכלל יכלל נכלל - +נכלם נכלם ייכלם נכלם להיכלם +נכמר נכמר יכמר נכמר - +נכנס נכנס ייכנס נכנס להיכנס +נכנע נכנע יכנע נכנע - +נכס נכס יכס נוכס - +נכרת נכרת ייכרת נכרת להיכרת +נכשל נכשל ייכשל נכשל להיכשל +נכתב נכתב ייכתב נכתב להיכתב +נלחם נלחם יילחם נלחם להילחם +נלקח נלקח ילקח נלקח - +נם נם ינום נם לנום +נמאס נמאס יימאס נמאס להימאס +נמהל נמהל ימהל נמהל - +נמחק נמחק ימחק נמחק - +נמכר נמכר יימכר נמכר להימכר +נמלט נמלט יימלט נמלט להימלט +נמנע נמנע ימנע נמנע - +נמס נמס יימס נמס להימס +נמצא נמצא יימצא נמצא להימצא +נמשך נמשך יימשך נמשך להימשך +ננעל ננעל יינעל ננעל להינעל +נס נס ינוס נס לנוס +נסגר נסגר ייסגר נסגר להיסגר +נסוג נסוג יסוג נסוג - +נסח נסח יסח נוסח - +נסחף נסחף ייסחף נסחף להיסחף +נסך נסך יסך נוסך - +נסע נסע יסע נוסע - +נע נע ינוע נע לנוע +נעל נעל ינעל נועל לנעול +נעלם נעלם ייעלם נעלם להיעלם +נעם נעם ינעם נעים לנעום +נענע נענע ינענע מנענע - +נענש נענש יענש נענש - +נעץ נעץ ינעץ נועץ - +נער נער ינער נוער לנעור +נעשה נעשה ייעשה נעשה להיעשות +נפגע נפגע ייפגע נפגע להיפגע +נפגש נפגש ייפגש נפגש להיפגש +נפח נפח ייפח נופח ליפוח +נפטר נפטר ייפטר נפטר להיפטר +נפל נפל ייפול נופל ליפול +נפצע נפצע יפצע נפצע - +נפרד נפרד ייפרד נפרד להיפרד +נפש נפש ינפוש נופש לנפוש +נפתח נפתח יפתח נפתח - +נצעק נצעק יצעק נצעק - +נצר נצר ינצור נוצר לנצור +נקב נקב יקב נוקב - +נקבע נקבע יקבע נקבע - +נקבר נקבר ייקבר נקבר להיקבר +נקם נקם יקם נוקם - +נקנה נקנה ייקנה נקנה להיקנות +נקע נקע יקע נוקע - +נקר נקר יקר נוקר - +נקרא נקרא ייקרא נקרא להיקרא +נקרש נקרש יקרש נקרש - +נקש נקש ינקש נוקש - +נראה נראה ייראה נראה להיראות +נרגן נרגן ירגן נרגן - +נרגע נרגע יירגע נרגע להירגע +נרדם נרדם ירדם נרדם - +נרטב נרטב ירטב נרטב - +נרמל נרמל ינרמל מנרמל - +נרצח נרצח יירצח נרצח להירצח +נשא נשא יישא נושא לשאת +נשאר נשאר יישאר נשאר להישאר +נשב נשב ינשוב נושב לנשוב +נשבע נשבע יישבע נשבע להישבע +נשבר נשבר יישבר נשבר להישבר +נשה נשה יישה נושה לנשות +נשך נשך יישך נושך לישוך +נשכח נשכח ישכח נשכח - +נשלח נשלח ישלח נשלח - +נשלט נשלט יישלט נשלט להישלט +נשלם נשלם ישלם נשלם - +נשם נשם ינשום נושם לנשום +נשמע נשמע יישמע נשמע להישמע +נשמר נשמר ישמר נשמר - +נשף נשף ינשף נושף - +נשק נשק יישק נושק לנשוק +נשר נשר ישר נושר - +נשרף נשרף יישרף נשרף להישרף +נתאכם נתאכם יתאכם מתאכם - +נתן נתן ייתן נותן לתת +נתפס נתפס יתפס נתפס - +נתקל נתקל יתקל נתקל - +סבב סבב יסבב סובב - +סבל סבל יסבול סובל לסבול +סבסד סבסד יסבסד מסבסד - +סגד סגד יסגוד סוגד לסגוד +סגסג סגסג יסגסג מסגסג - +סגר סגר יסגור סוגר לסגור +סדק סדק יסדוק סודק לסדוק +סדר סדר יסדר סודר - +סובב סובב יסובב מסובב - +סווג סוג יסוג מסוג - +סוכך סוכך יסוכך מסוכך לסוכך +סונכרן סונכרן יסונכרן מסונכרן - +סופר ספר יספר מספר - +סחב סחב יסחב סוחב - +סחט סחט יסחט סוחט לסחוט +סחף סחף יסחף סוחף - +סחר סחר יסחר סוחר לסחור +סטה סטה יסטה סוטה - +סיבן סבן יסבן מסבן - +סיבסד סיבסד יסבסד מסבסד לסבסד +סיגל סגל יסגל מסגל - +סידר סידר יסדר מסדר לסדר +סיווג סוג יסוג מסוג - +סיים סיים יסיים מסיים לסיים +סייע סייע יסייע מסייע לסייע +סיכך סיכך יסכך מסכך לסכך +סיכל סכל יסכל מסכל - +סיכם סיכם יסכם מסכם לסכם +סיכן סיכן יסכן מסכן לסכן +סילק סילק יסלק מסלק לסלק +סימל סימל יסמל מסמל לסמל +סימן סימן יסמן מסמן לסמן +סימר סמר יסמר מסמר - +סינגר סנגר יסנגר מסנגר - +סינכרן סינכרן יסנכרן מסנכרן לסנכרן +סינן סינן יסנן מסנן לסנן +סינף סנף יסנף מסנף - +סיפח סיפח יספח מספח לספח +סיפק סיפק יספק מספק לספק +סיפר סיפר יספר מספר לספר +סיקר סקר יסקר מסקר - +סירב סירב יסרב מסרב לסרב +סירק סרק יסרק מסרק - +סך סך יסוך סך - +סכך סכך יסכך סוכך - +סכר סכר יסכר סוכר - +סלח סלח יסלח סולח לסלוח +סלל סלל יסלל סולל - +סמך סמך יסמך סומך - +סנוור סנור יסנור מסנור - +סנט סנט יסנוט סונט לסנוט +סנכרן סנכרן יסנכרן מסנכרן - +ספג ספג יספוג סופג לספוג +ספד ספד יספד סופד - +ספן ספן יספן סופן - +ספק ספק יספק סופק - +ספר ספר יספור סופר לספור +סקר סקר יסקר סוקר - +סקרן סקרן יסקרן מסקרן - +סר סר יסור סר לסור +סרג סרג יסרג סורג - +סרטט סרטט יסרטט מסרטט - +סרטן סרטן יסרטן מסרטן - +סרק סרק יסרק סורק - +סתם סתם יסתום סותם לסתום +סתר סתר יסתור סותר לסתור +עבד עבד יעבוד עובד לעבוד +עבר עבר יעבור עובר לעבור +עגן עגן יעגן עוגן - +עדה עדה יעדה עודה - +עדר עדר יעדר עודר - +עודד עודד יעודד מעודד לעודד +עוה עוה יעוה מעוה - +עור עור יעור מעור - +עורר עורר יעורר מעורר לעורר +עז עז יעוז עז - +עזב עזב יעזוב עוזב לעזוב +עזר עזר יעזור עוזר לעזור +עטה עטה יעטה עוטה לעטות +עטן עטן יעטן עוטן - +עטף עטף יעטוף עוטף לעטוף +עטר עטר יעטר עוטר - +עיבד עבד יעבד מעבד - +עיבה עבה יעבה מעבה - +עיבר עיבר יעבר מעבר לעבר +עיגל עיגל יעגל מעגל לעגל +עידכן עדכן יעדכן מעדכן - +עיוות עות יעות מעות - +עיטר עיטר יעטר מעטר לעטר +עיין עין יעין מעין - +עייף יעף ייעף יעף - +עיכב עכב יעכב מעכב - +עיכל עכל יעכל מעכל - +עילף עילף יעלף מעלף לעלף +עיסה עסה יעסה מעסה - +עיפש עפש יעפש מעפש - +עיצב עיצב יעצב מעצב לעצב +עיקר עקר יעקר מעקר - +עירר ערר יערר מערר - +עישן עישן יעשן מעשן לעשן +עלה עלה יעלה עולה לעלות +עלז עלז יעלוז עולז לעלוז +עלעל עלעל יעלעל מעלעל - +עמד עמד יעמוד עומד לעמוד +עמל עמל יעמל עומל - +עמס עמס יעמס עומס - +עמק עמק יעמק - לעמוק +ענד ענד יענד עונד - +ענה ענה יענה עונה לענות +ענש ענש יענש עונש - +עף עף יעוף עף לעוף +עצם עצם יעצום עוצם לעצום +עצר עצר יעצור עוצר לעצור +עקב עקב יעקוב עוקב לעקוב +עקד עקד יעקוד עוקד לעקוד +עקף עקף יעקוף עוקף לעקוף +עקץ עקץ יעקוץ עוקץ לעקוץ +עקר עקר יעקר עוקר - +ערב ערב יערוב עורב לערוב +ערבב ערבב יערבב מערבב - +ערבל ערבל יערבל מערבל - +ערג ערג יערג עורג - +ערך ערך יערוך עורך לערוך +ערל ערל יערל עורל - +ערסל ערסל יערסל מערסל - +ערער ערער יערער מערער - +ערק ערק יערוק עורק לערוק +עשה עשה יעשה עושה לעשות +עתר עתר יעתר עותר - +פברק פברק יפברק מפברק - +פג פג יפוג פג - +פגע פגע יפגע פוגע לפגוע +פגש פגש יפגוש פוגש לפגוש +פדה פדה יפדה פודה לפדות +פוטר פוטר יפוטר מפוטר - +פונה פנה יפנה מפנה - +פוצה פוצה יפוצה מפוצה - +פוצץ פוצץ יפוצץ מפוצץ לפוצץ +פורסם פורסם יפורסם מפורסם - +פורר פורר יפורר מפורר - +פושט פושט יפושט מפושט - +פח פח יפוח פח - +פחד פחד יפחד פוחד לפחוד +פחס פחס יפחס פוחס - +פחת פחת יפחת פוחת - +פטר פטר יפטור פוטר לפטור +פיאר פיאר יפאר מפאר לפאר +פיגר פגר יפגר מפגר - +פיהק פיהק יפהק מפהק לפהק +פיזם פזם יפזם מפזם - +פיזר פזר יפזר מפזר - +פיחד פיחד יפחד מפחד לפחד +פיטר פיטר יפטר מפטר לפטר +פילל פילל יפלל מפלל לפלל +פילס פלס יפלס מפלס - +פילפל פילפל יפלפל מפלפל לפלפל +פינה פינה יפנה מפנה לפנות +פינק פנק יפנק מפנק - +פיסח פסח יפסח מפסח - +פיסל פיסל יפסל מפסל לפסל +פיספס פיספס יפספס מפספס לפספס +פיצה פיצה יפצה מפצה לפצות +פיקד פיקד יפקד מפקד לפקד +פיקח פקח יפקח מפקח - +פירק פרק יפרק מפרק - +פירש פרש יפרש מפרש - +פישט פישט יפשט מפשט לפשט +פישל פישל יפשל מפשל לפשל +פיתה פתה יפתה מפתה - +פיתח פתח יפתח מפתח - +פיתל פתל יפתל מפתל - +פלט פלט יפלט פולט - +פלפל פלפל יפלפל מפלפל - +פלרטט פלרטט יפלרטט מפלרטט - +פלש פלש יפלש פולש - +פנה פנה יפנה פונה לפנות +פנטז פנטז יפנטז מפנטז - +פנצ׳ר פנצ׳ר יפנצ׳ר מפנצ׳ר - +פסח פסח יפסח פוסח - +פסל פסל יפסול פוסל לפסול +פסע פסע יפסע פוסע - +פספס פספס יפספס מפספס - +פסק פסק יפסק פוסק - +פעה פעה יפעה פועה - +פעל פעל יפעל פועל - +פעם פעם יפעם פועם - +פעפע פעפע יפעפע מפעפע - +פצה פצה יפצה פוצה - +פצע פצע יפצע פוצע לפצוע +פקד פקד יפקוד פוקד לפקוד +פקח פקח יפקח פוקח לפקוח +פקק פקק יפקק פוקק - +פרגן פרגן יפרגן מפרגן - +פרה פרה יפרה פורה לפרות +פרח פרח יפרח פורח לפרוח +פרם פרם יפרם פורם - +פרס פרס יפרוס פורס לפרוס +פרסם פרסם יפרסם מפרסם - +פרע פרע יפרע פורע - +פרץ פרץ יפרוץ פורץ לפרוץ +פרק פרק יפרוק פורק לפרוק +פרש פרש יפרוש פורש לפרוש +פשט פשט יפשט פושט - +פשע פשע יפשע פושע לפשוע +פתח פתח יפתח פותח לפתוח +פתר פתר יפתר פותר - +צבא צבא יצבא צובא לצבוא +צבע צבע יצבע צובע לצבוע +צבר צבר יצבר צובר - +צד צד יצוד צד לצוד +צדק צדק יצדק צודק לצדוק +צוטט צוטט יצוטט מצוטט - +צונזר צונזר יצונזר מצונזר - +צופה צפה יצפה מצפה - +צחצח צחצח יצחצח מצחצח - +צחק צחק יצחק צוחק לצחוק +צחקק צחקק יצחקק מצחקק - +ציווה צוה יצוה מצוה - +ציוות צות יצות מצות - +ציטט ציטט יצטט מצטט לצטט +ציין צין יצין מצין - +צייר צייר יצייר מצייר לצייר +ציית צית יצית מצית - +צילם צילם יצלם מצלם לצלם +צינזר צינזר יצנזר מצנזר לצנזר +צינן צינן יצנן מצנן לצנן +ציפה ציפה יצפה מצפה לצפות +צירף צירף יצרף מצרף לצרף +צלב צלב יצלב צולב - +צלה צלה יצלה צולה - +צלח צלח יצלח צולח - +צלל צלל יצלל צולל - +צלע צלע יצלע צולע לצלוע +צלף צלף יצלף צולף - +צלצל צלצל יצלצל מצלצל - +צם צם יצום צם לצום +צמא צמא יצמא צמא לצמוא +צמח צמח יצמח צומח לצמוח +צמצם צמצם יצמצם מצמצם - +צנזר צנזר יצנזר מצנזר - +צנח צנח יצנח צונח - +צעד צעד יצעד צועד - +צען צען יצען צוען - +צעק צעק יצעק צועק לצעוק +צף צף יצוף צף לצוף +צפה צפה יצפה צופה לצפות +צפן צפן יצפן צופן - +צפר צפר יצפר צופר - +צץ צץ יצוץ צץ - +צר צר יצור צר - +צרח צרח יצרח צורח לצרוח +צרך צרך יצרוך צורך לצרוך +צ׳וטט צ׳וטט יצ׳וטט מצ׳וטט - +צ׳יפר צ׳פר יצ׳פר מצ׳פר - +קבע קבע יקבע קובע לקבוע +קבץ קבץ יקבץ קובץ - +קבר קבר יקבור קובר לקבור +קדח קדח יקדח קודח - +קדם קדם יקדם קודם לקדום +קדר קדר יקדר קודר - +קהה קהה יקהה קוהה - +קובע קובע יקובע מקובע - +קודש קודש יקודש מקודש - +קונטר קונטר יקונטר מקונטר - +קוצץ קצץ יקצץ מקצץ - +קוצר קוצר יקוצר מקוצר - +קושש קושש יקושש מקושש - +קטון קטון יקטן קטן לקטון +קטל קטל יקטל קוטל - +קטן קטן יקטן קטן לקטון +קטע קטע יקטע קוטע - +קטף קטף יקטוף קוטף לקטוף +קיבל קיבל יקבל מקבל לקבל +קיבע קיבע יקבע מקבע לקבע +קיבץ קבץ יקבץ מקבץ - +קידם קדם יקדם מקדם - +קידש קידש יקדש מקדש לקדש +קיווה קוה יקוה מקוה - +קיטב קיטב יקטב מקטב לקטב +קיטלג קיטלג יקטלג מקטלג לקטלג +קיטע קטע יקטע מקטע - +קיטר קיטר יקטר מקטר לקטר +קיים קיים יקיים מקיים לקיים +קילל קלל יקלל מקלל - +קילף קלף יקלף מקלף - +קילקל קילקל יקלקל מקלקל לקלקל +קימפל קמפל יקמפל מקמפל - +קינא קינא יקנא מקנא לקנא +קינח קינח יקנח מקנח לקנח +קינטר קינטר יקנטר מקנטר לקנטר +קינן קנן יקנן מקנן - +קיער קער יקער מקער - +קיפד קפד יקפד מקפד - +קיפל קיפל יקפל מקפל לקפל +קיפץ קפץ יקפץ מקפץ - +קיצץ קצץ יקצץ מקצץ - +קיצר קיצר יקצר מקצר לקצר +קירר קרר יקרר מקרר - +קישט קשט יקשט מקשט - +קישר קישר יקשר מקשר לקשר +קלה קלה יקלה קולה לקלות +קלח קלח יקלח קולח - +קלט קלט יקלוט קולט לקלוט +קלע קלע יקלע קולע - +קלף קלף יקלף קולף - +קם קם יקום קם לקום +קמץ קמץ יקמץ קומץ - +קנה קנה יקנה קונה לקנות +קעקע קעקע יקעקע מקעקע - +קפא קפא יקפא קופא לקפוא +קפץ קפץ יקפץ קופץ - +קצף קצף יקצוף קוצף לקצוף +קצץ קצץ יקצץ קוצץ - +קצר קצר יקצור קוצר לקצור +קרא קרא יקרא קורא לקרוא +קרב קרב יקרב קרב לקרוב +קרה קרה יקרה קורה לקרות +קרן קרן יקרן קורן לקרון +קרס קרס יקרס קורס - +קרע קרע יקרע קורע לקרוע +קרץ קרץ יקרץ קורץ - +קשר קשר יקשור קושר לקשור +ראה ראה יראה רואה לראות +רב רב יריב רב - +רבה רבה ירבה רובה לרבות +רבץ רבץ ירבץ רובץ - +רגם רגם ירגם רוגם - +רדה רדה ירדה רודה - +רדף רדף ירדף רודף - +רוהט רוהט ירוהט מרוהט - +רוכך רכך ירכך מרכך - +רומם רומם ירומם מרומם לרומם +רופא רופא ירופא מרופא - +רופד רופד ירופד מרופד - +רוקן רוקן ירוקן מרוקן לרוקן +רושש רושש ירושש מרושש - +רותך רותך ירותך מרותך - +רזה רזה ירזה רזה לרזות +רחם רחם ירחם רוחם - +רחף רחף ירחף רוחף - +רחץ רחץ ירחץ רוחץ לרחוץ +רטן רטן ירטן רוטן - +ריגל רגל ירגל מרגל - +ריגש רגש ירגש מרגש - +רידד רדד ירדד מרדד - +ריהט ריהט ירהט מרהט לרהט +ריחף ריחף ירחף מרחף לרחף +ריחרח ריחרח ירחרח מרחרח לרחרח +ריטט רטט ירטט מרטט - +ריכז רכז ירכז מרכז - +ריכך רכך ירכך מרכך - +ריכל רכל ירכל מרכל - +רימה רימה ירמה מרמה לרמות +ריסס ריסס ירסס מרסס לרסס +ריסק רסק ירסק מרסק - +ריפא ריפא ירפא מרפא לרפא +ריפד ריפד ירפד מרפד לרפד +ריפה רפה ירפה מרפה - +ריצד ריצד ירצד מרצד לרצד +ריצה ריצה ירצה מרצה לרצות +ריקע ריקע ירקע מרקע לרקע +רישת רישת ירשת מרשת לרשת +ריתך ריתך ירתך מרתך לרתך +רכב רכב ירכוב רוכב לרכוב +רכש רכש ירכש רוכש - +רמז רמז ירמוז רומז לרמוז +רמש רמש ירמש רומש - +רעב רעב ירעב רעב לרעוב +רעד רעד ירעד רועד - +רעה רעה ירעה רועה לרעות +רעש רעש ירעש רועש - +רפא רפא ירפא רופא לרפוא +רפה רפה ירפה רופה - +רץ רץ ירוץ רץ לרוץ +רצה רצה ירצה רוצה לרצות +רצח רצח ירצח רוצח לרצוח +רקד רקד ירקוד רוקד לרקוד +רקע רקע ירקע רוקע לרקוע +רשם רשם ירשום רושם לרשום +רתח רתח ירתח רותח - +רתם רתם ירתם רותם - +שאב שאב ישאב שואב - +שאל שאל ישאל שואל לשאול +שאף שאף ישאף שואף - +שב שב ישוב שב לשוב +שבה שבה ישבה שובה לשבות +שבע שבע ישבע שבע לשבוע +שבר שבר ישבור שובר לשבור +שבת שבת ישבות שובת לשבות +שגה שגה ישגה שוגה - +שגל שגל ישגל שוגל - +שגשג שגשג ישגשג משגשג - +שהה שהה ישהה שוהה לשהות +שודרג שדרג ישדרג משדרג - +שוחד שוחד ישוחד משוחד - +שוחח שוחח ישוחח משוחח לשוחח +שוחרר שוחרר ישוחרר משוחרר - +שוטט שוטט ישוטט משוטט לשוטט +שוכנע שכנע ישכנע משכנע - +שומן שמן ישמן משמן - +שומר שומר ישומר משומר - +שונה שונה ישונה משונה - +שורש שורש ישורש משורש - +שותק שותק ישותק משותק - +שזף שזף ישזף שוזף - +שחה שחה ישחה שוחה לשחות +שחט שחט ישחט שוחט לשחוט +שחף שחף ישחף שוחף - +שחק שחק ישחק שוחק לשחוק +שחרר שחרר ישחרר משחרר - +שט שט ישוט שט לשוט +שטח שטח ישטח שוטח - +שטף שטף ישטוף שוטף לשטוף +שיבח שיבח ישבח משבח לשבח +שיבט שבט ישבט משבט - +שיבר שבר ישבר משבר - +שיגע שיגע ישגע משגע לשגע +שיגר שיגר ישגר משגר לשגר +שידל שדל ישדל משדל - +שידר שידר ישדר משדר לשדר +שידרג שדרג ישדרג משדרג - +שיווק שוק ישוק משוק - +שיחד שיחד ישחד משחד לשחד +שיחק שיחק ישחק משחק לשחק +שיחרר שיחרר ישחרר משחרר לשחרר +שיטח שטח ישטח משטח - +שייט שיט ישיט משיט - +שייף שיף ישיף משיף - +שיכנע שכנע ישכנע משכנע - +שיכר שכר ישכר משכר - +שיכתב שיכתב ישכתב משכתב לשכתב +שילב שילב ישלב משלב לשלב +שילח שילח ישלח משלח לשלח +שילם שילם ישלם משלם לשלם +שימן שימן ישמן משמן לשמן +שימר שימר ישמר משמר לשמר +שימש שימש ישמש משמש לשמש +שינה שינה ישנה משנה לשנות +שינן שנן ישנן משנן - +שיעמם שעמם ישעמם משעמם - +שיער שיער ישער משער לשער +שיעשע שעשע ישעשע משעשע - +שיפר שיפר ישפר משפר לשפר +שיקף שקף ישקף משקף - +שיקר שיקר ישקר משקר לשקר +שירת שירת ישרת משרת לשרת +שיתף שתף ישתף משתף - +שיתק שיתק ישתק משתק לשתק +שכב שכב ישכב שוכב לשכב +שכח שכח ישכח שוכח לשכוח +שכל שכל ישכל שוכל - +שכן שכן ישכון שוכן לשכון +שכפל שכפל ישכפל משכפל - +שכר שכר ישכר שוכר - +שכתב שכתב ישכתב משכתב - +שלה שלה ישלה שולה - +שלח שלח ישלח שולח לשלוח +שלט שלט ישלוט שולט לשלוט +שלל שלל ישלל שולל - +שלם שלם ישלם שולם - +שלף שלף ישלוף שולף לשלוף +שלק שלק ישלק שולק - +שם שם ישים שם לשים +שמח שמח ישמח שמח לשמוח +שמט שמט ישמט שומט - +שמכר שמכר ישמכר משמכר - +שמן שמן ישמן שמן - +שמע שמע ישמע שומע לשמוע +שמר שמר ישמור שומר לשמור +שנא שנא ישנא שונא לשנוא +שנה שנה ישנה שונה - +שעבד שעבד ישעבד משעבד - +שעה שעה ישעה שועה - +שף שף ישוף שף לשוף +שפט שפט ישפוט שופט לשפוט +שפך שפך ישפוך שופך לשפוך +שפע שפע ישפע שופע לשפוע +שפשף שפשף ישפשף משפשף - +שקד שקד ישקד שוקד - +שקט שקט ישקוט שוקט לשקוט +שקל שקל ישקול שוקל לשקול +שקלל שקלל ישקלל משקלל - +שקע שקע ישקע שוקע - +שר שר ישיר שר לשיר +שרד שרד ישרוד שורד לשרוד +שרה שרה ישרה שורה - +שרטט שרטט ישרטט משרטט - +שרף שרף ישרוף שורף לשרוף +שרץ שרץ ישרץ שורץ - +שרק שרק ישרוק שורק לשרוק +שש שש ישיש שש לשיש +שת שת ישית שת לשית +שתה שתה ישתה שותה לשתות +שתל שתל ישתול שותל לשתול +שתק שתק ישתוק שותק לשתוק +שתת שתת ישתת שותת - +תאם תאם יתאם תואם - +תבע תבע יתבע תובע לתבוע +תגבר תגבר יתגבר מתגבר - +תדלק תדלק יתדלק מתדלק - +תהה תהה יתהה תוהה לתהות +תואר תואר יתואר מתואר - +תובל תובל יתובל מתובל - +תודלק תדלק יתדלק מתדלק - +תוחם תחם יתחם מתחם - +תוחקר תחקר יתחקר מתחקר - +תויק תיק יתיק מתיק - +תוסכל תסכל יתסכל מתסכל - +תועד תעד יתעד מתעד - +תופף תופף יתופף מתופף - +תזמן תזמן יתזמן מתזמן - +תחב תחב יתחב תוחב - +תחזק תחזק יתחזק מתחזק - +תחם תחם יתחם תוחם - +תחקר תחקר יתחקר מתחקר - +תיאר תיאר יתאר מתאר לתאר +תיבל תיבל יתבל מתבל לתבל +תיווך תוך יתוך מתוך - +תיחם תחם יתחם מתחם - +תייג תיג יתיג מתיג - +תייק תיק יתיק מתיק - +תיכנת תיכנת יתכנת מתכנת לתכנת +תילתל תילתל יתלתל מתלתל לתלתל +תיעב תיעב יתעב מתעב לתעב +תיעד תיעד יתעד מתעד לתעד +תיקן תיקן יתקן מתקן לתקן +תירגל תירגל יתרגל מתרגל לתרגל +תירגם תירגם יתרגם מתרגם לתרגם +תירץ תרץ יתרץ מתרץ - +תכנן תכנן יתכנן מתכנן - +תכנת תכנת יתכנת מתכנת - +תלה תלה יתלה תולה - +תלתל תלתל יתלתל מתלתל - +תמה תמה יתמה תמה לתמוה +תמך תמך יתמוך תומך לתמוך +תמרן תמרן יתמרן מתמרן - +תסכל תסכל יתסכל מתסכל - +תסס תסס יתסס תוסס - +תעה תעה יתעה תועה - +תפח תפח יתפח תופח - +תפס תפס יתפוס תופס לתפוס +תפעל תפעל יתפעל מתפעל - +תפקד תפקד יתפקד מתפקד - +תפר תפר יתפור תופר לתפור +תפש תפש יתפש תופש - +תקע תקע יתקע תוקע - +תקף תקף יתקף תוקף - +תר תר יתור תר לתור +תרבת תרבת יתרבת מתרבת - +תרגל תרגל יתרגל מתרגל - +תרגם תרגם יתרגם מתרגם - +תרם תרם יתרום תורם לתרום diff --git a/docs/heb/adjudications.tsv b/docs/heb/adjudications.tsv new file mode 100644 index 00000000..9af0364d --- /dev/null +++ b/docs/heb/adjudications.tsv @@ -0,0 +1 @@ +# lemma features chosen note diff --git a/scripts/correctness.py b/scripts/correctness.py index 72dba9a8..816ae754 100644 --- a/scripts/correctness.py +++ b/scripts/correctness.py @@ -37,7 +37,7 @@ "hin": "Hindi", "swa": "Swahili", "tam": "Tamil", "tel": "Telugu", "tgl": "Tagalog", "pes": "Persian", "kan": "Kannada", "guj": "Gujarati", "urd": "Urdu", "ben": "Bengali", "mar": "Marathi", - "mkd": "Macedonian", "afr": "Afrikaans", "bul": "Bulgarian", "ell": "Greek", "sqi": "Albanian", "pol": "Polish", "aze": "Azerbaijani", "uzb": "Uzbek", "tuk": "Turkmen", "bel": "Belarusian", "cym": "Welsh", "fao": "Faroese", "glg": "Galician", "kaz": "Kazakh", "lat": "Latin", "ltz": "Luxembourgish", "oci": "Occitan", "tat": "Tatar", "ydd": "Yiddish", "ara": "Arabic", + "mkd": "Macedonian", "afr": "Afrikaans", "bul": "Bulgarian", "ell": "Greek", "sqi": "Albanian", "pol": "Polish", "aze": "Azerbaijani", "uzb": "Uzbek", "tuk": "Turkmen", "bel": "Belarusian", "cym": "Welsh", "fao": "Faroese", "glg": "Galician", "kaz": "Kazakh", "lat": "Latin", "ltz": "Luxembourgish", "oci": "Occitan", "tat": "Tatar", "ydd": "Yiddish", "ara": "Arabic", "heb": "Hebrew", } diff --git a/scripts/heb/fetch_kaikki.sh b/scripts/heb/fetch_kaikki.sh new file mode 100755 index 00000000..a9141ab5 --- /dev/null +++ b/scripts/heb/fetch_kaikki.sh @@ -0,0 +1,6 @@ +#!/bin/sh +set -e +mkdir -p data/heb +curl -sL "https://kaikki.org/dictionary/Hebrew/pos-verb/kaikki.org-dictionary-Hebrew-by-pos-verb.jsonl" -o data/heb/kaikki-verbs.jsonl +python3 scripts/heb/kaikki_to_tsv.py data/heb/kaikki-verbs.jsonl > data/heb/kaikki.tsv +wc -l data/heb/kaikki.tsv diff --git a/scripts/heb/fetch_unimorph.sh b/scripts/heb/fetch_unimorph.sh new file mode 100755 index 00000000..3d7f48c2 --- /dev/null +++ b/scripts/heb/fetch_unimorph.sh @@ -0,0 +1,6 @@ +#!/bin/sh +set -e +mkdir -p data/heb +curl -sL "https://raw.githubusercontent.com/unimorph/heb/master/heb" -o data/heb/unimorph-raw.tsv +python3 scripts/heb/unimorph_to_tsv.py data/heb/unimorph-raw.tsv > data/heb/unimorph.tsv +wc -l data/heb/unimorph.tsv diff --git a/scripts/heb/kaikki_to_tsv.py b/scripts/heb/kaikki_to_tsv.py new file mode 100755 index 00000000..0c39cf34 --- /dev/null +++ b/scripts/heb/kaikki_to_tsv.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +"""kaikki.org Hebrew verbs → shared TSV. Hebrew Wiktionary forms carry niqqud +which UniMorph does not, so points (U+0591–U+05C7 combining marks) are stripped; +the residual disagreement is ktiv male vs chaser, left for the harness to +exclude. Tags map to UniMorph's cell structure: present has no person; 1st +person and the past 3pl carry no gender.""" +import json, sys, unicodedata +PERSON={"first-person":"1","second-person":"2","third-person":"3"} +NUM={"singular":"SG","plural":"PL"} +GEN={"masculine":"MASC","feminine":"FEM"} +def strip_niqqud(s): + return "".join(c for c in unicodedata.normalize("NFC",s) + if not (0x591<=ord(c)<=0x5C7 and unicodedata.category(c)=="Mn")) +def canon(tags): + t=set(tags) + if t & {"participle","infinitive","noun-from-verb","negative","error-unrecognized-form"}: + return None + p=next((PERSON[k] for k in PERSON if k in t),None) + num=next((NUM[k] for k in NUM if k in t),None) + g=next((GEN[k] for k in GEN if k in t),None) + if "imperative" in t: tense="IMP" + elif "future" in t: tense="FUT" + elif "past" in t: tense="PST" + elif "present" in t: tense="PRS" + else: return None + if num is None: return None + if tense=="PRS": p=None + elif p is None: return None + if p=="1": g=None + if tense=="PST" and p=="3" and num=="PL": g=None + body=[x for x in (p,num,g,tense) if x] + return "V;"+";".join(sorted(body)) +def main(path): + for line in open(path): + try: e=json.loads(line) + except: continue + lem=strip_niqqud((e.get("word") or "").strip()) + if not lem or " " in lem: continue + for f in e.get("forms",[]): + if "romanization" in f.get("tags",[]): continue + form=strip_niqqud((f.get("form") or "").strip()) + if not form or " " in form: continue + c=canon(f.get("tags",[])) + if c: print(f"{lem}\t{form}\t{c}") +if __name__=="__main__": main(sys.argv[1]) diff --git a/scripts/heb/mine.py b/scripts/heb/mine.py new file mode 100644 index 00000000..f496ab3f --- /dev/null +++ b/scripts/heb/mine.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +"""Mine Hebrew principal parts into data/heb/parts.tsv: past-3sgm, future-3sgm, +present-masc-sg and the infinitive — enough to regularly derive the paradigm. +Prefer the value both oracles agree on, else UniMorph, else kaikki.""" +import sys +def load(p): + d={} + for line in open(p): + a=line.rstrip("\n").split("\t") + if len(a)==3: d[(a[0],a[2])]=a[1] + return d +def main(u_path,k_path): + u=load(u_path); k=load(k_path) + PAST="V;3;MASC;PST;SG"; FUT="V;3;FUT;MASC;SG"; PRS="V;MASC;PRS;SG"; NFIN="V;NFIN" + def pick(l,c): + a=u.get((l,c)); b=k.get((l,c)) + if a and b and a==b: return a + return a or b or "-" + lemmas=sorted(set(l for l,_ in u)|set(l for l,_ in k)) + print("# lemma\tpast\tfuture\tpresent\tinfinitive") + for l in lemmas: + past=pick(l,PAST); fut=pick(l,FUT) + if past=="-" and fut=="-": continue + print(f"{l}\t{past}\t{fut}\t{pick(l,PRS)}\t{pick(l,NFIN)}") +if __name__=="__main__": main(sys.argv[1],sys.argv[2]) diff --git a/scripts/heb/mine_overrides.py b/scripts/heb/mine_overrides.py new file mode 100644 index 00000000..9de6330d --- /dev/null +++ b/scripts/heb/mine_overrides.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python3 +"""Mine the weak-root residue into data/heb/overrides.tsv. + +The productive rules in src/heb.rs carry the strong-verb bulk and the regular +weak classes (ל״ה final-ה, ע״ו/ע״י hollow, hifil medial hireq-yod, final-ת/נ +mergers). A handful of genuinely irregular roots stay uncovered — ה-final +strong homographs of ל״ה verbs (נגה, כמה, תמה), double-waw ל״ה (חווה, נכווה), +פ״נ assimilation, and lexical irregulars (נתן, יכול, קטון). This script +captures exactly those cells as (lemma, features, form) overrides. + +Method: blank the override table, run the golden harness (which diffs the +engine against the two-oracle agreement gold and writes every mismatch to +target/golden_heb_mismatches.tsv), then emit one accepted gold form per +mismatching cell. Overrides are consulted before the rules, so this closes the +gap while keeping the split honest — the override count is the residue only. + +Run from the repo root: python3 scripts/heb/mine_overrides.py +Then: git add -f data/heb/overrides.tsv +""" +import os +import subprocess +import sys + +ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")) +OVERRIDES = os.path.join(ROOT, "data", "heb", "overrides.tsv") +MISMATCHES = os.path.join(ROOT, "target", "golden_heb_mismatches.tsv") + +HEADER = "# lemma\tfeatures\tform\n" +HEADER += "# Mined weak-root residue: cells the rules do not reach (ה-final\n" +HEADER += "# strong homographs, double-waw ל״ה, פ״נ, and lexical irregulars).\n" +HEADER += "# Regenerate with scripts/heb/mine_overrides.py.\n" + + +def main(): + # 1. Blank the overrides so the harness scores the pure rule engine. + with open(OVERRIDES, "w", encoding="utf-8") as f: + f.write(HEADER) + + # 2. Run the harness to regenerate the mismatch dump. + subprocess.run( + ["cargo", "run", "--release", "--quiet", "--bin", "golden_heb"], + cwd=ROOT, + check=True, + ) + + # 3. Turn each mismatch into an override, choosing the first accepted + # gold variant (any variant in the agreement counts as correct). + rows = [] + with open(MISMATCHES, encoding="utf-8") as f: + for line in f: + parts = line.rstrip("\n").split("\t") + if len(parts) < 4: + continue + lemma, features, _engine, gold = parts[0], parts[1], parts[2], parts[3] + variant = gold.split("|")[0] + if variant: + rows.append((lemma, features, variant)) + + rows.sort() + with open(OVERRIDES, "w", encoding="utf-8") as f: + f.write(HEADER) + for lemma, features, form in rows: + f.write(f"{lemma}\t{features}\t{form}\n") + + print(f"wrote {len(rows)} overrides to {OVERRIDES}", file=sys.stderr) + + +if __name__ == "__main__": + main() diff --git a/scripts/heb/unimorph_to_tsv.py b/scripts/heb/unimorph_to_tsv.py new file mode 100755 index 00000000..9a0fcce2 --- /dev/null +++ b/scripts/heb/unimorph_to_tsv.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python3 +"""UniMorph Hebrew verbs → shared TSV, features canonicalised to V;+sorted +tokens. Forms are unvoweled ktiv male (the modern standard); kept as is.""" +import sys, unicodedata +def main(path): + for line in open(path): + a=line.rstrip("\n").split("\t") + if len(a)<3 or not a[2].startswith("V"): continue + lem=unicodedata.normalize("NFC",a[0]).strip() + form=unicodedata.normalize("NFC",a[1]).strip() + if not lem or not form or " " in lem or " " in form: continue + toks=[t for t in a[2].split(";")[1:] if t] + print(f"{lem}\t{form}\tV;"+";".join(sorted(toks))) +if __name__=="__main__": main(sys.argv[1]) diff --git a/src/bin/golden_heb.rs b/src/bin/golden_heb.rs new file mode 100644 index 00000000..0385da98 --- /dev/null +++ b/src/bin/golden_heb.rs @@ -0,0 +1,43 @@ +//! Hebrew golden-test harness: diff the engine against the agreement of the +//! two Hebrew oracles (UniMorph and kaikki.org, the latter with niqqud +//! stripped). Usage: cargo run --release --bin golden_heb [gold.tsv ...] [--check] + +use ablaut::harness::{run, Spec}; +use ablaut::heb::Verb; + +const CATEGORIES: [&str; 5] = ["past", "present", "future", "imperative", "infinitive"]; + +fn category(features: &str) -> &'static str { + let has = |t: &str| features.split(';').any(|x| x == t); + if has("IMP") { + "imperative" + } else if has("NFIN") { + "infinitive" + } else if has("FUT") { + "future" + } else if has("PRS") { + "present" + } else { + "past" + } +} + +fn generate(verb: &Verb, features: &str) -> Option> { + Some(vec![verb.form(features)?]) +} + +fn main() { + run(Spec { + lang: "heb", + default_paths: ["data/heb/unimorph.tsv", "data/heb/kaikki.tsv"], + adjudications: "docs/heb/adjudications.tsv", + mismatches: "target/golden_heb_mismatches.tsv", + categories: &CATEGORIES, + min_form_pct: 99.8, + min_lemma_coverage_pct: 99.5, + carry_features: &[], + parse: |lemma| Verb::from_lemma(lemma).ok(), + generate, + category, + }); +} diff --git a/src/heb.rs b/src/heb.rs new file mode 100644 index 00000000..9f8cfe0b --- /dev/null +++ b/src/heb.rs @@ -0,0 +1,645 @@ +//! Modern Hebrew verb conjugation (unvoweled ktiv male). +//! +//! Hebrew verbs are built on triconsonantal (and quadriliteral) roots in one +//! of seven binyanim. The lemma is the unvoweled ktiv-male 3sg-masc past +//! (שמר). The engine resolves it to a few mined principal parts +//! (`data/heb/parts.tsv`: past-3sgm, future-3sgm, present-masc-sg, infinitive) +//! and derives the paradigm by the regular person/number/gender affixation of +//! the past (suffixes), future (prefix + stem + suffix, with mater reduction), +//! and present (participle gender/number). Weak roots — final-ה (ל״ה), hollow +//! (ע״ו/ע״י), hifil (medial hireq-yod), final-ת/נ mergers, פ״א — are handled by +//! dedicated rules; a small mined-override layer (`data/heb/overrides.tsv`) +//! patches the residue the rules do not reach. +//! +//! Feature strings are the shared canonical form: `V;` + tokens sorted, e.g. +//! past 3sg f → V;3;FEM;PST;SG +//! future 2pl m → V;2;FUT;MASC;PL +//! present fem sg → V;FEM;PRS;SG (no person) +//! infinitive → V;NFIN + +use std::collections::HashMap; +use std::sync::OnceLock; + +/// Why a form cannot be produced. +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum Error { + /// The lemma is not in the mined principal-parts table. + NotAVerb, +} + +impl std::fmt::Display for Error { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "not a Hebrew verb we know") + } +} + +static PARTS_TSV: &str = include_str!("../data/heb/parts.tsv"); +static OVERRIDES_TSV: &str = include_str!("../data/heb/overrides.tsv"); + +const HE: char = 'ה'; +const WAW: char = 'ו'; +const YOD: char = 'י'; +const TAV: char = 'ת'; +const NUN: char = 'נ'; +const ALEF: char = 'א'; + +/// Map a word-final letter to its medial form (used when a suffix follows). +fn medial(c: char) -> char { + match c { + 'ך' => 'כ', + 'ם' => 'מ', + 'ן' => NUN, + 'ף' => 'פ', + 'ץ' => 'צ', + other => other, + } +} + +/// Medialize the last letter of a stem (it is no longer word-final because a +/// suffix will follow). +fn medialize_last(stem: &[char]) -> Vec { + let mut v = stem.to_vec(); + if let Some(last) = v.last_mut() { + *last = medial(*last); + } + v +} + +/// Append a suffix to a stem, medializing the stem's final letter and +/// collapsing a geminate ת/נ at the seam (כרת+ת → כרת, הבן+נו → הבנו). +fn join(stem: &[char], suffix: &[char]) -> Vec { + let mut v = medialize_last(stem); + if let (Some(&last), Some(&first)) = (v.last(), suffix.first()) { + if last == first && (last == TAV || last == NUN) { + v.extend_from_slice(&suffix[1..]); + return v; + } + } + v.extend_from_slice(suffix); + v +} + +/// The mined principal parts of one lemma; "-" columns become None. +#[derive(Debug, Clone)] +pub struct Parts { + pub past: String, + pub future: String, + pub present: Option, + pub infinitive: Option, +} + +fn table() -> &'static HashMap { + static MAP: OnceLock> = OnceLock::new(); + MAP.get_or_init(|| { + let mut m = HashMap::new(); + for line in PARTS_TSV.lines() { + if line.starts_with('#') || line.is_empty() { + continue; + } + let c: Vec<&str> = line.split('\t').collect(); + if c.len() < 3 { + continue; + } + let opt = |s: &str| (s != "-" && !s.is_empty()).then(|| s.to_string()); + m.insert( + c[0].to_string(), + Parts { + past: c[1].to_string(), + future: c[2].to_string(), + present: c.get(3).and_then(|s| opt(s)), + infinitive: c.get(4).and_then(|s| opt(s)), + }, + ); + } + m + }) +} + +/// Mined per-cell overrides: (lemma, features) -> form. +fn overrides() -> &'static HashMap<(String, String), String> { + static MAP: OnceLock> = OnceLock::new(); + MAP.get_or_init(|| { + let mut m = HashMap::new(); + for line in OVERRIDES_TSV.lines() { + if line.starts_with('#') || line.is_empty() { + continue; + } + let c: Vec<&str> = line.split('\t').collect(); + if c.len() < 3 { + continue; + } + m.insert((c[0].to_string(), c[1].to_string()), c[2].to_string()); + } + m + }) +} + +// --- feature parsing --- + +#[derive(Clone, Copy, PartialEq, Eq)] +enum Tense { + Past, + Present, + Future, + Imperative, + Infinitive, +} + +#[derive(Clone, Copy, PartialEq, Eq)] +enum Num { + Sg, + Pl, +} + +#[derive(Clone, Copy, PartialEq, Eq)] +enum Gen { + Masc, + Fem, + None, +} + +#[derive(Clone, Copy)] +struct Feat { + tense: Tense, + person: u8, // 0 for present (no person) + number: Num, + gender: Gen, +} + +fn parse_feat(features: &str) -> Option { + let has = |t: &str| features.split(';').any(|x| x == t); + let tense = if has("NFIN") { + Tense::Infinitive + } else if has("IMP") { + Tense::Imperative + } else if has("FUT") { + Tense::Future + } else if has("PRS") { + Tense::Present + } else if has("PST") { + Tense::Past + } else { + return None; + }; + let person = if has("1") { + 1 + } else if has("2") { + 2 + } else if has("3") { + 3 + } else { + 0 + }; + let number = if has("PL") { Num::Pl } else { Num::Sg }; + let gender = if has("FEM") { + Gen::Fem + } else if has("MASC") { + Gen::Masc + } else { + Gen::None + }; + Some(Feat { + tense, + person, + number, + gender, + }) +} + +/// Which family of suffix a future/imperative slot takes. +#[derive(Clone, Copy, PartialEq, Eq)] +enum Suf { + None, // ∅ + VowelI, // -י (2sg fem) + VowelU, // -ו (m-pl) + Nun, // -נה (f-pl) +} + +/// One Hebrew verb, resolved to its principal parts. +pub struct Verb { + parts: Parts, + lemma: String, +} + +impl Verb { + /// Look a lemma (unvoweled ktiv-male 3sg-masc past) up in the mined table. + pub fn from_lemma(lemma: &str) -> Result { + table() + .get(lemma) + .map(|p| Verb { + parts: p.clone(), + lemma: lemma.to_string(), + }) + .ok_or(Error::NotAVerb) + } + + /// The form for a canonical feature string, or None for a cell the engine + /// does not (yet) generate. + pub fn form(&self, features: &str) -> Option { + if let Some(o) = overrides().get(&(self.lemma.clone(), features.to_string())) { + return Some(o.clone()); + } + let f = parse_feat(features)?; + let chars = match f.tense { + Tense::Past => self.past(&f), + Tense::Present => self.present(&f), + Tense::Future => self.future(&f), + Tense::Imperative => self.imperative(&f), + Tense::Infinitive => return self.parts.infinitive.clone(), + }?; + Some(chars.into_iter().collect()) + } + + /// True for the "short" qal present (statives and hollow verbs), whose + /// participle equals the past and takes a -ה feminine (קם→קמה, גדל→גדלה). + /// A נפעל participle also equals its past (נשמר) but is longer and takes -ת, + /// so the length guard separates the two. + fn short_qal(&self) -> bool { + matches!(&self.parts.present, Some(p) if *p == self.parts.past) + && self.parts.past.chars().count() <= 3 + } + + /// True for a hifil: its present participle is מ + root with a hireq-yod + /// before the last radical (מדליק, מכיר, מבין), its past starts with ה, and + /// it is neither a hofal (מו-) nor a metathesis hitpael (מ + sibilant + ת). + /// Hifil takes a -ה feminine present and drops that medial yod in the past. + fn is_hifil(&self) -> bool { + let Some(pres) = &self.parts.present else { + return false; + }; + let p: Vec = pres.chars().collect(); + let n = p.len(); + if p.first() != Some(&'מ') || !self.parts.past.starts_with(HE) { + return false; + } + // The hireq-yod before the last radical is hifil's signature; a hofal + // (מוקם) or hitpael (מסתתר) lacks it, so this alone separates them from + // the surface-similar מו-/מסת- hifils (מוסיף, מסתיר). + n >= 2 && p[n - 2] == YOD + } + + /// True for a hollow verb (ע״ו/ע״י): its medial ו/י is a root letter and + /// must survive mater reduction under a vowel suffix. + fn is_hollow(&self) -> bool { + // A two-letter past (קם, מת, רב) is always hollow/geminate; a short qal + // whose future stem carries a medial mater is hollow too (אור, בוש). + if self.parts.past.chars().count() == 2 { + return true; + } + if self.short_qal() { + let stem: Vec = self.parts.future.chars().skip(1).collect(); + let n = stem.len(); + return n >= 2 && matches!(stem[n - 2], WAW | YOD); + } + false + } + + // --- past --- + + fn past(&self, f: &Feat) -> Option> { + let past: Vec = self.parts.past.chars().collect(); + // 3sg masc is the citation itself. + if f.person == 3 && f.number == Num::Sg && f.gender == Gen::Masc { + return Some(past); + } + let suffix: &[char] = &self.past_suffix(f); + let vowel_suffix = matches!(suffix, [HE] | [WAW]); + + // ל״ה: drop the final ה; consonant suffixes insert a linking י. + if past.last() == Some(&HE) { + let base = &past[..past.len() - 1]; + let mut out = base.to_vec(); + if f.person == 3 && f.gender == Gen::Fem && f.number == Num::Sg { + out.extend([TAV, HE]); // בנתה + } else if vowel_suffix { + out.extend_from_slice(suffix); // בנו + } else { + out.push(YOD); // בניתי / בנית / בנינו + out.extend_from_slice(suffix); + } + return Some(out); + } + + // Non-ל״ה. Hifil drops its medial hireq-yod before a consonant suffix + // (הדליק → הדלקת, הבין → הבנתי). + let mut stem = past; + if !vowel_suffix && self.is_hifil() { + let n = stem.len(); + if n >= 2 && stem[n - 2] == YOD { + stem.remove(n - 2); + } + } + Some(join(&stem, suffix)) + } + + fn past_suffix(&self, f: &Feat) -> Vec { + match (f.person, f.number, f.gender) { + (3, Num::Sg, Gen::Fem) => vec![HE], + (3, Num::Pl, _) => vec![WAW], + (2, Num::Sg, _) => vec![TAV], + (2, Num::Pl, Gen::Masc) => vec![TAV, 'ם'], + (2, Num::Pl, Gen::Fem) => vec![TAV, 'ן'], + (1, Num::Sg, _) => vec![TAV, YOD], + (1, Num::Pl, _) => vec![NUN, WAW], + _ => vec![], + } + } + + // --- present (participle affixation) --- + + fn present(&self, f: &Feat) -> Option> { + let part: Vec = self.parts.present.as_ref()?.chars().collect(); + let lamed_he = part.last() == Some(&HE); + // masc sg is the participle itself. + if f.gender == Gen::Masc && f.number == Num::Sg { + return Some(part); + } + if f.number == Num::Sg { + // feminine singular + if lamed_he { + // נפעל ל״ה takes a -ית feminine (נראה → נראית); qal ל״ה is + // identical to the masculine (בונה). The נפעל participle is + // נ + two radicals + ה with no holam-waw after the נ. + if part.first() == Some(&NUN) && part.get(1) != Some(&WAW) { + let mut v = part[..part.len() - 1].to_vec(); + v.extend([YOD, TAV]); + return Some(v); + } + return Some(part); // בונה + } + let mut v = medialize_last(&part); + // A -ה feminine for the hifil / short qal (מדליקה, קמה); a -ת + // feminine otherwise (שומרת), appended without gemination collapse + // so a ת-final participle keeps both tavs (שובת → שובתת). + v.push(if self.short_qal() || self.is_hifil() { + HE + } else { + TAV + }); + return Some(v); + } + // plural: drop a final ה, then +ים / +ות + let base: Vec = if lamed_he { + part[..part.len() - 1].to_vec() + } else { + part + }; + let mut v = medialize_last(&base); + if f.gender == Gen::Fem { + v.extend([WAW, TAV]); + } else { + v.extend([YOD, 'ם']); + } + Some(v) + } + + // --- future --- + + fn future(&self, f: &Feat) -> Option> { + // 3sg masc is the mined future part. + if f.person == 3 && f.number == Num::Sg && f.gender == Gen::Masc { + return Some(self.parts.future.chars().collect()); + } + let stem: Vec = self.parts.future.chars().skip(1).collect(); + let prefix = self.future_prefix(f); + let suf = future_suffix(f); + let mut out = vec![prefix]; + out.extend(self.future_body(&stem, suf)); + Some(out) + } + + /// The prefix consonant for a future/imperfect slot. + fn future_prefix(&self, f: &Feat) -> char { + match f.person { + 1 => { + if f.number == Num::Sg { + ALEF + } else { + NUN + } + } + 2 => TAV, + _ => { + // 3rd person: feminine (sg or pl) takes ת, masculine takes י. + if f.gender == Gen::Fem { + TAV + } else { + YOD + } + } + } + } + + /// The stem+suffix body of a future form (everything after the prefix). + fn future_body(&self, stem: &[char], suf: Suf) -> Vec { + let lamed_he = stem.last() == Some(&HE); + if lamed_he { + let base = &stem[..stem.len() - 1]; + return match suf { + Suf::None => stem.to_vec(), + Suf::VowelI => { + let mut v = base.to_vec(); + v.push(YOD); + v + } + Suf::VowelU => { + let mut v = base.to_vec(); + v.push(WAW); + v + } + Suf::Nun => { + let mut v = base.to_vec(); + v.extend([YOD, NUN, HE]); + v + } + }; + } + match suf { + Suf::None => stem.to_vec(), + Suf::VowelI => join(&self.reduce_holam(stem), &[YOD]), + Suf::VowelU => join(&self.reduce_holam(stem), &[WAW]), + Suf::Nun => join(&reduce_mater(stem), &[NUN, HE]), + } + } + + /// Drop the theme-vowel holam ו before a vowel suffix (ישמור → ישמרו). A + /// hollow verb's medial ו/י is a root letter and is kept (יקום → יקומו). + fn reduce_holam(&self, stem: &[char]) -> Vec { + let n = stem.len(); + if !self.is_hollow() && n >= 2 && stem[n - 2] == WAW { + let mut v = stem.to_vec(); + v.remove(n - 2); + return v; + } + stem.to_vec() + } +} + +/// Drop any medial mater (ו/י) before the -נה feminine-plural ending +/// (ישמור → תשמרנה, יקום → תקמנה, ידליק → תדלקנה). +fn reduce_mater(stem: &[char]) -> Vec { + let n = stem.len(); + if n >= 2 && matches!(stem[n - 2], WAW | YOD) { + let mut v = stem.to_vec(); + v.remove(n - 2); + return v; + } + stem.to_vec() +} + +fn future_suffix(f: &Feat) -> Suf { + match (f.number, f.gender) { + (Num::Sg, Gen::Fem) if f.person == 2 => Suf::VowelI, + (Num::Pl, Gen::Fem) => Suf::Nun, + (Num::Pl, Gen::Masc) => Suf::VowelU, + _ => Suf::None, + } +} + +impl Verb { + // --- imperative (not scored; derived from the future) --- + + fn imperative(&self, f: &Feat) -> Option> { + // Build the matching 2nd-person future and drop its prefix. + let fut = Feat { + tense: Tense::Future, + person: 2, + number: f.number, + gender: f.gender, + }; + let full = self.future(&fut)?; + Some(full[1..].to_vec()) + } +} + +/// A compact conjugation table shared by the WebAssembly and Python bindings. +/// Each vector is in the fixed paradigm order (see `PNG`). The present has no +/// person; the imperative keeps only its four 2nd-person cells. +#[cfg_attr(feature = "serde", derive(serde::Serialize))] +#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))] +pub struct Table { + /// The unvoweled citation (3sg-masc past). + pub lemma: String, + pub past: Vec>, + pub present: Vec>, + pub future: Vec>, + pub imperative: Vec>, + pub infinitive: Option, +} + +/// (person, number, gender) for the finite past/future paradigm. +const PNG: [(u8, &str, &str); 10] = [ + (1, "SG", ""), + (2, "SG", "MASC"), + (2, "SG", "FEM"), + (3, "SG", "MASC"), + (3, "SG", "FEM"), + (1, "PL", ""), + (2, "PL", "MASC"), + (2, "PL", "FEM"), + (3, "PL", "MASC"), + (3, "PL", "FEM"), +]; + +/// (number, gender) for the present participle. +const PRS_NG: [(&str, &str); 4] = [("SG", "MASC"), ("SG", "FEM"), ("PL", "MASC"), ("PL", "FEM")]; + +/// (number, gender) for the four 2nd-person imperative cells. +const IMP_NG: [(&str, &str); 4] = [("SG", "MASC"), ("SG", "FEM"), ("PL", "MASC"), ("PL", "FEM")]; + +impl Table { + #[must_use] + pub fn build(v: &Verb) -> Self { + let cell = |toks: Vec<&str>| -> Option { + let mut t: Vec = toks.into_iter().map(str::to_string).collect(); + t.sort(); + v.form(&format!("V;{}", t.join(";"))) + }; + let finite = |tense: &str| -> Vec> { + PNG.iter() + .map(|(p, n, g)| { + let ps = p.to_string(); + let mut toks = vec![ps.as_str(), n, tense]; + if !g.is_empty() { + toks.push(g); + } + cell(toks) + }) + .collect() + }; + let present = PRS_NG + .iter() + .map(|(n, g)| cell(vec![n, g, "PRS"])) + .collect(); + let imperative = IMP_NG + .iter() + .map(|(n, g)| cell(vec!["2", n, g, "IMP"])) + .collect(); + Self { + lemma: v.lemma.clone(), + past: finite("PST"), + present, + future: finite("FUT"), + imperative, + infinitive: v.form("V;NFIN"), + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + fn f(lemma: &str, feat: &str) -> String { + Verb::from_lemma(lemma).unwrap().form(feat).unwrap() + } + + #[test] + fn strong_shamar() { + assert_eq!(f("שמר", "V;3;MASC;PST;SG"), "שמר"); + assert_eq!(f("שמר", "V;3;FEM;PST;SG"), "שמרה"); + assert_eq!(f("שמר", "V;3;PL;PST"), "שמרו"); + assert_eq!(f("שמר", "V;1;PST;SG"), "שמרתי"); + assert_eq!(f("שמר", "V;MASC;PRS;SG"), "שומר"); + assert_eq!(f("שמר", "V;FEM;PRS;SG"), "שומרת"); + assert_eq!(f("שמר", "V;MASC;PL;PRS"), "שומרים"); + assert_eq!(f("שמר", "V;2;FEM;FUT;SG"), "תשמרי"); + assert_eq!(f("שמר", "V;3;FUT;MASC;PL"), "ישמרו"); + } + + #[test] + fn lamed_he_bana() { + assert_eq!(f("בנה", "V;3;FEM;PST;SG"), "בנתה"); + assert_eq!(f("בנה", "V;3;PL;PST"), "בנו"); + assert_eq!(f("בנה", "V;1;PST;SG"), "בניתי"); + assert_eq!(f("בנה", "V;FEM;PRS;SG"), "בונה"); + assert_eq!(f("בנה", "V;2;FEM;FUT;SG"), "תבני"); + assert_eq!(f("בנה", "V;2;FEM;FUT;PL"), "תבנינה"); + } + + #[test] + fn hollow_kam() { + assert_eq!(f("קם", "V;3;FEM;PST;SG"), "קמה"); + assert_eq!(f("קם", "V;1;PST;SG"), "קמתי"); + assert_eq!(f("קם", "V;FEM;PRS;SG"), "קמה"); + assert_eq!(f("קם", "V;2;FEM;FUT;SG"), "תקומי"); + assert_eq!(f("קם", "V;3;FUT;MASC;PL"), "יקומו"); + } + + #[test] + fn piel_diber() { + assert_eq!(f("דיבר", "V;FEM;PRS;SG"), "מדברת"); + assert_eq!(f("דיבר", "V;2;FEM;FUT;SG"), "תדברי"); + assert_eq!(f("דיבר", "V;2;FEM;FUT;PL"), "תדברנה"); + } + + #[test] + fn hifil_hidlik() { + assert_eq!(f("הדליק", "V;2;MASC;PST;SG"), "הדלקת"); + assert_eq!(f("הדליק", "V;1;PST;SG"), "הדלקתי"); + assert_eq!(f("הדליק", "V;3;FEM;PST;SG"), "הדליקה"); + assert_eq!(f("הדליק", "V;FEM;PRS;SG"), "מדליקה"); + assert_eq!(f("הדליק", "V;2;FEM;FUT;SG"), "תדליקי"); + assert_eq!(f("הדליק", "V;2;FEM;FUT;PL"), "תדלקנה"); + } +} diff --git a/src/lib.rs b/src/lib.rs index 9e28f0bd..deca0e0f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -33,6 +33,7 @@ pub mod glg; pub mod guj; #[doc(hidden)] pub mod harness; +pub mod heb; pub mod hin; pub mod hye; pub mod isl; @@ -196,6 +197,8 @@ pub enum Lang { Ydd, /// Modern Standard Arabic. Ara, + /// Modern Hebrew. + Heb, } impl Lang { @@ -242,6 +245,7 @@ impl Lang { "mk" | "mkd" | "mac" | "macedonian" | "македонски" => Some(Self::Mkd), "af" | "afr" | "afrikaans" => Some(Self::Afr), "ar" | "ara" | "arabic" => Some(Self::Ara), + "he" | "heb" | "hebrew" | "עברית" => Some(Self::Heb), "bg" | "bul" | "bulgarian" => Some(Self::Bul), "el" | "ell" | "gre" | "greek" => Some(Self::Ell), "sq" | "sqi" | "alb" | "albanian" => Some(Self::Sqi), @@ -328,6 +332,8 @@ pub enum Conjugation { Ydd(Box), /// Modern Standard Arabic. Ara(Box), + /// Modern Hebrew. + Heb(Box), } /// Why `conjugate` failed: the input is not a known verb shape in @@ -464,6 +470,9 @@ pub fn conjugate(infinitive: &str, lang: Lang) -> Result Conjugation::Ara(Box::new(ara::Table::build( &ara::Verb::from_lemma(infinitive).map_err(err)?, ))), + Lang::Heb => Conjugation::Heb(Box::new(heb::Table::build( + &heb::Verb::from_lemma(infinitive).map_err(err)?, + ))), Lang::Bul => Conjugation::Bul(Box::new(bul::Table::build( &bul::Verb::from_infinitive(infinitive).map_err(err)?, ))), @@ -564,6 +573,7 @@ mod facade_tests { ("язу", Lang::Tat), ("בענטשן", Lang::Ydd), ("جلس", Lang::Ara), + ("שמר", Lang::Heb), ("tala", Lang::Swe), ("читати", Lang::Ukr), ("食べる", Lang::Jpn), diff --git a/src/python.rs b/src/python.rs index 976e4126..4d90fb3b 100644 --- a/src/python.rs +++ b/src/python.rs @@ -1468,6 +1468,37 @@ impl From for TurkmenConjugation { } } +/// The conjugation table of one Modern Hebrew verb. +#[pyclass(get_all, frozen)] +struct HebrewConjugation { + lemma: String, + past: Vec>, + present: Vec>, + future: Vec>, + imperative: Vec>, + infinitive: Option, +} + +#[pymethods] +impl HebrewConjugation { + fn __repr__(&self) -> String { + format!("HebrewConjugation({:?})", self.lemma) + } +} + +impl From for HebrewConjugation { + fn from(t: crate::heb::Table) -> Self { + HebrewConjugation { + lemma: t.lemma, + past: t.past, + present: t.present, + future: t.future, + imperative: t.imperative, + infinitive: t.infinitive, + } + } +} + /// The conjugation table of one Modern Standard Arabic verb. #[pyclass(get_all, frozen)] struct ArabicConjugation { @@ -2526,6 +2557,13 @@ fn conjugate(py: Python<'_>, infinitive: &str, lang: &str) -> PyResult .into_pyobject(py)? .into()) } + Some(crate::Lang::Heb) => { + let v = crate::heb::Verb::from_lemma(infinitive) + .map_err(|e| PyValueError::new_err(e.to_string()))?; + Ok(HebrewConjugation::from(crate::heb::Table::build(&v)) + .into_pyobject(py)? + .into()) + } Some(crate::Lang::Bel) => { let v = crate::bel::Verb::from_infinitive(infinitive) .map_err(|e| PyValueError::new_err(e.to_string()))?; @@ -2631,6 +2669,7 @@ fn ablaut(m: &Bound<'_, PyModule>) -> PyResult<()> { m.add_class::()?; m.add_class::()?; m.add_class::()?; + m.add_class::()?; m.add_class::()?; m.add_class::()?; m.add_class::()?; diff --git a/src/reverse.rs b/src/reverse.rs index 33f75d64..77804171 100644 --- a/src/reverse.rs +++ b/src/reverse.rs @@ -814,13 +814,14 @@ fn ord(lang: Lang) -> usize { Lang::Tat => 52, Lang::Ydd => 53, Lang::Ara => 54, + Lang::Heb => 55, } } fn index(lang: Lang) -> &'static Index { #[allow(clippy::declare_interior_mutable_const)] const EMPTY: OnceLock = OnceLock::new(); - static INDEXES: [OnceLock; 55] = [EMPTY; 55]; + static INDEXES: [OnceLock; 56] = [EMPTY; 56]; INDEXES[ord(lang)].get_or_init(|| build_index(lang)) } @@ -850,7 +851,7 @@ fn build_index(lang: Lang) -> Index { fn is_lexicon_lemma(cand: &str, lang: Lang) -> bool { #[allow(clippy::declare_interior_mutable_const)] const EMPTY: OnceLock> = OnceLock::new(); - static SETS: [OnceLock>; 55] = [EMPTY; 55]; + static SETS: [OnceLock>; 56] = [EMPTY; 56]; SETS[ord(lang)] .get_or_init(|| lexicon_lemmas(lang).into_iter().collect()) .contains(cand) @@ -973,6 +974,7 @@ fn lexicon_lemmas(lang: Lang) -> Vec<&'static str> { Lang::Tat => col1(include_str!("../data/tat/parts.tsv"), &mut lemmas), Lang::Ydd => col1(include_str!("../data/ydd/parts.tsv"), &mut lemmas), Lang::Ara => col1(include_str!("../data/ara/parts.tsv"), &mut lemmas), + Lang::Heb => col1(include_str!("../data/heb/parts.tsv"), &mut lemmas), } lemmas.sort_unstable(); lemmas.dedup(); @@ -1798,6 +1800,19 @@ fn enumerate(c: &Conjugation) -> Vec<(String, String)> { s.opt(f.as_ref(), "form"); } } + Conjugation::Heb(t) => { + s.one(&t.lemma, "citation"); + for f in t + .past + .iter() + .chain(&t.present) + .chain(&t.future) + .chain(&t.imperative) + { + s.opt(f.as_ref(), "form"); + } + s.opt(t.infinitive.as_ref(), "infinitive"); + } } s.0 } diff --git a/src/wasm.rs b/src/wasm.rs index 91cbeaf4..f40ac158 100644 --- a/src/wasm.rs +++ b/src/wasm.rs @@ -205,6 +205,11 @@ pub fn conjugate(infinitive: &str, lang: Option) -> Result { + let v = crate::heb::Verb::from_lemma(infinitive) + .map_err(|e| JsError::new(&e.to_string()))?; + Ok(serde_wasm_bindgen::to_value(&crate::heb::Table::build(&v))?) + } Some(crate::Lang::Bul) => { let v = crate::bul::Verb::from_infinitive(infinitive) .map_err(|e| JsError::new(&e.to_string()))?;