一、案例描述:
本案例基于python與R語言,對豆瓣某電影短評進行簡單情感分析:
實現:
(一)、基于python爬取豆瓣電影短評500條;
[由于豆瓣的反爬措施,用戶需登陸後才能爬取到500條評論]
(爬取方法:1、使用selenium爬取;
2、複制登錄後的cookies,使用requests庫爬取);
(二)、基于R語言進行文本讀取、清洗、分詞、情感打分、可視化;
本案例的代碼、數據集、情感詞典、停用詞請關注私信領取
二、實操過程:
本案例基于兩部分展開:
(一)數據獲取:
【cookies為用戶自行登錄後,于google浏覽器的netWord監督組件中獲取】
1、數據爬取代碼如下:
(二)、基于R語言對數據進行情感打分:
1、基于R語言對評論數據進行簡單的情感分析:
實操過程中發現:繁體字對情感打分的影響、停用詞、切詞效果對語句情感得分的影響;
2、過程:數據讀取、數據清洗、詞典導入、分詞、情感打分、詞雲圖;
2.1:數據導入:
在使用R導入數據之前,需用excel将評論中的繁體字評論轉為簡體;
2.2數據清洗:
本案例的數據清洗部分僅去除評論中的不可見字符【空格、換行符、制表符等】
2.3詞典導入:
2.4分詞:
2.5情感打分:
2.6繪制詞雲圖:
Wordfreq:
詞雲圖:
三、總結:
1、案例僅簡單對評論數據進行情感打分,局限性在于未對評論中的英文評論進行處理;
2、實操過程中發現停用詞、切詞效果對語句情感得分影響較大;
[停用詞中包含停止詞]
3、效果圖:
感謝您的閱讀!
附:完整代碼:
#--------------載入所需R包:
library(pacman)
p_load(readr,jiebaR,jiebaRD,plyr,stringr,stringi,ggplot2,wordcloud2)
#-----------------步驟一:數據讀取-------------------
text <- read.table("D:/a情感分析/text1.csv", dec = ",", sep = ",",stringsAsFactors = FALSE, header = TRUE,
blank.lines.skip = TRUE)
str(text) #查看數據類型;
#------------------步驟二:數據清洗------------------:
#這裡僅僅簡單清理了下空格(包含換行符、制表符等)
text$comment<- as.character(sapply(text$comment, str_replace_all, '[\\s]*', ''))
#------------------步驟三:讀取情感詞典--------------:
#正負詞典中包含文本和得分,負向我标記為-1,正向我标記為1.
pos <- read.table("D:/a情感分析/tsinghua.positive.gb.txt",
header = F,
stringsAsFactors = F,strip.white = T,skip = 1,col.names = "words")
pos1 <- read.table("D:/a情感分析/正面評價詞語(中文).txt",
header = F,
stringsAsFactors = F,strip.white = T,skip = 1,col.names = "words")
pos$weight<-1
pos1$weight<-1 #對正面情感詞、評價詞打分;
#合并正面情感詞、評價詞:
positive<-rbind(pos,pos1)
neg <- read.table("D:/a情感分析/tsinghua.negative.gb.txt",
header = F,
stringsAsFactors = F,strip.white = T,skip = 1,col.names = "words")
neg1 <- read.table("D:/a情感分析/負面評價詞語(中文).txt",
header = F,
stringsAsFactors = F,strip.white = T,skip = 1,col.names = "words")
neg$weight<--1
neg1$weight<--1
#合并負面情感詞、評價詞:
negative<-rbind(neg,neg1)
#合并正、負情感詞典,賦值給mydict對象:
mydict<-c(positive,negative)
#-----------------------步驟四:分詞-----------------:
engine<-worker(stop_word = "D:/a情感分析/chineseStopWords.txt") #設置分詞引擎;
#将詞典添加進引擎
new_user_word(engine, mydict$words)
#分詞
segwords <- llply(text$comment, segment, engine)
str(segwords) #查看分詞;
#-----------------------步驟五:情感打分--------------
#自定義情感函數
fun <- function(x,y) x%in% y
getscore <- function(x,pwords,nwords){
pos.weight = sapply(llply(x,fun,pwords),sum)
neg.weight = sapply(llply(x,fun,nwords),sum)
total = pos.weight - neg.weight
return(data.frame(pos.weight,neg.weight, total))
}
score1 <- getscore(segwords, pos$words, neg$words)
#将得分與評論合并到一起:a
evalu_score1<- cbind(text, score1)
#判斷得分是否大于1,賦予相應标簽:
evalu.score1 <- transform(evalu_score1,
emotion = ifelse(evalu_score1$total> 0, 'Pos', 'Neg'))
#查看效果:
View(evalu.score1)
# 計算詞頻
wordfreq <- unlist(segwords)
wordfreq <- as.data.frame(table(wordfreq ))
wordfreq <- arrange(wordfreq , desc(Freq))#排序
head(wordfreq)
write.csv(wordfreq,"D:/wordart.csv")
# 繪制詞雲:
wordcloud2(wordfreq,size=1,shape='star')
本文轉載自學習使我快樂,請支持原創!
感謝大家耐心看完,自己的文章都寫的很細,代碼都在原文中,希望大家都可以自己做一做,請關注後私信回複“數據鍊接”獲取所有數據和本人收集的學習資料。如果對您有用請先收藏,再點贊轉發。
也歡迎大家的意見和建議。
如果你是一個大學本科生或研究生,如果你正在因為你的統計作業、數據分析、論文、報告、考試等發愁,如果你在使用SPSS,R,Python,Mplus, Excel中遇到任何問題,都可以聯系我。因為我可以給您提供最好的,最詳細和耐心的數據分析服務。
如果你對Z檢驗,t檢驗,方差分析,多元方差分析,回歸,卡方檢驗,相關,多水平模型,結構方程模型,中介調節,量表信效度等等統計技巧有任何問題,請私信我,獲取最詳細和耐心的指導。
If you are a student and you are worried about you statistical #Assignments, #Data #Analysis, #Thesis, #reports, #composing, #Quizzes, Exams.. And if you are facing problem in #SPSS, #R-Programming, #Excel, Mplus, then contact me. Because I could provide you the best services for your Data Analysis.
Are you confused with statistical Techniques like z-test, t-test, ANOVA, MANOVA, Regression, Logistic Regression, Chi-Square, Correlation, Association, SEM, multilevel model, mediation and moderation etc. for your Data Analysis...??
Then Contact Me. I will solve your Problem...
加油吧,打工人!
往期内容:R文本挖掘:文本聚類分析
R文本挖掘:中文文本聚類
R文本挖掘:中文詞雲生成
R文本挖掘:社會網絡分析
R文本挖掘:文本主題分析topic analysis
R文本挖掘:手把手教你做詞雲圖,小白教程
R文本挖掘:詞雲圖怎麼做,worldcloud2初識
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!