הקשר: פרויקט אינטגרציה שמשלב את שלוש היחידות האחרונות (OOP, SOLID, Exceptions/IO/JSON/LINQ) — לא נלמד כאן שום כלי חדש (מלבד SelectMany), רק שילוב של כלים קיימים לפתרון אחד שלם.

מטרת הפרויקט: הסטודנטים יבנו קוד עובד שקורא CSV, סופר תדירויות מילים עם LINQ, ומסווג הודעה חדשה במחלקה מובנית לפי SRP — בלי הדרכה שלב-אחר-שלב.


דגשים להנחיה

  • זהו הפרויקט הראשון בקורס עם עבודה עצמאית ממושכת — תנו לרוב הזמן להיות עבודה עצמאית/בזוגות, לא הרצאה. הכינו את עצמכם לסבב בין הסטודנטים ולעזור נקודתית.
  • אם סטודנטים נתקעים, הפנו אותם קודם חזרה לשיעור ה-LINQ (GroupBy/SelectMany) או ה-OOP (SRP) הרלוונטי — רוב הקשיים כאן הם ביישום כלים קיימים, לא במושג חדש.
  • SelectMany הוא הכלי היחיד שלא נלמד במפורש קודם — אם סטודנטים לא מכירים אותו, זה בסדר להסביר אותו נקודתית: הוא “משטח” רשימה-של-רשימות לרשימה שטוחה אחת, שונה מ-Select הרגיל.

איך להעריך הצלחה

בדקו שקריאת ה-CSV, ספירת התדירויות והסיווג עצמו נמצאים בשלושה מקומות נפרדים בקוד (לא מעורבבים במתודה אחת) — זה הסימן שה-SRP באמת יושם, לא רק “עבד במקרה”. הריצו את המסווג על הודעה עם מילים מוכרות מ-spam ועל הודעה נייטרלית, וודאו שהתוצאות הגיוניות. אם התוצאה זהה לכל הודעה (הכל מסווג לאותה קטגוריה), כנראה שיש בעיה בטיפול במילים לא-מוכרות (ציון שמתאפס בכפל).


טעויות נפוצות של סטודנטים

  • לשכוח לדלג על שורת הכותרת ב-CSV ולכלול אותה בטעות כנתון אימון.
  • להשתמש בברירת מחדל 0 לתדירות של מילה לא-מוכרת, מה שמאפס את הציון כולו בכפל — כדאי לכתוב את המלכודת הזו על הלוח מראש ולהסביר את הסיבה, לפני שסטודנטים מגיעים אליה בעצמם ומקבלים תוצאות מוזרות.
  • לערבב את לוגיקת הקריאה מהקובץ עם לוגיקת הסיווג באותה מתודה — הפרת ה-SRP שהפרויקט אמור להדגים.

תרגיל חשיבה

שאלת פתיחה: “המסווג שלכם למד רק מ-20 הודעות. אם תבדקו אותו על הודעה עם מילים שהוא מעולם לא ראה — מה יקרה, ולמה זה בעייתי?”

מהלך: הובילו לתובנה שמילה לא-מוכרת צריכה לקבל ציון “נייטרלי” ולא לאפס את כל החישוב. אבל גם זה לא פתרון מושלם — עם נתוני אימון קטנים, המסווג “לא יודע הרבה” ועלול לטעות. זו הזדמנות טובה לדבר על החשיבות של כמות נתוני אימון באלגוריתמי למידה בכלל, נושא שיחזור בהרחבה רבה יותר ביחידות ה-Data מאוחר יותר בקורס.

מה המרצה מראה בסוף: הריצו מסווג עובד על הודעה עם הרבה מילים לא-מוכרות, והראו שהציון קרוב מדי בין spam ל-ham (כי כל המילים הלא-מוכרות “לא תורמות מידע”). זו דוגמה חיה למגבלת “כמה שיותר נתוני אימון = מסווג טוב יותר” — נושא שיעמיק בהמשך הקורס.