ניתוח סנטימנט של טקסט בעברית
אם רק הייתי יודע מה רוצה ההמון הייתי יכול לעשות מזה הון.
אמירה זו מפיו של איש עסקים חסר שם או של פוליטיקאי שרוצה לנצח בכל מחיר בבחירות היא משאלת הלב של רבים שרוצים לזכות בכוח והשפעה מאז המצאת הקפיטליזם והדמוקרטיה. את הבעיה של הבנת ההמון ניסו לפתור באמצעים שונים. שיחה עם אמא, התייעצות עם חברים, סקרים בטלפון וקבוצות מיקוד במסגרת חוגי בית. אבל הבעיה היתה ונותרה ההצלחה המוגבלת של הכלים המסורתיים כפי שהוכיח כשלון הסקרים במערכות הבחירות האחרונות בארץ ובארה"ב. הבעיה של סקרים שמסיקים את ההיפך מהבחירות בפועל עלולה לנבוע מכך שאנשים רוצים להופיע רציונליים בסקרים בעוד הבחירות בפועל הם עניין רגשי יותר מאשר שכלי.
בימינו מנסים להתמודד עם הבעיה באמצעות ניתוח סנטימנט ברשתות חברתיות.
ניתוח סנטימנט (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}
שימוש בסימני קריאה מוסיף לעוצמת הרגשות. במקרה זה מחזק את האופי החיובי ? של המשפט.
כמו תמיד, מומלץ לעיין בדוקומנטציה הרשמית של הספרייה.
- אנליזת סנטימנט לטקסט בעברית
לצערנו, ספריית 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 כוכבים
המדריכים באתר עוסקים בנושאי תכנות ופיתוח אישי. הקוד שמוצג משמש להדגמה ולצרכי לימוד. התוכן והקוד המוצגים באתר נבדקו בקפידה ונמצאו תקינים. אבל ייתכן ששימוש במערכות שונות, דוגמת דפדפן או מערכת הפעלה שונה ולאור השינויים הטכנולוגיים התכופים בעולם שבו אנו חיים יגרום לתוצאות שונות מהמצופה. בכל מקרה, אין בעל האתר נושא באחריות לכל שיבוש או שימוש לא אחראי בתכנים הלימודיים באתר.
למרות האמור לעיל, ומתוך רצון טוב, אם נתקלת בקשיים ביישום הקוד באתר מפאת מה שנראה לך כשגיאה או כחוסר עקביות נא להשאיר תגובה עם פירוט הבעיה באזור התגובות בתחתית המדריכים. זה יכול לעזור למשתמשים אחרים שנתקלו באותה בעיה ואם אני רואה שהבעיה עקרונית אני עשוי לערוך התאמה במדריך או להסיר אותו כדי להימנע מהטעיית הציבור.
שימו לב! הסקריפטים במדריכים מיועדים למטרות לימוד בלבד. כשאתם עובדים על הפרויקטים שלכם אתם צריכים להשתמש בספריות וסביבות פיתוח מוכחות, מהירות ובטוחות.
המשתמש באתר צריך להיות מודע לכך שאם וכאשר הוא מפתח קוד בשביל פרויקט הוא חייב לשים לב ולהשתמש בסביבת הפיתוח המתאימה ביותר, הבטוחה ביותר, היעילה ביותר וכמובן שהוא צריך לבדוק את הקוד בהיבטים של יעילות ואבטחה. מי אמר שלהיות מפתח זו עבודה קלה ?
השימוש שלך באתר מהווה ראייה להסכמתך עם הכללים והתקנות שנוסחו בהסכם תנאי השימוש.