hspell - מאיית עברי חופשי

התכנה נכתבה ע"י נדב הראל ודן קניגסברג. כל הזכויות שמורות (C). באמת!

ניתן להשיג אותה באתר Ivrix. חבילות ה-RPM שניתן להוריד משם הן חתומות.

הצורך:

ככל הידוע לנו (לאחר בירור מעמיק), אין תכנת איות עברית חופשית. התכנות הזמינות הן כולן בתשלום (אלא אם גונבים אותן). בוודאי שאין הן ניתנות לשינוי, הרחבה, הסבה למטרות שונות, או למחקר נוסף.

מרבית משתמשי המחשב בעולם בחרו, מטעמים אלה או אחרים, במוצרי מיקרוסופט. אולם למשתמש דובר-האנגלית (וכן לדוברי שפות אירופיות אחרות) יש אלטרנטיבות טובות למדיי, בדמות מערכות Unix. בולטות במיוחד מערכות Linux ו-FreeBSD שהן חופשיות, פתוחות, וזמינות לכול. התמיכה בעברית במערכות אלה די מוגבלת, וכאמור, אין עבורן מאיית.

בעיות מיוחדות לאיות עברי:

בעברית יש הרבה מאוד צורות חוקיות לכל מילה - מילות-עזר מצטרפות למילה שאחריהן, נטיית פועל משתנה בין גוף לגוף, פעלים יוצאים מקבלים כינויים חבורים (וכשתשמרוני) ושמות-עצם נסמכים משתנים בהתאם למין ומספר הסומך. מספר הצורות גדול ללא השוואה לעומת אנגלית (שהיא מקרה פשוט באורח יוצא דופן), והרבה יותר משאר שפות אירופה המוכרות לנו (ברדידות) - אפילו מהשפות בעלות צורת אקוזטיב. לכן, איסוף רשימת מילים "שטוחה" אחת, איננה ישימה.

בעיה נוספת נובעת מקהל היעד הזעום: מעטים האנשים שאיות עברי מעניין אותם. אולם אל לנו לתלות בכך את חסרונו של מאיית עברי חופשי. לשפות מעוטות-אוכלוסין כפינית ודנית יש זה מכבר מילונים חופשיים (www.freedict.com) - אולם בעברית אי אפשר להשיג (באופן חוקי) את רשימת המילים. משום מה, הציבור כותב-העברית אינו נרתע מהישענות על פתרונות קנייניים, ולא רואה את היתרונות הגלומים בפיתוח משותף וחופשי.

המעיית האברי שלנו:

hspell מבקשת למלא את החסר בתחום זה. תכנה זו מקבלת כקלט טקסט עברי, עוברת עליו מילה-מילה, ומדפיסה כפלט את רשימת המילים שהיא איננה מכירה. אם המילה מתחילה במילות עזר (מש"ה וכל"ב וחברותיהם), התכנה מסירה אותן ומנסה לזהות את המילה המתקבלת.

hspell יכולה לציין מדוע מילה התקבלה - למשל האם היא הטיה של פועל עם מילות-עזר תחיליות כלשהן. כמו כן, היא יכולה להציע תיקונים למילה שגויה - נוח במיוחד למציאת הכתיב המלא הנכון של מילה.

hspell נמסרת לשימוש תחת רישיון GPL אשר אומר בערך: מותר לכל אחד לעשות בתכנה כרצונו, אולם כל שינוי חייב להיות מופץ ברבים תחת אותו רישיון. שימו לב שכל רכיבי hspell מוגנים ע"י ה-GPL, ובכלל זה סקריפטים, קובצי נתונים ורשימות המילים.

עקרונות האיות:

אנו עובדים ב"כתיב מלא" - כתיב חסר-ניקוד. זהו הכתיב המקובל ביותר (בטקסטים המיועדים למבוגרים), וקל יותר לממשו. אנו נצמדים לכללי האקדמיה ללשון העברית. בעתיד נוכל (אנו או מישהו אחר) להוסיף תמיכה בכללי איות אחרים. למשל, לפי כללי האקדמיה, הריבוי של "עת" הוא "עתים". אולם רבים מעדיפים את הצורה "עיתים", ונוכל להתיר זאת.

אוצר המילים:

hspell משתמשת ברשימה ארוכה של שמות עצם, תארים ופעלים על כל הטיותיהם החוקיות. שם עצם לדוגמה:
כלב
כלב-
כלבי
כלבנו
כלבך
כלבכם
כלבכן
כלבו
כלבה
כלבן
כלבם
כלבים
כלבי-
כלביי
כלבינו
כלביך
כלבייך
כלביכם
כלביכן
כלביו
כלביה
כלביהן
כלביהם
פועל לדוגמה:
לשמור
שמרתי
שמרת
שמרת
שמר
שמרה
שמרנו
שמרתם
שמרתן
שמרו
שמור
שמרי
שמרו
שמורנה
אשמור
תשמור
תשמרי
ישמור
תשמור
נשמור
תשמרו
תשמורנה
ישמרו
שומר
שומרת
שומרים
שומרות
שמור
שמורה
שמורת-
שמורים
שמורי-
שמורות

כללי הנטייה:

רשימת הנטיות החוקיות מיוצרת באופן אוטומטי ע"י wolig.pl ו-woo מתוך כללים כגון
כלב ע
שמר פ,קל_אפעול+,פי+,פו,הת,נפ
כללים אלה אומרים ש"כלב" הוא שם עצם בעל נטייה רגילה, וש"שמר" הוא שורש בעל נטייה רגילה בבניינים קל, נפעל, פיעל, פועל והתפעל. הנטיות "לשמור" ו"לשמר" הן פעלים יוצאים, היכולים לקבל כינויים חבורים. הכללים עלולים להיות סבוכים יותר:
צומת ע,ים,אבד_ו
שבע פ,קל_אפעל,הפ,הו,בינוני_שמן,אין_שם_פעולה,אין_פעול #  שביעה - קצת משונה

איך נבנית רשימת ההטיות של פועל:

בהינתן שורש ובניין, תכנת woo בונה את צורת הנסתר של הפועל. או-אז היא עוברת על כל הזמנים (עבר, מקור, הווה, עתיד, ציווי) ועל כל הגופים, ומטה את הפועל ע"פ האלגוריתם של פרופ' עוזי אורנן.
העמוד שלהלן מצולם (בחדות גרועה בכוונה) מתוך "נטיית הפועל בתרשימי זרימה" מאת עוזי אורנן, הוצאת אקדמון, תש"ם. אלגוריתם מלא והרחבות נוספות מופיעים בספרו החדש "המילה האחרונה - מנגנון התצורה של המילה העברית", הוצאת אוניברסיטת חיפה, 2003.

woo כתובה ב-perl, שהיא שפת תכנות המתאימה במיוחד למניפולציות של טקסט. לדוגמה קטע הקוד להלן, מבדיל בין התקררות להצטננות:

  sub _bdoq_sikul {
    my $w = shift;
    return if ($w->{q} !~ m/(ד|ז|ט|ס|צ|ש|ת)/);
    $w->{mishqal} =~ s/^התq/הqת/ if ($w->{q} =~ m/(ס|ש)/);
    $w->{mishqal} =~ s/^התq/הqט/ if ($w->{q} eq 'צ');
    $w->{mishqal} =~ s/^התq/הqד/ if ($w->{q} eq 'ז');
    $w->{mishqal} =~ s/^התq/היq/ if ($w->{q} =~ m/(ת|ד|ט)/);
  }
והקטע השני מממש את מקרה 13 באלגוריתם של עוזי אורנן:
    $hataya =~ s/(ה.+)י(.)$/$1$2/;

איך נבנית רשימת ההטיות של שם עצם:

ברמת העיקרון - באותו אופן, אולם יש כמה הבדלים משמעותיים אשר מקשים עלינו

הצגת-תכלית של יכולות עתידיות

כאמור לעיל, hspell קוראת רשימת הטיות ארוכה אשר מיוצרת מראש. היא מאחסנת את הרשימה בזיכרון בטבלת hash, המאפשרת שליפה מהירה. לכל הטיה מצוינת צורת הבסיס ממנה היא נגזרה.

כאשר האופציה -v מצורפת לתכנה, hspell מתארת בפירוט מדוע היא הסכימה לקבל את המילים שהיא קיבלה. למשל, כאשר כתבתי על "צבור של אנשים", hspell לא התריע על חוסרה של היו"ד במילה "ציבור". רציתי לבדוק האם זוהי תקלה, והרצתי שוב עם פרמטר הפירוט. אז קיבלתי את הנימוק

found צבור: prefix '' stem /usr/local/share/hspell/out.verbs:לצבור
אשר מסביר בפשטות מדוע זו, בכל זאת, מילה חוקית. זהו רק קצה-קצהו של מה שניתן לעשות באמצעות המידע המורפולוגי שיש לנו על כל הטיה.

אופציה מעניינת נוספת היא -c. כאן hspell מנסה להציע תיקונים לשגיאות בהן היא נתקלת. כיוון שאוצר המילים שלה עדיין מוגבל, לעתים היא "מתקנת" מילים חוקיות למהדרין. אולם כבר עתה, אופציה זו מקלה מאוד על מציאת האיות הנכון בכתיב-מלא. למשל, רבים (ואני בכללם) היו מאייתים "הילדה היתה מאושרת" ביו"ד בודדת במילה "הייתה". אולם hspell מכירה בבעיה זו והיא מנסה להוסיף או להשמיט אימות קריאה, על מנת לקבל מילה חוקית. לכן היא תציע לי להחליף את "היתה" ב"הייתה".
עם זאת, ברור שמכיוון ש-hspell היא תכנה חופשית, אם כלל-איות זה (או אחר) מעצבן אתכם, תוכלו לשנות את התכנה עד שתערב לחככם.

חסרונות:

כיוונים עתידיים ומחקרים נסמכים:

איך אפשר לעזור?

אין ספק שזו השאלה שמנקרת כעת במוחכם.

ובכן, אם תבדקו את hspell על טקסטים שלכם, תגלו שיש מילים חוקיות לא מעטות שהוא אינו מכיר. אנו נשמח מאוד אם תאספו מילים אלה ותוודאו (בעזרת מילונים או ספרי דקדוק) שהן מאויתות בכתיב חסר-ניקוד תקין. לאחר מכן, הוסיפו אותן לקובצי ה-.dat ובדקו האם woo ו-wolig מטות אותן כראוי.

אנו נשמח לקבל רשימות מילים איכותיות כאלו. שימו לב ש"תכנה חופשית" אינה אמורה להיות "תכנה ברמה ירודה", ולכן אנו מבקשים להקפיד על נכונות המילים הנכנסות למילון. פנו אלינו בדואל dankencs.technion.ac.il או nyhmath.technion.ac.il.