سوف نستعرض طرق تحليل المشاعر (sentiments analysis) بإستخدام البرنامج آر R. في البداية سوف نقوم بتحميل بعض الحزم (packages) التي نحتاجها وهي:
In:
install.packages("tm")
install.packages("wordcloud")
install.packages("qdap")
install.packages("syuzhet")
install.packages("ggplot2")
الحزمة qdap تتطلب وجود نسخة من Java مثبته على جهازك والتي يمكنك الحصول عليها من خلال الضغط على الرابط:
ثم بعد ذلك نقوم بإستدعاء نسخة الجافا بإستخدام الكود:
In:
# for 64-bit
Sys.setenv(JAVA_HOME='C:\\Program Files\\Java\\filename')
# for 32-bit
Sys.setenv(JAVA_HOME='C:\\Program Files (x86)\\Java\\filename')
حيث يتم إستبدال filename بأسم ملف نسخة الجافا الموجود على جهازك. ثم بعد ذلك قم بتحميل الحزمة qdap مرة أخرى. ثم فعل هذه الحزم كما يلي:
In:
library(tm)
library(wordcloud)
library(qdap)
library(syuzhet)
library(ggplot2)
الآن نستخدم الدالة (freq_terms) وهي تقوم بتحديد الكلمات الأكثر تكراراً، وكذلك نستخدم الدالة (wordcloud) وهي تقوم برسم سحابة الكلمات كما يلي:
In:
Freq = freq_terms(mydata, at.least = 1)
wordcloud(Freq$WORD, Freq$FREQ, colors = Freq$FREQ, max.words = 200)
ونلاحظ أن الكلمات في السحابة هي الكلمات شائعة الإستخدام والمتكررة عند كتابة أي جملة باللغة الإنجليزية. هذه النتيجة طبيعية لأننا لم نقوم بتنظيف البيانات. وبالتالي سوف نستخدم الدوال التالية لتنظيف البيانات:
الدالة | وصفها |
tolower | تغيير الأحرف الصغيرة الى كبيرة أو العكس |
removeWords | حذف كلمات محددة |
removePunctuation | حذف علامات الترقيم |
removeNumbers | حذف الأرقام |
كما يلي:
In:
Clean_Data = tolower(mydata)
Removed_words = c("a", "that","and","the","it", "on","so","have", "of","for","be","this","to","is","in", stopwords("en"))
Clean_Data = removeWords(Clean_Data, Removed_words)
Clean_Data = removePunctuation(Clean_Data)
Clean_Data = removeNumbers(Clean_Data)
ثم بعد ذلك سوف نقوم برسم سحابة الكلمات مرة أخرى:
In:
Freq = freq_terms(Clean_Data , at.least = 1)
wordcloud(Freq$WORD, Freq$FREQ, colors = Freq$FREQ, max.words = 200)
نلاحظ أنه الكلمات في سحابة الكلمات أصبحت ذات مدلول وتعطي أشارة عن طبيعة المشاعر في البيانات. الأن سوف ننتقل الى تحليل المشاعر بإستخدام الدالة (get_nrc_sentiment) والتي تستخدم قاموس NRC sentiment للبحث عن وجود مستويان من المشاعر في البيانات (النص) وهي positive و negative. كما يمكن البحث عن وجود ثمان مستويات من المشاعر وهي anger, anticipation, disgust, fear, joy, sadness, surprise, trust. سوف نستخدم الكود التالي:
In:
Sentiment_Analysis = get_nrc_sentiment(Freq$WORD)
Sentiment_Analysis = cbind("Words" = Freq$WORD, Sentiment_Analysis)
Sentiment_Score = data.frame("Score" = colSums(Sentiment_Analysis[10:11]))
Total_Sentiment = cbind("Sentiments" = rownames(Sentiment_Score), Sentiment_Score)
rownames(Total_Sentiment) = NULL
ggplot(data = Total_Sentiment, aes(x = Sentiments, y = Score)) + geom_bar(stat = "identity", aes(fill = Sentiments))
كما يمكن التغيير في الكود السابق كما يلي:
In:
Sentiment_Analysis = get_nrc_sentiment(Freq$WORD)
Sentiment_Analysis = cbind("Words" = Freq$WORD, Sentiment_Analysis)
Sentiment_Score = data.frame("Score" = colSums(Sentiment_Analysis[2:9]))
Total_Sentiment = cbind("Sentiments" = rownames(Sentiment_Score), Sentiment_Score)
rownames(Total_Sentiment) = NULL
ggplot(data = Total_Sentiment, aes(x = Sentiments, y = Score)) + geom_bar(stat = "identity", aes(fill = Sentiments))
لتصبح النتيجة:
* المرجع: موقع planet analytics
مرحبا دكتور،
هل ممكن استخدام الاسلوب بالاعلى لتحليل المشاعر للتغريدات الوراده بالغة العربيه؟
نعم … ولكن مع بعض التغييرات التي سوف يتم مناقشتها في موضوع لاحق
هلا دكتور،، شكرا على الشرح ،، ممتاز ،،، حابه اسأل متى ستناقش كيفية تحليل البيانات في اللغه العربيه
مع جزيل الشكر
مازلت أعمل على حل بعض المشاكل المتعلقة بهذا الموضوع.
Sys.setenv(JAVA_HOME=’C:\\Program Files\\Java\\filename’)
هل المقصود في filename اسم المجلد كامل jdk-11.0.2
هل الاسناد صحيح
Sys.setenv(JAVA_HOME=’C:\\Program Files\\Java\\jdk-11.0.2′)
لدي خطا في الخطوة و الخطوات التي بعدها
Freq <- freq_terms(Clean_Data , at.least = 1)
wordcloud(Freq$WORD, Freq$FREQ, colors = Freq$FREQ, max.words = 200)
و الخطوات الي بعدها
لدي مشكلة في الخطوة
Freq <- freq_terms(Clean_Data , at.least = 1)
wordcloud(Freq$WORD, Freq$FREQ, colors = Freq$FREQ, max.words = 200)
هل فيه طريقة لحفظ البيانات بعد جلبها من توتر في ملف csv
نعم، شاهد الرابط:
https://aziz-blog.com/?p=10199
السلام عليكم د.عزيز
ابي استفسر بخصوص تحليل المشاعر بتويتر بإستخدام اللغة العربية ؟
هل ستطرح هذا الموضوع
او اذا في نواقع تشرح كيفية القيام بها اتمنى تزويدنا بها
وشكرا لك وعلى مجهودك الاكل من رائع