הגדרת הפרויקט

זהו הפרויקט המסכם של שלוש היחידות הראשונות של הקורס — OOP, SOLID, ו-Exceptions/IO/JSON/LINQ יחד: בונים מסווג טקסט פשוט (Naive Bayes) שקורא הודעות מתויגות מקובץ CSV (“ספאם”/“תקין”), לומד מהן תדירויות מילים לפי קטגוריה, ומסווג הודעה חדשה על סמך מה שלמד. זו הפעם הראשונה בקורס שבה כל הכלים שנלמדו — File I/O, LINQ, מחלקות, SOLID — צריכים להתחבר לפרויקט אחד שלם ואמיתי, בלי הדרכה שלב-אחר-שלב.

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

מה צריך להיות מוכן בסוף

דרישות:

  1. קובץ CSV עם לפחות 20 הודעות מתויגות (text,label, spam/ham), עם מגוון מילים חוזרות בכל קטגוריה
  2. פונקציה שקוראת את ה-CSV לרשימת רשומות (טיפול נכון בשורת הכותרת)
  3. חישוב תדירויות מילים לכל קטגוריה מנתוני האימון, באמצעות LINQ (GroupBy, SelectMany, ToDictionary)
  4. מחלקת NaiveBayesClassifier עם הפרדה ברורה לפי SRP — למשל מתודות נפרדות ל-Train (למידה) ול-Classify (חיזוי), ולא הכל בגוש אחד
  5. סיווג 3 הודעות חדשות (לא מנתוני האימון) והדפסת התוצאה (spam/ham) לכל אחת

קריטריוני הצלחה:

• הודעה עם מילים אופייניות ל-spam (כמו “חינם”, “זכית”) מסווגת כ-spam; הודעה רגילה מסווגת כ-ham

• מילה חדשה שלא הופיעה באימון כלל לא גורמת לציון כולו להתאפס (יש לחשוב על ברירת מחדל סבירה לתדירות לא-מוכרת)

• שינוי סדר השורות בקובץ ה-CSV לא משנה את תוצאת הסיווג הסופית

• קריאת ה-CSV, ספירת התדירויות והסיווג עצמו נמצאים בשלושה מקומות נפרדים וברורים בקוד — לא מעורבבים במתודה אחת

דוקומנטציה רשמית מותרת

Wikipedia — Naive Bayes classifier

Microsoft Learn — SelectMany

Microsoft Learn — File.ReadAllLines