تحليل مشاعر تويتر هو عملية استخدام لغة بايثون لفهم المشاعر أو الآراء المعبر عنها في التغريدات تلقائيًا. ومن خلال تحليل النص يمكننا تصنيف التغريدات إلى سلبية إيجابية أو محايدة. يساعد هذا الشركات والباحثين على تتبع سمعة العلامة التجارية المزاجية العامة أو ردود الفعل على الأحداث في الوقت الفعلي. تعمل مكتبات Python مثل TextBlob Tweepy وNLTK على تسهيل جمع التغريدات ومعالجة النص وإجراء تحليل المشاعر بكفاءة. 
كيف يكون تحليل المشاعر على تويتر مفيدًا؟
- يعد تحليل المشاعر على تويتر أمرًا مهمًا لأنه يساعد الأشخاص والشركات على فهم ما يفكر فيه الجمهور في الوقت الفعلي.
- يتم نشر ملايين التغريدات يوميًا لمشاركة الآراء حول المنتجات والعلامات التجارية والأحداث أو القضايا الاجتماعية. من خلال تحليل هذا التدفق الضخم من البيانات، يمكن للشركات قياس اتجاهات رضا العملاء في وقت مبكر والتعامل مع التعليقات السلبية بسرعة واتخاذ قرارات أفضل بناءً على ما يشعر به الناس فعليًا.
- من المفيد أيضًا للباحثين والحكومات مراقبة المزاج العام أثناء أزمات الانتخابات أو الأحداث الكبرى حيث أنها تحول التغريدات الأولية إلى رؤى قيمة.
التنفيذ خطوة بخطوة
الخطوة 1: تثبيت المكتبات الضرورية
تقوم هذه الكتلة بتثبيت المكتبات المطلوبة واستيرادها. يستخدم الباندا لتحميل البيانات والتعامل معها TfidfVectorizer لتحويل النص إلى أرقام و تعلم scikit لتدريب النموذج.
Pythonpip install pandas scikit-learn import pandas as pd from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.model_selection import train_test_split from sklearn.naive_bayes import BernoulliNB from sklearn.linear_model import LogisticRegression from sklearn.svm import LinearSVC from sklearn.metrics import accuracy_score classification_report
الخطوة 2: تحميل مجموعة البيانات
- هنا نقوم بتحميل مجموعة بيانات المشاعر 140 من ملف CSV مضغوط، يمكنك تنزيله من Kaggle.
- نحتفظ فقط بالقطبية وأعمدة نص التغريدة ونعيد تسميتها من أجل الوضوح ونطبع الصفوف القليلة الأولى للتحقق من البيانات.
df = pd.read_csv('training.1600000.processed.noemoticon.csv.zip' encoding='latin-1' header=None) df = df[[0 5]] df.columns = ['polarity' 'text'] print(df.head())
الإخراج:
الإخراجالخطوة 3: احتفظ فقط بالمشاعر الإيجابية والسلبية
- نقوم هنا بإزالة التغريدات المحايدة حيث تكون القطبية 2 لتعيين التسميات بحيث يظل 0 سالبًا ويصبح 4 1 إيجابيًا.
- ثم نقوم بطباعة عدد التغريدات الإيجابية والسلبية المتبقية في البيانات.
df = df[df.polarity != 2] df['polarity'] = df['polarity'].map({0: 0 4: 1}) print(df['polarity'].value_counts())
الإخراج:
الإخراجالخطوة 4: تنظيف التغريدات
- نحدد هنا وظيفة بسيطة لتحويل كل النص إلى أحرف صغيرة لتحقيق الاتساق، وتطبيقها على كل تغريدة في مجموعة البيانات.
- ثم يعرض الإصدارات الأصلية والمنظفة من التغريدات القليلة الأولى.
def clean_text(text): return text.lower() df['clean_text'] = df['text'].apply(clean_text) print(df[['text' 'clean_text']].head())
الإخراج:
الإخراجالخطوة 5: تدريب تقسيم الاختبار
- يقوم هذا الكود بتقسيم أعمدة النص النظيف والقطبية إلى مجموعات تدريب واختبار باستخدام تقسيم 80/20.
- Random_state=42 يضمن إمكانية تكرار نتائج.
X_train X_test y_train y_test = train_test_split( df['clean_text'] df['polarity'] test_size=0.2 random_state=42 ) print('Train size:' len(X_train)) print('Test size:' len(X_test))
الإخراج:
حجم القطار: 1280000
حجم الاختبار: 320000
الخطوة 6: تنفيذ التوجيه
- ينشئ هذا الرمز ناقل TF IDF الذي يحول النص إلى ميزات رقمية باستخدام unigrams وbigrams يقتصر على 5000 ميزة.
- فهو يناسب ويحول بيانات التدريب ويحول بيانات الاختبار ثم يطبع أشكال مصفوفات TF IDF الناتجة.
vectorizer = TfidfVectorizer(max_features=5000 ngram_range=(12)) X_train_tfidf = vectorizer.fit_transform(X_train) X_test_tfidf = vectorizer.transform(X_test) print('TF-IDF shape (train):' X_train_tfidf.shape) print('TF-IDF shape (test):' X_test_tfidf.shape)
الإخراج:
شكل TF-IDF (اختبار): (320000 5000)
الخطوة 7: تدريب نموذج برنولي نايف بايز
- هنا ندرب أ برنولي نايف بايز مصنف على ميزات TF IDF من بيانات التدريب.
- فهو يتنبأ بالميول تجاه بيانات الاختبار ثم يطبع الدقة وتقرير التصنيف التفصيلي.
bnb = BernoulliNB() bnb.fit(X_train_tfidf y_train) bnb_pred = bnb.predict(X_test_tfidf) print('Bernoulli Naive Bayes Accuracy:' accuracy_score(y_test bnb_pred)) print('nBernoulliNB Classification Report:n' classification_report(y_test bnb_pred))
الإخراج:
الإخراجالخطوة 9: تدريب نموذج آلة ناقل الدعم (SVM).
- هذا الكود يدرب أ آلة دعم المتجهات (SVM) بحد أقصى 1000 تكرار على ميزات TF IDF.
- يتنبأ بملصقات الاختبار ثم يطبع الدقة وتقرير تصنيف مفصل يوضح مدى جودة أداء SVM.
svm = LinearSVC(max_iter=1000) svm.fit(X_train_tfidf y_train) svm_pred = svm.predict(X_test_tfidf) print('SVM Accuracy:' accuracy_score(y_test svm_pred)) print('nSVM Classification Report:n' classification_report(y_test svm_pred))
الإخراج:
أوري مقابل عنوان ورل
الإخراجالخطوة 10: تدريب نموذج الانحدار اللوجستي
- هذا الكود يدرب أ الانحدار اللوجستي نموذج مع ما يصل إلى 100 تكرار على ميزات TF IDF.
- يتنبأ بتسميات المشاعر لبيانات الاختبار ويطبع تقرير التصنيف الدقيق والمفصل لتقييم النموذج.
logreg = LogisticRegression(max_iter=100) logreg.fit(X_train_tfidf y_train) logreg_pred = logreg.predict(X_test_tfidf) print('Logistic Regression Accuracy:' accuracy_score(y_test logreg_pred)) print('nLogistic Regression Classification Report:n' classification_report(y_test logreg_pred))
الإخراج:
الإخراجالخطوة 11: إجراء تنبؤات على نماذج التغريدات
- يأخذ هذا الكود ثلاث عينات من التغريدات ويحولها إلى ميزات TF IDF باستخدام نفس الناقل.
- ثم يتنبأ بمشاعرهم باستخدام نماذج BernoulliNB SVM ونماذج الانحدار اللوجستي المدربة ويطبع النتائج لكل مصنف.
- حيث يشير الرقم 1 إلى الإيجابية و 0 إلى السلبية.
sample_tweets = ['I love this!' 'I hate that!' 'It was okay not great.'] sample_vec = vectorizer.transform(sample_tweets) print('nSample Predictions:') print('BernoulliNB:' bnb.predict(sample_vec)) print('SVM:' svm.predict(sample_vec)) print('Logistic Regression:' logreg.predict(sample_vec))
الإخراج:
الإخراجيمكننا أن نرى أن نماذجنا تعمل بشكل جيد وتعطي نفس التنبؤات حتى مع اختلاف الأساليب.
إنشاء اختباريمكنك تنزيل كود المصدر من هنا- تحليل مشاعر تويتر باستخدام بايثون