סיכום הפונקציות החיוניות לניתוח טקסטים, חיפוש הקשרים וסטטיסטיקה לשונית.
פרק 1 של NLTK מלמד אותנו איך להפוך טקסט גולמי למידע משמעותי. אנחנו לא רק קוראים מילים, אלא מחשבים את השכיחות שלהן, את ההקשר בו הן מופיעות ואת העושר הלשוני של הטקסט.
זהו הבסיס לכל מערכת AI שעוסקת בשפה כיום.
import nltk from nltk.book import * # Ready to analyze texts! # text1: Moby Dick # text2: Sense and Sensibility # ...
פונקציה זו מאפשרת לנו לראות מילה בתוך ההקשר שלה. זה לא סתם חיפוש, אלא דרך להבין את המשמעות הסמנטית של המילה בטקסט הספציפי.
text1.concordance("monstrous")
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...
איזה מילים מופיעות בהקשרים דומים? לא בהכרח מילים נרדפות, אלא מילים החולקות תבניות שימוש דומות בטקסט.
text1.similar("monstrous")
true contemptible christian abundant few part mean careful puzzled mystifying passing curious loving wise doleful gamesome singular...
כמה הטקסט עשיר? אנו מחשבים את היחס בין מספר המילים הייחודיות (Types) לסך כל המילים (Tokens). ככל שהמספר גבוה יותר, השפה עשירה יותר.
* שימו לב: במדדים כאלה יש תלות חזקה באורך הטקסט.
def lexical_diversity(text):
return len(set(text)) / len(text)
lexical_diversity(text3) # ספר בראשית
0.06230453042623537 # (כלומר, כל מילה חוזרת בממוצע כ-16 פעמים)
הכלי החזק ביותר לסטטיסטיקה. מאפשר לנו לזהות את המילים הנפוצות ביותר בטקסט, ולמצוא מילות מפתח המאפיינות את הספר.
fdist1 = FreqDist(text1)
print(fdist1.most_common(50))
fdist1['whale']
[('the', 13721), ('of', 6536), ('and', 6024)...]
906 # המילה לוויתן מופיעה 906 פעמים
זיהוי זוגות מילים שמופיעים יחד בתדירות גבוהה באופן חריג. זה עוזר לזהות שמות מקומות, ניבים או ביטויים ייחודיים לטקסט.
text1.collocations()
Moby Dick; White Whale; old man; Captain Ahab; Right Whale; Captain Peleg; New Bedford; Cape Horn; ...
לפעמים אנחנו רוצים למצוא מילים ספציפיות, למשל מילים ארוכות מאוד שמעידות על סגנון כתיבה פורמלי, או מילים שמופיעות בתדירות מסוימת.
sorted(w for w in set(text1) if len(w) > 15)
['cannibalistically', 'characteristically', 'circumnavigating', 'comprehensiveness', 'hermaphroditical', 'indiscriminately', ...]
כמה אחוזים מהטקסט תופסת מילה מסוימת? שורה אחת פשוטה שנותנת לנו מידע כמותי מדויק על הנושא המרכזי.
100 * text4.count('freedom') / len(text4)
0.29 # (המילה 'חופש' תופסת כמעט שליש אחוז מנאומי ההשבעה)
במקום לספור מילים, נספור כמה אותיות יש בכל מילה. זה מגלה לנו את המבנה המורפולוגי של השפה - רוב המילים באנגלית הן בנות 3 אותיות בלבד.
# יצירת רשימה של אורכי כל המילים (כולל סינון)
word_lengths = [len(w) for w in text1 if w.isalpha()]
fdist_len = FreqDist(word_lengths)
fdist_len.most_common(5)
[(3, 50223), (1, 47933), (4, 42345), (2, 38513), (5, 26597)] # (מילים באורך 3 הן הנפוצות ביותר)
למרות ש-NLTK עוסק בעיבוד, התוצאה הסופית מוצגת לעיתים קרובות כענן מילים. אנו משתמשים ב-FreqDist כדי להכין את הנתונים לויזואליזציה.
# Python concept:
from wordcloud import WordCloud wc = WordCloud(width=800, height=400, background_color="white") wc.generate_from_frequencies(fdist1)
איתור מילים, ביטויים ומילים ארוכות בטקסט.
מדידת שכיחות, עושר לשוני והתפלגויות.
הבנת הקשרים (Concordance) וצירופי מילים.