פסאודו-האחדה: מדריך למשתמש בתוכנת Tomita פסאודו-האחדה (pseudo-unification) היא מסגרת תיאורטית וחישובית, הממומשת בחבילת תוכנה להגדרת דקדוקים וניתוח משפטים Parser/Compiler"),("Generalized LR מאת M. Tomita ואחרים מאוניברסיטת,Carnegie Mellon ארה"ב. 1. הוראות שימוש בתוכנה יש להכין דקדוק בעזרת editor כלשהו. קובץ הדקדוק הוא קובץ ascii רגיל, הכולל חוקי דקדוק במבנה המתואר בפרק 2 בהמשך. שם הקובץ: <name>.gra א. נכנסים לסביבת,LISP למשל > gcl GNU Common Lisp ב. : במהלך העבודה עשויים להזדקק לשירותי editor לשינויים בקובץ הדקדוק. UNIX editor של,LISP או לפתוח חלון נפרד ולהשתמש בכלי אפשר להשתמש ב- כבחירתכם. ג. כשנמצאים בסביבת,LISP יש לטעון את חבילת התוכנה לניתוח תחבירי : > (load /cs/course/current/nlp/tomita/v8-4-sb.lisp ) מבצעים "קומפילציה" "<name>") (compgra > לדקדוק הרצוי, <name>.gra : ד. > (compgra "lomed") למשל : התוצאה נשמרת במספר קבצי-עזר. הדקדוק המעובד נטען ומוכן לעבודה. > (compgra "<name>" :result-to-file nil) ההוראה : תמנע שמירת קבצי העזר על הדיסק. אם ברצונכם להשתמש ללא שינוי בדקדוק שכבר עבר קודם קומפילציה, רק טענו אותו: > (loadgra "<name>") ההוראה "...") (p משמשת לניתוח משפט parse) (p "dani lomed") > ה. :( > (disp-tree) מוצגים מבני התכוניות של הניתוחים. לקבלת עץ הגזירה: ו. אפשר לנתח מספר משפטים בהוראה אחת : (("..." "...")' *p) > ז. עם סיום העבודה, יוצאים מסביבת (quit) : LISP > תקציר לקורס מבוא לבלשנות חישובית מ. רימון 1
2. מבנה הדקדוק חוק דקדוק הוא מהצורה: (context-free phrase structure rule (list of equations) ) החלק המבני rule) (phrase structure כולל שם של רכיב (סמל ביניים) בצד שמאל, חץ מפריד מסוג <--> או <==>, ובצד ימין רשימה בתוך סוגריים של רכיבים, קטגוריות לקסיקליות (חלקי דיבר) או תווים אלפנומריים. שמות רכיבים וקטגוריות מופיעים בתוך סוגריים משולשים. המשוואות מתייחסות למבני התכוניות ("התיאור הפונקציונלי") של רכיבי החוק הדקדוקי. המשתנה x0 הוא מבנה התכוניות של הרכיב בצד שמאל של החוק, והמשתנים x1,..xn הם מבני התכוניות של הרכיבים בחלקו הימני של החוק, עפ"י סדר הופעתם משמאל לימין. נגדיר מסלול בתור שם של משתנה ) x0,x1,.. ), שאליו אפשר לשרשר מחרוזות תווים כלשהן לציון שמות מפורטים יותר (צמתים) במבנה תכוניות היררכי כרצוננו; למשל:. x1 agr num כל משוואה נתונה בסוגריים רגילים ויש לה צד שמאל, שהוא תאור מסלול, וצד ימין שיכול להיות גם הוא מסלול, מחרוזת תווים, או רשימה שאברה הראשון הוא *OR* או *EOR* ואחריו מספר כלשהו של מחרוזות תווים. ביטוי שאינו אטומי יש לשים בסוגריים: (x0 = x1) ((x0 subj) = x1) ((x0 root) = talmid) ((x1 case) = (*OR* nom acc)) (<NP> <--> (<DET> <N>) ( ((x2 def) = -) ((x0 def) = (x1 def)) ((x0 root) = (x2 root)) ((x0 agr number) = (x2 agr number)) ) ) דוגמה לחוק שלם: (<S> <--> (<NP> <VP>) ( ((x1 case) = nom) ((x2 form) =c finite) (*OR* (((x2 tense) = present) ((x1 agr) = (x2 agr))) (((x2 tense) = past) ) ) (x0 = x2) ((x0 subj) = x1) ((x0 passive) = -) ) ) דוגמה לחוק מורכב יותר: סימן השוויון במשוואת אילוצים הוא במונחי האחדה: בדיקת קומפטיביליות (חוסר סתירה) של שני הצדדים ויצירת מבנה תכוניות של האחדתם. בפרט, אם לאחד המשתנים אין עדיין ערך, אזי קומפטיביליות מתקיימת באופן ריק ותוצאת ההאחדה זהה להשמה. לעומת האחדה טהורה, שבה המסלולים בשני צדי המשוואה יצביעו לאחר הפעולה אל אותו ערך, בפסאודו-האחדה יוכנסו הערכים הזהים בתוכנם לשני המשתנים השונים. תקציר לקורס מבוא לבלשנות חישובית מ. רימון 2
התוכנה מאפשרת בחירה בין מתכונת של פסאודו-האחדה לבין מתכונת של האחדה טהורה. בעבודה במתכונת של פסאודו-האחדה, אין שיתוף ערכים re-entrancy) (co-reference, כשיש זהות ערכים בפועל. מכאן: גם מבנה תכוניות מיוצג כעץ ולא כגרף כללי יותר (DAG) ייתכנו מצבים בהם יש חשיבות לסדר הפעולות - - האמצעים המיוחדים שיתוארו בהמשך פרק זה (דיסיונקציה, שלילה, משוואה מגבילה, דריסת ערכים, בדיקת קיום ושימוש בפונקציות-עזר בשפת (LISP זמינים רק בעבודה במתכונת של פסאודו האחדה ואינם זמינים בהאחדה טהורה. השימוש בפסאודו-האחדה מקנה כוח ביטוי חזק יותר ויעילות חישובית, במחיר פגיעה בפשטות הפורמליזם וסיכון של איבוד קונסיסטנטיות במקרים מסוימים. דוגמה להבדל בהתנהגות בין האחדה טהורה לבין פסאודו-האחדה - השפעה אפשרית של סדר: (<S> <--> (<NP> <VP>) ( ((x0 subj) = x1) ((x2 voice) = active) (x0 = x2) ) ) א. (<S> <--> (<NP> <VP>) ( ((x0 subj) = x1) (x0 = x2) ((x2 voice) = active) ) ) ב. אם לרכיב VP אין ערך voice לפני הפעולה, מבנה התכוניות שיווצר ל S במקרה ב' יהיה שונה מזהשל א', לעומת ביצוע זהה בהאחדה טהורה. דוגמה נוספת להבדל בין האחדה טהורה ופסאודו-האחדה: (<Start> <--> (<S>) ( (x0 = x1) ((x0 agr gender) = f) ((x0 subj agr gender) = m) )) (<S> <--> (<N> <V>) ( (x0 = x2) ((x0 subj) = x1) ((x0 agr) = (x1 agr)) )) נניח ש N הוא ערך מילוני של שם עצם, שמספרו מצוין ע"י תכונית number) x0), agr אך לא מצוין מינו gender) x0). agr נניח גם ש V הוא פועל בעל אפיון מילוני דומה. בהאחדה טהורה החוק <V>) (<S> <--> (<N> יצליח, אך החוק (<S>) (<Start> <--> ייכשל, משום ש x0 agr ו- x0 subj agr אפשר לקבוע תת-ערך שונה לתכונית מין מצביעים עתה על אותו ערך (ע"י (co-reference ואי.(gender) בפסאודו-האחדה תכונית המין מוגדרת בחוק השני לשני עצים שונים, ולכן חוק זה יצליח. תקציר לקורס מבוא לבלשנות חישובית מ. רימון 3
פרט לאמור לעיל, אין חשיבות לסדר החוקים בדקדוק, אולם: צד שמאל של החוק הראשון בדקדוק מגדיר מהו הסמל המיוחס - שורש העץ בניתוח. בד"כ יהיה זה S, לציון מבנה משפט. אם נרצה להשתמש באותו דקדוק לניתוח של רכיבים מסוימים בנפרד (למשל,(NP נוח לכתוב כחוק ראשון את: ולהחליף את S ב NP- בצד ימין בעת הצורך. (<start> <--> (<S>) ((x0 = x1))) מותר מספר כלשהו של חוקים שצד שמאל שלהם הוא,<start> כאשר המנתח מנסה תחילה לתת ניתוח לפי החוק הראשון ועובר לשני רק אם נכשל. חובה לייצר מבנה תכוניות כלשהו לשורש העץ! ניתן לשלב הערות בדקדוק ע"י ציון התו ; בראש השורה. אמצעים נוספים שהתוכנה מאפשרת כאשר עובדים במתכונת של פסאודו-האחדה: דיסיונקציה ושלילה: *OR* ו- *NOT* על ערכי תכוניות: ((x1 agr person) = (*OR* 1 2)) ((x1 agr person) = (*NOT* 3)) זה שקול ל: יש לשים לב ש (3 (*NOT* פירושו כל ערך השונה מ- 3. השקילות לעיל קיימת רק בגלל טווח הערכים המסוים המשמעותי למסלול. x1 agr person (*OR* (מערכת משוואות) (מערכת משוואות ( (..... ) ) *OR* על משוואות: בתוך כל מערכת, כל המשואות חיבות להצליח בכדי שהמערכת כולה תצליח. למשל: (*OR* (((x2 tense) = present) ((x1 agr) = (x2 agr))) (((x2 tense) = past) ) ) (קטע זה יכול להיות חלק מהחוק <VP>) <S> <--> (<NP> בדקדוק לאנגלית, המבטיח התאמת גוף ומספר בין הפועל והנושא בזמן הווה בלבד). *OR* על מערכות משוואות פועל כתנאי "או" מאחד על המערכות. במקביל, והחוק נכשל רק אם כולן נכשלו. ההשוואות מתבצעות לעומת זה, *EOR* הוא תנאי "או" אקסקלוסיבי. מתבצע באופן סדרתי, ברגע שמשוואה מתקיימת הדיסיונקציה מצליחה ואין בודקים תנאים נוספים (ולכן אין מבצעים השמות והאחדות נוספות). מספר המשוואות במבני *OR*/*EOR* אינו מוגבל. מתאפשר דימוי כללי של.if-then-else תקציר לקורס מבוא לבלשנות חישובית מ. רימון 4
*DEFINED* בדיקות קיום: *UNDEFINED* ביטויים אלה יכולים להופיע בצד ימין של משוואה, לציון דרישה על קיום / אי קיום של ערכים. (x2 neg) = *UNDEFINED* למשל: בודק את תכונית neg (שלילה) של x2 ונכשל אם יש לה ערך כלשהו בשלב זה. אין כל השמה. ג'וקר card) :(wild התו % (או סימן אחר שניתן לבחור). מקיים שוויון עם כל תו אחר, ומקבל את ערכו לאחר האחדה. אסור שיישאר ג'וקר פתוח במבנה בסיום הניתוח. הג'וקר שימושי לציון דרישה על עצם הקיום של משתנים, למשל משלימים לפועל: (<V> <--> (p a g a s h) ( - - - - - - ((x0 subj) = %) ((x0 obj) = %) ) ) =c משוואה מוגבלת: התניית פעולה בערך, ללא האחדה/השמה. האופרטור c= מציין שלתכונית המתוארת ע"י הארגומנט השמאלי חייב להיות הערך המופיע כארגומנט הימני. אם אין הערך לתכונית, לא מתבצעת האחדה, כלומר השמה, והחוק נכשל. ((x1 case) =c nom) ((x1 case) =c (*OR* nom acc)) למשל: משוואת השמה: הערך המופיע כארגומנט הימני יוצב בתכונית המתוארת ע"י הארגומנט השמאלי, ו"ידרוס" את הערך הקודם שלה. זו משוואה שמצליחה תמיד. פעולות ב- :LISP בצד ימין של משוואה יכול להופיע קטע כלשהו ב- LISP, עם חץ מפריד מסוג ==> השמה). (משוואת (<integer> <--> (<integer> <digit>) ( ((x0 value) <= (+ (x2 value) (* 10 (x1 value)) ) ) ) ) לדוגמה: שילוב קטעי LISP בדקדוק מאפשר ביטוי קומפקטי של טענות שקשה לאפיין באמצעים של חוקי מבנה או משוואות אילוצים, הערכה סמנטית, שקלול סטטיסטי, ועוד. אולם יש להקפיד על שימוש מבוקר ומינימליסטי ב- LISP בדקדוק. תקציר לקורס מבוא לבלשנות חישובית מ. רימון 5
סימני קצה :(terminals) שהיא חוק רגיל לכל דבר סימני הקצה של הדקדוק הם תווים ולא מלים, ולכן הגדרה מילונית - - יש לרשום כבדוגמה הבאה: (<N> <--> (t a l m i d) (((x0 root) = talmid) ((x0 def) = -) ((x0 agr num) = sg) )) גם המנתח פועל ברמת תווים ומתעלם מרווחים בטקסט עצמו לכן במתכונת עבודה רגילה כל המחרוזות הבאות שוות: (ניתן לכפות התחשבות ברווחים). ve ha talmidim. ve hatalmidim. vehatalmidim. veha tal midim. מבנה תכוניות ריק מיוצג ע"י הסמל.nil אפשרות שימוש במקרוס - ר' פרק 4 בהמשך. תקציר לקורס מבוא לבלשנות חישובית מ. רימון 6
3. פלט הניתוח וקבצי ביניים פלט הניתוח: שני מבני-נתונים, ברוח LFG ותיאוריות דומות: עץ גזירה,(c-structure) המתייחס לרכיבים,(constituents) כפי שהם מוגדרים ע"י החלק המבני של החוקים (כגון S,,NP וכו'). עץ הגזירה מוצג רק בעקבות בקשה של המשתמש. מבנה תכוניות הפונקציונלי,(f-structure) המתייחס למסלולים המוגדרים במשוואות ומצביעים על תכוניות. הפורמליזם מאפשר חופש לגבי המובן של התכוניות ואופן השימוש בהן, אך בד"כ נייצג בעזרתן תפקידים (functions) תחביריים-תמטיים, כגון נושא/נשוא, יחסות, וכיו"ב שאין להם ביטוי בעץ הגזירה המבני. מוצג בכל מקרה. מבנה התכוניות של ראש המשפט (S) קבצי ביניים הקובץ : מתייחס לחלק המבני (CFG) של הדקדוק. נוצר בתהליך <name>.tab הקומפילציה של <name>.gra ונשמר על הדיסק לשימוש נוסף בעתיד. מכיל שלושה חלקים, שכל אחד מהם היא פקודת setq של,LISP המגדירה משתנה פנימי:.1 *gg* חוקי המבנה של הדקדוק, ושמותיהם הפנימיים. החלק השמאלי (פעולות / לדקדוק (התוכנה משתמשת בטכניקת של הדקדוק - החוקים חסרי ההקשר). (actions של טבלת shift-reduce המתאימה Generalized LR לחלק המבני *a-tab* החלק הימני (מעברים. shift-reduce של טבלת (goto / *g-tab* הקובץ : פונקציות LISP הנוצרות בתהליך הקומפילציה של <name>.gra <name>.fun וישמשו לניתוח משפטי הקלט. גם קובץ זה נשמר על הדיסק לשימוש נוסף בעתיד. כל פונקציה מתאימה לאחד מחוקי הדקדוק והיא מחשבת את מבנה התכוניות..2 לדוגמה:... (DEFUN LOMEDF-7 (X1 X2) (LET ((X (LIST (LIST (LIST (QUOTE X2) X2) (LIST (QUOTE X1) X1))))) (AND (AND (P=A (X1 CASE) NOM) (P=P (X1 NUM) (X2 NUM)) (P=P (X0 SUBJ) (X1)) (P=P (X0) (X2))) (OR (GETVALUE* X (QUOTE (X0))) T))))... מתקבל מחישוב מבנה התכוניות בחוק: (<S> <--> (<NP> <VP>) (((x1 case) = nom) ((x1 num) = (x2 num)) ((x0 subj) = x1) (x0 = x2))) הקובץ : קובץ פנימי הנוצר מחדש בכל טעינה של הדקדוק, ומכיל את <name>.loadfun תוכנת הניתוח (בשפת (LISP שנבנתה מהדקדוק, במצב מוכן לעבודה..3 תקציר לקורס מבוא לבלשנות חישובית מ. רימון 7
ג" 4. אמצעי עזר נוספים פרמטרים גלובליים (setq variable value) משפיעים על התנהגות המנתח בריצה מסוימת. ניתן לשנות ברירות מחדל ע"י פקודת :LISP של setq.(ambiguity) *max-ambiguity-display* המספר המירבי של ניתוחים שיוצגו במקרה של רב-משמעות ברירת המחדל: 3..1 *ignore-space* = t יש להתעלם מרווחים במשפט ולנתחו על בסיס תווים רב-משמעות מדומה; למשל:.(pogesh et = pogeshet = nil עבודה ברמת מילה (מתאים, למשל, לאנגלית). פרמטר זה אינו משפיע על אופן ההגדרה המילוני, שם מחויבים רווחים. ברירת המחדל:.t (נוח לעברית, אך עשוי לגרום.2 *recover-from-failure* = t המנתח ינסה להחלץ מכשלון בניתוח. = nil הניתוח יופסק בעת כשלון, ויופק פלט מתאים ברירת המחדל:.t (נוח לשלב הניפוי)..3 *wild-card-character* התו המציין "ג'וקר", ומקיים שוויון עם כל קלט. ברירת המחדל: %..4 *unification-mode* = pseudo = full עבודה במתכונת הטבעית של המערכת, בשיטת פסאודו-האחדה. עבודה במתכונת האחדה טהורה. בנוסף להבדלים בתהליך ההאחדה, במצב full אין תמיכה בפונקציות הייחודיות (דריסה ומחיקה של ערכים, בדיקות קיום, התניית c=, וקריאה ל- LISP ). 'וקר",,*NOT* ברירת המחדל:.pseudo.5 אמצעי ניפוי (debugging) dmode שולט בתצוגת הפלט. יש לקבעו לפני ניתוח משפט, והוא נשאר בתוקף עד שינוי נוסף. ברירת המחדל פלט בסיסי לגבי תהליך הניתוח. בפלט יוצגו קטעי הקלט והחוקים שהופעלו על-פי סדר השימוש בהם. כנ"ל בתוספת הצגה של חוקים שנוסו ונכשלו במהלך הניתוח. (dmode 0) (dmode 1) (dmode 2) מוצגים גם שמות פונקציות ומספרי חוקים בקובץ הדקדוק לאחר קומפילציה. תקציר לקורס מבוא לבלשנות חישובית מ. רימון 8
trace מאפשר מעקב על קריאות לפונקציות LISP המרכיבות את הדקדוק שעבר קומפילציה (ונמצאות בקובץ,(<name>.fun כולל הצגת הערכים שהועברו והוחזרו. דוגמה: lomedf-7) (trace disp-node-value קריאה ל-( n (disp-node-value תציג את שם הרכיב (קטגוריה) הנמצא בצומת n, ערכי תכוניותיו ושמות בניו. disp-nodes רשימת כל הצמתים עם בניהם. disp-def עיון בהגדרה מקורית של חוק, לפי תצוגתו במצב (2.(dmode דוגמה: 52) "lomedf" (disp-def disp-tree קריאה ל-( disp-tree ) לאחר ניתוח משפט תציג את עץ הגזירה (ברירת המחדל היא להציג רק את מבנה התכוניות). בצד שמות הרכיבים יופיע ספרור פנימי שלהם. קריאה ל- (n (disp-tree תציג רק את תת-העץ שתחת הצומת n. disp-tree מציג רק עץ אחד. במקרים של רב-משמעות אפשר לקבל את העצים הנוספים ע"י (n,(disp-tree באשר n הרצוי נבחר מתצוגת הפלט במצב (2 (dmode או מהתשובה ל-.(disp-nodes) תקציר לקורס מבוא לבלשנות חישובית מ. רימון 9
מקרוס אמצעי נוח לכתיב מקוצר של תבניות חוזרות. שימושי במיוחד להגדרות מילוניות: למשל, במקום לחזור עבור שמות תואר רבים דומים על חוקים דוגמת: (<ADJ> <--> (g a d o l) (((x0 root) = gadol) ((x0 agr gen) = m) ((x0 agr num) = sg))) אפשר להגדיר מקרו (במונחי שפת :(Common LISP (defmacro %ADJ (wordlist &key (gen 'm)(num 'sg)) (if (atom wordlist) (setq wordlist (list wordlist))) (append-dolist (word wordlist) '((<ADJ> <-->,(explode-string word) (((x0 root) =,word) ((x0 agr gen) =,gen) ((x0 agr num) =,num)) )) ) ) (%ADJ ( "gadol" "shamen"... )) ואז לכתוב: (%ADJ ( "gdola" "yafa"... ) :gen f) (%ADJ ( "gdolim" "shmenim"... ) :num pl) וכו'. תקציר לקורס מבוא לבלשנות חישובית מ. רימון 10
lomed.gra דוגמה פשוטה: הדקדוק (<S> <--> (<NP> <VP>) (((x1 case) = nom) ((x1 num) = (x2 num)) (x0 = x2) ((x0 subj) = x1) )) (<NP> <--> (<DET> <N>) (((x2 def) = -) ((x0 def) = (x1 def)) ((x0 root) = (x2 root)) ((x0 num) = (x2 num)))) (<NP> <--> (<N>) ((x0 = x1))) (<VP> <--> (<V>) ((x0 = x1))) (<N> <--> (t a l m i d) (((x0 root) = talmid) ((x0 def) = -) ((x0 num) = sg))) (<N> <--> (t a l m i d i m) (((x0 root) = talmid) ((x0 def) = -) ((x0 num) = pl))) (<N> <--> (d a n i) (((x0 root) = dani) ((x0 def) = +) ((x0 num) = sg))) (<V> <--> (l o m e d) (((x0 root) = lamad) ((x0 num) = sg) ((x0 tense) = present))) (<V> <--> (l o m d i m) (((x0 root) = lamad) ((x0 num) = pl) ((x0 tense) = present))) (<DET> <--> (h a -) (((x0 root) = ha) ((x0 def) = +))) יקבל משפטים כמו: תלמיד לומד תלמידים לומדים התלמיד לומד דני לומד (1) (2) (3) (4) וידחה משפטים כמו: תלמיד לומדים הדני לומד * (5) * (6) תקציר לקורס מבוא לבלשנות חישובית מ. רימון 11
תדפיס ריצה עם lomed.gra > gcl GCL (GNU Common Lisp) 2.6.6 CLtL1 Jan 18 2005 00:13:38 Source License: LGPL(gcl,gmp), GPL(unexec,bfd) Binary License: GPL due to GPL'ed components: (READLINE BFD UNEXEC) Modifications of this banner must retain notice of a compatible license Dedicated to the memory of W. Schelter Use (help) to get some basic information on how to use GCL. > (load "/cs/course/current/nlp/tomita/v8-4-sb.lisp") Loading /cs/course/current/nlp/tomita/v8-4-sb.lisp "******************************************************" "** The Generalized LR Parser/Compiler **" "** Symbolics version 8-4 **" "** Center for Machine Translation **" "** Carnegie Mellon University **" "** (c) 1986,1987,1988 All rights reserved **" "******************************************************" "initializing..." Warning: HASH-TABLE-SIZE is being redefined. Warning: HELP is being redefined. "Type (ACKNOWLEDGE) for acknowledgements." Finished loading v8-4-sb.lisp T > (compgra "lomed") - Reading lomed.gra - lomed.gra read ************************************************ ***** Start compiling lomed.gra - Reading lomed.gra - lomed.gra read *** Grammar Pre-processor started *** Grammar Pre-processor done *** LFG Compiler started *** LFG Compiler done *** LR Table Compiler started - converting grammar - there were 10 rules - there were 10 really different rules - there were 17 symbols - there were 11 terminal symbols אותיות - there were 6 non terminal symbols רכיבים / קטגוריות - making augmented grammar - making all items - 50 items made - collecting all items LR [ 0] LR [ 1] LR [ 2] LR [ 3] LR [ 4] LR [ 5] LR [ 6] LR [ 7] LR [ 8] LR [ 9] LR [ 10] LR [ 11] LR [ 12] LR [ 13] LR [ 14] LR [ 15] LR [ 16] LR [ 17] LR [ 18] LR [ 19] LR [ 20] - the number of states is 31 - generating parsing table LR'[ 0] LR'[ 20] - reforming goto table תקציר לקורס מבוא לבלשנות חישובית מ. רימון 12
*** LR Table Compiler done - Writing File lomed.tab אלה קבצי העבודה - File lomed.tab written הנשמרים בדיסק - Writing File lomed.fun גם בסיום העיבוד - File lomed.fun written - Writing File lomed.funload - File lomed.funload written ***** Setting up the runtime parser ;;; Loading source file "lomed.tab" ;;; Warning: File "lomed.tab" does not begin with IN-PACKAGE. Loading into package "USER" ;;; Loading source file "lomed.fun" ;;; Warning: File "lomed.fun" does not begin with IN-PACKAGE. Loading into package "USER" Parser Ready for lomed NIL > (p "talmid lomed") >talmid lomed 1 (1) ambiguity found and took 0.4 seconds of real time קרי : מספר ניתוחים, לאו דווקא רב-משמעות! *** 1 ****; ambiguity ((SUBJ ((NUM SG) (CASE NOM) (DEF -) (ROOT TALMID))) (TENSE PRESENT) (NUM SG) (ROOT LAMAD)) > (disp-tree) <S>(15) --> <NP>(7) <VP>(14) <NP>(7) --> <N>(6) <N>(6) --> T A L M I D <VP>(14) --> <V>(13) <V>(13) --> L O M E D > (p "ha-talmid lomed") >ha-talmid lomed 1 (1) ambiguity found and took 0.7 seconds of real time ;**** ambiguity 1 *** ((SUBJ ((NUM SG) (CASE NOM) (ROOT TALMID) (DEF +))) (TENSE PRESENT) (NUM SG) (ROOT LAMAD)) > (disp-tree) <S>(19) --> <NP>(11) <VP>(18) <NP>(11) --> <DET>(3) <N>(10) <DET>(3) --> H A - <N>(10) --> T A L M I D <VP>(18) --> <V>(17) <V>(17) --> L O M E D תקציר לקורס מבוא לבלשנות חישובית מ. רימון 13
> (p "dani lomed") >dani lomed 1 (1) ambiguity found and took 0.1 seconds of real time ;**** ambiguity 1 *** ((SUBJ ((NUM SG) (CASE NOM) (DEF +) (ROOT DANI))) (TENSE PRESENT) (NUM SG) (ROOT LAMAD)) > (disp-tree) <S>(13) --> <NP>(5) <VP>(12) <NP>(5) --> <N>(4) <N>(4) --> D A N I <VP>(12) --> <V>(11) <V>(11) --> L O M E D > (p "ha-dani lomed") >ha-dani lomed failed parsed --> (H A - D A N I) rest --> (L O M E D $) > (dmode 2) 2 > (p "ha-dani lomed") >ha-dani lomed H A - rule # 10 LOMEDF-55 <DET>(3) --> HA- D A N I rule # 7 LOMEDF-52 <N>(8) --> DANI killed - rule # 2 LOMEDF-47 <NP> --> <DET>(3) <N>(8) failed parsed --> (H A - D A N I) rest --> (L O M E D $) > (p "ha-talmidim lomed") >ha-talmidim lomed H A - rule # 10 LOMEDF-55 <DET>(3) --> HA- T A L M I D rule # 5 LOMEDF-50 <N>(10) --> TALMID rule # 2 LOMEDF-47 <NP>(11) --> <DET>(3) <N>(10) תקציר לקורס מבוא לבלשנות חישובית מ. רימון 14
I M rule # 6 LOMEDF-51 <N>(14) --> TALMIDIM rule # 2 LOMEDF-47 <NP>(15) --> <DET>(3) <N>(14) L O M E D rule # 8 LOMEDF-53 <V>(21) --> LOMED rule # 4 LOMEDF-49 <VP>(22) --> <V>(21) killed - rule # 1 LOMEDF-44 <S> --> <NP>(15) <VP>(22) failed parsed --> (H A - T A L M I D I M L O M E D) rest --> ($) > (p "ha- talmidim lomdim") >ha- talmidim lomdim H A - rule # 10 LOMEDF-55 <DET>(3) --> HA- T A L M I D rule # 5 LOMEDF-50 <N>(10) --> TALMID rule # 2 LOMEDF-47 <NP>(11) --> <DET>(3) <N>(10) I M rule # 6 LOMEDF-51 <N>(14) --> TALMIDIM rule # 2 LOMEDF-47 <NP>(15) --> <DET>(3) <N>(14) L O M D I M rule # 9 LOMEDF-54 <V>(22) --> LOMDIM rule # 4 LOMEDF-49 <VP>(23) --> <V>(22) rule # 1 LOMEDF-44 <S>(24) --> <NP>(15) <VP>(23) 1 (1) ambiguity found and took 0.3 seconds of real time ;**** ambiguity 1 *** ((SUBJ ((NUM PL) (CASE NOM) (ROOT TALMID) (DEF +))) (TENSE PRESENT) (NUM PL) (ROOT LAMAD)) > (disp-tree) <S>(24) --> <NP>(15) <VP>(23) <NP>(15) --> <DET>(3) <N>(14) <DET>(3) --> H A - <N>(14) --> T A L M I D I M <VP>(23) --> <V>(22) <V>(22) --> L O M D I M > (quit) תקציר לקורס מבוא לבלשנות חישובית מ. רימון 15