"חשוב להכין שיעורי בית בעצמכם, כך אנחנו לומדים ונעשים חכמים יותר. אפשר להיעזר בבינה מלאכותית, אך זכרו שהיא עלולה לטעות ואינה מחליפה אותנו. למדו בחוכמה."
ברוכים הבאים לקורס NLP
במטלה זו נתרגל את יסודות ניתוח הטקסט באמצעות ספריית NLTK. המטלה מורכבת מ-5 משימות מעשיות המתוכננות לביצוע ב-Google Colab. מטרת האפליקציה הזו היא להדריך אתכם שלב-אחר-שלב, להציג דוגמאות ויזואליות לתוצאות המצופות, ולספק רמזים אינטראקטיביים.
חומר קריאה
NLTK Book: פרקים 1-2
סביבת עבודה
Google Colab / Python
זמן משוער
1.5 - 2 שעות
הכנות ראשוניות (Setup)
import nltk import matplotlib.pyplot as plt from nltk.corpus import gutenberg, brown, inaugural, webtext, stopwords from nltk.probability import FreqDist from nltk.tokenize import word_tokenize # Download required resources nltk.download(['gutenberg', 'brown', 'inaugural', 'webtext', 'stopwords', 'punkt'])
1 מילים נפוצות בקלאסיקה ספרותית
ניתוח תדירות מילים בספר "Emma"
המשימה: טענו את הספר "Emma" מקורפוס Gutenberg ומצאו את 20 המילים הנפוצות ביותר לאחר ניקוי הנתונים.
- הסירו מילות עצירה (Stopwords) כמו 'the', 'is', 'at'.
- הסירו סימני פיסוק.
- חשוב: המירו את המילים לאותיות קטנות (lowercase) כדי למנוע כפילויות.
- הציגו את המילים בגרף עמודות.
nltk.corpus.gutenberg.words('austen-emma.txt') :טעינת מילים
stopwords.words('english') :רשימת מילות עצירה
word.isalpha() :סינון תווים שאינם אותיות
FreqDist(cleaned_list) :חישוב התפלגות
# Task 1 Solution
emma_words = nltk.corpus.gutenberg.words('austen-emma.txt')
stop_words = set(stopwords.words('english'))
# Filter words (normalize to lowercase, remove stopwords and non-alphabetic)
filtered_words = [w.lower() for w in emma_words if w.isalpha() and w.lower() not in stop_words]
# Calculate frequency
fdist = FreqDist(filtered_words)
print(fdist.most_common(20))
# Plot
fdist.plot(20, title="Top 20 Words in Emma")
תוצאה מצופה (סימולציה)
2 השוואת עושר לקסיקלי
השוואה בין "Moby Dick" לבין חדשות מקורפוס Brown
Lexical Diversity = Unique Words / Total Words
חשבו את מדד הגיוון הלשוני עבור שני טקסטים שונים. מדד זה מראה עד כמה אוצר המילים בטקסט עשיר ומגוון.
(רצוי לנקות את הטקסט ולהפוך לאותיות קטנות לפני החישוב להשוואה הוגנת).
set(text) :קבלת מילים ייחודיות
len() :ספירה
הערה: טקסט ארוך לרוב בעל גיוון נמוך יותר.
# Task 2 Solution
def lexical_diversity(text):
# Clean text first: lower case and only alphabetic
clean_text = [w.lower() for w in text if w.isalpha()]
return len(set(clean_text)) / len(clean_text)
moby = nltk.corpus.gutenberg.words('melville-moby_dick.txt')
news = nltk.corpus.brown.words(categories='news')
print("Moby Dick:", lexical_diversity(moby))
print("Brown News:", lexical_diversity(news))
השוואת ערכים (דוגמה)
3 חקירת מילים בהקשר
שימוש ב-Concordance להבנת משמעות
בחרו מילה (למשל "love", "war", "government") ומצאו 10 משפטים בהם היא מופיעה בקורפוס Brown. האם המשמעות משתנה?
.concordance(), עליכם להמיר את רשימת המילים לאובייקט nltk.Text.
# Task 3 Solution
brown_words = nltk.corpus.brown.words()
text_obj = nltk.Text(brown_words)
# Show contexts for the word 'government'
text_obj.concordance('government', lines=10)
4 התפלגות אורך מילים
היסטוגרמה של אורכי מילים בקורפוס Inaugural
צרו היסטוגרמה המציגה כמה מילים יש בכל אורך (כמה מילים באורך 3 אותיות, 4 אותיות וכו').
זה עוזר לנו להבין את מורכבות השפה בטקסט.
(הקפידו לסנן סימני פיסוק ולחשב אורך רק למילים אמיתיות).
:יצירת רשימה מסוננת
words = [w for w in text if w.isalpha()]
plt.hist() :יצירת ההיסטוגרמה
# Task 4 Solution
inaugural_words = nltk.corpus.inaugural.words()
# Filter for alphabetic words only to avoid punctuation lengths
words = [w for w in inaugural_words if w.isalpha()]
lengths = [len(w) for w in words]
# Plot histogram
plt.figure(figsize=(10, 5))
plt.hist(lengths, bins=20, range=(1, 20))
plt.title("Word Length Distribution")
plt.xlabel("Length")
plt.ylabel("Frequency")
plt.show()
התפלגות נורמלית אופיינית לשפה (דוגמה)
5 צירופי מילים (Collocations)
זיהוי ביטויים משמעותיים ב-"Moby Dick"
מצאו את 10 הצירופים (Bigrams) השכיחים ביותר. קולוקציות הן זוגות מילים שמופיעים יחד בתדירות גבוהה באופן חריג, ולרוב מצביעים על מושגים או שמות.
# Task 5 Solution
text_obj = nltk.Text(nltk.corpus.gutenberg.words('melville-moby_dick.txt'))
# Show top 10 collocations (no print needed, it prints automatically)
text_obj.collocations(num=10)
תוצאות צפויות (Moby Dick)
📋 הנחיות הגשה
- ✓ השתמשו רק בספריית NLTK.
- ✓ כללו תאי קוד (Code) ותאי הסבר (Markdown).
- ✓ הסבירו כל תוצאה ב-2-3 משפטים.
פורמט:
קישור למחברת Google Colab (יש לוודא הרשאות שיתוף).
דגשים פדגוגיים:
- מטרות למידה: תרגול ניקוי טקסט, הבנת תדירויות, ועבודה עם קורפוסים.
- עומס: המשימות קלות חישובית ומתאימות ל-Colab (ללא GPU).
- הערכה: שים דגש על איכות ה"פרשנות" ב-Markdown, ולא רק על הרצת הקוד.