R語言對微博內容的根據人物分類以及對博文的分詞統計

首先介紹一下數據源,根據爬蟲獲得的微博數據,當然包括很多字段(如人物暱稱,發表時間,發表內容,是否原創,是否轉發等等),在這裏簡要介紹一下處理思路,我們只需要這裏的人物暱稱,和發表內容,發表內容用於分詞分析自然不用多說,人物暱稱是用來歸類的,根據我自己的需要,我有一個人物歸類空間,需要將在同一類中的人物的博文歸在一起來分析,上代碼:

#分類空間
firstclass<-c(name1,name2)
secondclass<-c(name3,name4,name5)
thirdclass<-c(name6,name7)
fourthclass<-c(name8,name9,name10)
#博文歸類
first<-second<-third<-fourth<-fifth<-sixth<-NA
#0:20是因爲我的原始數據有20個CSV文件
for(i in c(0:20)){
    file<-paste(i,"csv",sep=".")
    #去掉CSV中的標籤
    test<-read.csv(file,header=FALSE,sep=",")
    #截取原始文件中的暱稱和博文內容兩個字段(V2,V5是我自己文件字段的對應位置)
    firstdata<-subset(test,V2 %in% firstclass,select=c(V2,V5))
    #將20個文件中暱稱在第一類中的所有博文合併
    first<-rbind(first,firstdata)
    #刪除NA值
    first<-na.omit(first)
    seconddata<-subset(test,V2 %in% secondclass,select=c(V2,V5))
    second<-rbind(second,seconddata)
    second<-na.omit(second)
    thirddata<-subset(test,V2 %in% thirdclass,select=c(V2,V5))
    third<-rbind(third,thirddata)
    third<-na.omit(third)
    forthdata<-subset(test,V2 %in% forthclass,select=c(V2,V5))
    forth<-rbind(forth,fourthdata)
    forth<-na.omit(fourth)  
}
#這裏得到的first,second...forth,就是包含暱稱和內容的數據框
#將這些重新寫入文件,就是預處理之後我們所要處理的原始數據
write.table(first,file="first.csv",sep=",")
write.table(second,file="second.csv",sep=",")
write.table(third,file="third.csv",sep=",")
write.table(forth,file="forth.csv",sep=",")
#下面是分詞
#首先引入分詞包,和詞雲包(說明一下,如果是在windows下引入rJava可能會出錯,需要設置環境變量)
library(rJava)
library(Rwordseg)
library(RColorBrewer)
library(wordcloud)
#從CSV讀取的字符串數據,會被轉成因子很煩(我在read.csv中鍵入stringAsFactors=FALSE沒有這個參數)
firstwords<-as.character(first$V5)
secondwords<-as.character(second$V5)
thirdwords<-as.character(third$V5)
forthwords<-as.character(forth$V5)
#對微博內容做處理,剔除鏈接什麼的
for(i in c(firstwords,secondwords,thirdwords,forthwords)){
i<-gsub(pattern="http:\\[a-zA-Z\\/\\.0-9]","",i)
}
#這裏還應該根據自己的需要擴展詞庫中的詞
insertWords(c("微博內容","分詞統計"),save=TRUE)
deleteWords(c("微博內容""分詞統計"),save=TRUE)
#分詞函數
func1<-function(data){
    words<-unlist(lapply(X=data,FUN=segmentCN))
    #過濾掉只有一個字的分詞
    words<-subset(words,nchar(words)>1) 
    #統計詞頻
    freq<-table(unlist(words))
    freq<-rev(sort(freq))#這裏有兩個屬性freq.word freq.Freq
    freq<-data.frame(freq=freq)
    #按詞頻過濾只出現過1次的詞
    freq2=subset(freq,freq$freq.Freq>=2)
    return(freq2)
}
#執行分詞,並將詞和詞頻保存文件
firstfreq<-func1(firstwords)
write.table(firstfreq,file="firstfreq.csv",sep=",")
secondfreq<-func1(secondwords)
write.table(secondfreq,file="secondfreq.csv",sep=",")
thirdfreq<-func1(thirdwords)
write.table(thirdfreq,file="thirdfreq.csv",sep=",")
forthfreq<-func1(forthwords)
#最後一步,畫詞雲圖
mycolors<-brewer.pal(8,"Dark2")
windowsFonts(myFont=windowsFont("微軟雅黑"))
png("4.png")
wordcloud(fourthfreq$freq.Var1,fourthfreq$freq.Freq,min.freq=10,max.freq=Inf,random.order=FALSE,
random.color=FALSE,colors=mycolors,family="myFont")
dev.off()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章