פרויקט מסכםשלב 4 |
המשימה
בשלב זה נפסיק לפתח את הדקדוק שכתבנו (אף שכמובן יש עוד המון מה לשפר) ונפנה לכתוב לו מנתח (parser)! הרעיון הוא לנצל את המידע שמצטבר בתהליך זיהוי משפטים כדי לייצר את המבנה שלהם. עלינו לעקוב אחר החוקים שמופעלים במהלך זיהוי המשפט, שהרי הם החוקים שמזהים מהו המבנה שהופך אותו לחוקי.
משימה נוספת תהיה לשכלל את מבנה הדקדוק על ידי הפרדת חוקי הדקדוק המייצרים את מבנה המשפט (הצירופים למיניהם) מן המלים שמשובצות במשפטים. נצטרך למעשה לבנות לקסיקון, מעין מילון, שהוא נפרד מן החוקים ומכיל את המידע על המלים בשפה. נפריד את הלקסיקון לקובץ נפרד, אשר ייקרא מתוך הדקדוק.
|
איך זה צריך להראות: דוגמא
פעולת המנתח:
?- s(ParseTree, [yafa,shatka],[]).
ParseTree = s(np(simple_np(n(yafa))), vp(v(shatka)))
Yes
?- s(ParseTree,[ha,kelev,sixek,im,ha,meluna],[]).
ParseTree = s(np(simple_np(det(ha), n(kelev))), vp(v(sixek), prep(im), np(simple_np(det(ha), n(meluna)))))
Yes
המשפט s בנוי מצירוף שמני (np) המכיל את השם הבסיסי יפה וצירוף פעלי (vp) המכיל את הפועל העומד שתקה. |
מצליחים לעקוב אחרי רמות הקינון? נשפר את צורת ההצגה בהמשך כדי להקל על כך... |
שימו לב לקוד האינטראקטיבי.
|
בניית הלקסיקון: הקובץ lexicon.pl יכיל את המלים בשפה, כל מילה והתכוניות שקבענו לה. יהיו בלקסיקון עובדות כמו:
lexicon(det,ha).
lexicon(n,def,f,yafa).
התכנית המכילה את הלקסיקון תוכל לגשת את קובץ הלקסיקון ולמצות ממנו את המידע על המלים השונות.
|
הנחיות והדרכה
1. בניית המנתח:
נוסיף מתואר נוסף לכל חוק בדקדוק שיכיל ביטוי מורכב המתאר את המבנה המזוהה (ונוצר) על ידי החוק. למשל, לחוק המשפט נוסיף את הביטוי s(NP,VP) ואת המשתנים יעדכנו החוקים המתאימים לצירוף שמני וצירוף פעלי. זה ייראה כך:
s(s(NP,VP)) --> np(NP,subject,_,Gen),vp(VP,Gen), ודוגמא נוספת:
np(np(PRN),_,_,Gen) --> prn(PRN,Gen).
נעשה זאת לכל חוק וחוק, מן המשפט ועד המילה הבודדת.
2. בניית הלקסיקון:
נבנה את הלקסיקון כפי שמתואר לעיל, בקובץ נפרד תוך שימוש במתארים lexicon (אמרנו מתארים, ברבים, משום שעבור קטגוריות שונות צריך לשמור מספר תכוניות שונה, לכן מדובר במתארים בעלי אותו שם אבל מספר מתוארים שונה).
בקובץ המקורי נצטרך לאפשר גישה ללקסיקון, זאת נעשה על ידי שימוש במתאר ensure_loaded/1: :- ensure_loaded([lexicon]) (הסבר מפורט תמצאו במדריך למשתמש).
השלב הקריטי הוא להכניס את המידע מן הלקסיקון לתבנית המוכרת של חוקי DCG. נעשה זאת בצורה אחידה לכל קטגוריה, על ידי שימוש בהאחדה בתוך חוק ה-DCG. הנה לדוגמא הדרך להגדיר בבת אחת, בחוק אחד, את כל שמות העצם בשפה:
n(n(Word),Definiteness,Gender) --> [Word], {lexicon(n,Definiteness,Gender,Word)}.
אנחנו מסתמכים על מבנה המתאר lexicon, שולפים את התכוניות ומכניסים אותן למקום המתאים על ידי האחדה. שימו לב שהמתואר הראשון הוא זה שעוקב אחר המבנה לטובת המנתח.
|
|
מבוא |
|
נושאים בסיסיים |
|
נושאים מתקדמים |
|
סיכום |
|
|