ניתוח סנטימנט של טקסט בעברית

מחבר:
בתאריך:

אם רק הייתי יודע מה רוצה ההמון הייתי יכול לעשות מזה הון.

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

sentiment analysis

בימינו מנסים להתמודד עם הבעיה באמצעות ניתוח סנטימנט ברשתות חברתיות.

ניתוח סנטימנט (sentiment analysis) הוא תחום של עיבוד שפה טבעית (Natural Language Processing) אשר משתמש בתוכנה ומחשבים כדי להסיק את הרגש של בני אדם מהטקסט שהם כותבים. שימוש בניתוח סנטימנט ברשתות חברתיות יכול לסייע בהבנת הרגשות של האוכלוסייה היות שאנשים נוטים לכתוב בפייסבוק ובטוויטר באופן שהוא משוחרר יותר ולוגי פחות, וכך הם חושפים את הרגשות שמניעים אותם. יתרון נוסף הוא שניתן לנתח כמות עצומה של טקסט וכך המדגם גדל. החסרונות הם שלא כולם כותבים ברשת החברתית, וגם שהרשתות חוסמות את הגישה למידע מאז התפוצצות פרשת קיימברידג' אנאלטיקס - פייסבוק.

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

 

התקנת החבילות

!pip install vaderSentiment
!pip install googletrans
  • vaderSentiment מנתח טקסט ומסיק האם הרגש המובע בו הוא שלילי או חיובי על פי השוואה ללקסיקון מילים.
  • Googletrans הוא ה-api של Google translate שתשמש אותנו כדי לתרגם מעברית לאנגלית.
from nltk.sentiment.vader import SentimentIntensityAnalyzer
import nltk
nltk.download('vader_lexicon')
sid = SentimentIntensityAnalyzer()

 

אנליזת סנטימנט לטקסט באנגלית

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

sentence1 = 'I got out of bed at half past ten'
sid.polarity_scores(sentence1)
{'compound': 0.0, 'neg': 0.0, 'neu': 1.0, 'pos': 0.0}

הציונים השלילי (neg) והחיובי (pos) שווים ל 0, והציון הניטרלי (neu) הוא 1. לפיכך הציון המשוקלל (compound) הוא 0, כלומר משפט ניטרלי לגמרי ?.

 

sentence2 = 'I happily got out of bed at half past ten'
sid.polarity_scores(sentence2)
{'compound': 0.5574, 'neg': 0.0, 'neu': 0.69, 'pos': 0.31}

תואר הפועל happily גרע מהניטרליות של המשפט והוסיף לחיוביות שלו וכך הציון המשוקלל נוטה לכיוון החיובי ?.

 

sentence3 = 'I happily got out of bed at half past ten!!'
sid.polarity_scores(sentence3)
{'compound': 0.6351, 'neg': 0.0, 'neu': 0.657, 'pos': 0.343}

שימוש בסימני קריאה מוסיף לעוצמת הרגשות. במקרה זה מחזק את האופי החיובי ? של המשפט.

כמו תמיד, מומלץ לעיין בדוקומנטציה הרשמית של הספרייה.

 

  1. אנליזת סנטימנט לטקסט בעברית

לצערנו, ספריית vaderSentiment לא עובדת בעברית, ולפיכך אין ברירה אלא לתרגם לאנגלית. את התרגום יעשה בשבילנו ה-api הפייתוני של Google translate .

from googletrans import Translator
translator = Translator()

he_sentence = translator.translate('איזה יום שמח לי היום')
print(he_sentence.text)
what a happy day for me today
sid.polarity_scores(he_sentence.text)
{'compound': 0.5719, 'neg': 0.0, 'neu': 0.575, 'pos': 0.425}

משפט חיובי. זה בהחלט עובד.

מה לגבי המשפט הבא?

he_sentence = translator.translate('הייתי שמח הרבה יותר אם זה באמת היה כיף')
sid.polarity_scores(he_sentence.text)

{'compound': 0.7893, 'neg': 0.0, 'neu': 0.534, 'pos': 0.466}

הציון חיובי מאוד (נוטה ל- 1) למרות שכוונת הדובר בדיוק הפוכה. בגלל השימוש במילים החיוביות "שמח" ו"כיף". מה שמלמד אותנו שמחשבים לא מבינים אירוניה. מי היה מאמין.

 

סיכום

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

 

אהבתם? לא אהבתם? דרגו!

0 הצבעות, ממוצע 0 מתוך 5 כוכבים

 

 

הוסף תגובה חדשה

 

= 5 + 2