NLTK
Python
עיבוד שפה טבעית - פרק 1

עיבוד שפה עם Python

סיכום הפונקציות החיוניות לניתוח טקסטים, חיפוש הקשרים וסטטיסטיקה לשונית.

למה זה חשוב?

פרק 1 של NLTK מלמד אותנו איך להפוך טקסט גולמי למידע משמעותי. אנחנו לא רק קוראים מילים, אלא מחשבים את השכיחות שלהן, את ההקשר בו הן מופיעות ואת העושר הלשוני של הטקסט.

זהו הבסיס לכל מערכת AI שעוסקת בשפה כיום.

Setup
import nltk
from nltk.book import *

# Ready to analyze texts!
# text1: Moby Dick
# text2: Sense and Sensibility
# ...

פונקציות הליבה

1. חיפוש הקשר (Concordance)

פונקציה זו מאפשרת לנו לראות מילה בתוך ההקשר שלה. זה לא סתם חיפוש, אלא דרך להבין את המשמעות הסמנטית של המילה בטקסט הספציפי.

Python Interactive Shell
text1.concordance("monstrous")
Output:
Displaying 11 of 11 matches:
ong the former , one was of a most monstrous size ...
               of that monstrous picturesque natural...
                  the monstrous cannibal and savage...

2. מילים דומות (Similar)

איזה מילים מופיעות בהקשרים דומים? לא בהכרח מילים נרדפות, אלא מילים החולקות תבניות שימוש דומות בטקסט.

Python Interactive Shell
text1.similar("monstrous")
Output:
true contemptible christian abundant few part mean 
careful puzzled mystifying passing curious loving 
wise doleful gamesome singular...

3. עושר לשוני (Lexical Diversity)

כמה הטקסט עשיר? אנו מחשבים את היחס בין מספר המילים הייחודיות (Types) לסך כל המילים (Tokens). ככל שהמספר גבוה יותר, השפה עשירה יותר.

* שימו לב: במדדים כאלה יש תלות חזקה באורך הטקסט.

Python Interactive Shell
def lexical_diversity(text):
    return len(set(text)) / len(text)

lexical_diversity(text3) # ספר בראשית
Output:
0.06230453042623537 
# (כלומר, כל מילה חוזרת בממוצע כ-16 פעמים)

4. התפלגות תדרים (FreqDist)

הכלי החזק ביותר לסטטיסטיקה. מאפשר לנו לזהות את המילים הנפוצות ביותר בטקסט, ולמצוא מילות מפתח המאפיינות את הספר.

Python Interactive Shell
fdist1 = FreqDist(text1)
print(fdist1.most_common(50))
fdist1['whale']
Output:
[('the', 13721), ('of', 6536), ('and', 6024)...]
906 # המילה לוויתן מופיעה 906 פעמים

5. צירופי מילים (Collocations)

זיהוי זוגות מילים שמופיעים יחד בתדירות גבוהה באופן חריג. זה עוזר לזהות שמות מקומות, ניבים או ביטויים ייחודיים לטקסט.

Python Interactive Shell
text1.collocations()
Output:
Moby Dick; White Whale; old man; Captain Ahab; Right Whale; Captain Peleg; New Bedford; Cape Horn; ...

6. סינון מילים (Filtering)

לפעמים אנחנו רוצים למצוא מילים ספציפיות, למשל מילים ארוכות מאוד שמעידות על סגנון כתיבה פורמלי, או מילים שמופיעות בתדירות מסוימת.

Python Interactive Shell
sorted(w for w in set(text1) if len(w) > 15)
Output:
['cannibalistically', 'characteristically', 'circumnavigating', 'comprehensiveness', 'hermaphroditical', 'indiscriminately', ...]

7. חישוב אחוזים (Percentage)

כמה אחוזים מהטקסט תופסת מילה מסוימת? שורה אחת פשוטה שנותנת לנו מידע כמותי מדויק על הנושא המרכזי.

Python Interactive Shell
100 * text4.count('freedom') / len(text4)
Output:
0.29
# (המילה 'חופש' תופסת כמעט שליש אחוז מנאומי ההשבעה)

8. סטטיסטיקת אורך מילים

במקום לספור מילים, נספור כמה אותיות יש בכל מילה. זה מגלה לנו את המבנה המורפולוגי של השפה - רוב המילים באנגלית הן בנות 3 אותיות בלבד.

Python Interactive Shell
# יצירת רשימה של אורכי כל המילים (כולל סינון)
word_lengths = [len(w) for w in text1 if w.isalpha()]
fdist_len = FreqDist(word_lengths)
fdist_len.most_common(5)
Output:
[(3, 50223), (1, 47933), (4, 42345), (2, 38513), (5, 26597)]
# (מילים באורך 3 הן הנפוצות ביותר)

9. ויזואליזציה (Word Cloud)

למרות ש-NLTK עוסק בעיבוד, התוצאה הסופית מוצגת לעיתים קרובות כענן מילים. אנו משתמשים ב-FreqDist כדי להכין את הנתונים לויזואליזציה.

# Python concept:

from wordcloud import WordCloud

wc = WordCloud(width=800, height=400, background_color="white")
wc.generate_from_frequencies(fdist1)
Whale Ship Sea Moby Dick Ahab Captain water White Boat starbuck Harpoon

סיכום ויזואלי

חיפוש וסינון

איתור מילים, ביטויים ומילים ארוכות בטקסט.

סטטיסטיקה

מדידת שכיחות, עושר לשוני והתפלגויות.

הקשר ומשמעות

הבנת הקשרים (Concordance) וצירופי מילים.