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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章