最近一直迷恋文本挖掘,其实大数据在非结构化的处理上主要要解决的一个问题就是文本挖掘(就像你看Hadoop第一个例子就是countWord),主要还是以前看小说看的多,有时候就想总结一下,看看每个作者都喜欢用哪些词汇。
文本挖掘要解决几个问:
1、中文词汇,这个我们有强大的搜狗(R可以直接用搜狗词库,福音啊);
2、词库中没有的词汇,这个就需要我们手动去录入了;
3、同义词,同义词需要我们手工去解决,例如人名,齐天大圣和宇帝是同一个人(都是我,这里请加一个表情);
4、没有了,开搞。
首先要导几个包,没有的自行install,有的直接library。主要是rJava,Rwordseg,wordcloud(注意大小写,rJava安装要注意一下,你的jdk位数和R的位数最好一致,不一致的话在RStudio中自行设置),rJava是连接java的(废话),这里面其实就是连接你的java库,供Rwordseg包调用的;Rwordseg包就牛逼了,LiJian大师开发,可以去他博客踩踩,提供了分词的一堆功能,后面用到了在讲;wordcloud是画词云的,现在的数据挖掘可不比以前了,搞完要做可视化,画的漂漂亮亮,老板才给钱。
导入完词典,就可以开始我们的分词大业了;
将要分词的文本加载到R中,我们使用非常简单的read方法:
read.csv(path, stringsAsFactors=FALSE, header=FALSE)
然后调用Rwordseg包中的分词函数segmentCN:
pwords <- unlist(lapply(X=people, FUN=segmentCN))
分词结束后就是统计每个词有几个了:
v <- table(unlist(pword))
为了方便我们去掉单字和较少的词汇,我们把结果放到一个data.frame中去过滤:
d <- data.frame(词汇=names(v), 词频=v)
然后过滤那些没用的:
d <- subset(d, nchar(as.character(d$词汇))>1 & d$词频.Freq>=100)
最后就是画词云了
wordcloud(d$词汇, d$词频.Freq, random.order=FALSE, random.color=TRUE);
搞定?等等,发现没有男主角和女主角的名字哇?
那是因为词典里面没有,我们要手动录入词典里面没有的词汇,也是Rwordseg包里面的函数:
insertWords()
怎么样,搞定了没有,任意你感兴趣的书籍都可以自己挖一遍,是不是很爽。
PS:文本大小15M,慢到你怀疑是不是失败了,没有截图,因为不小心把Rstudio关了,没耐性在跑一次了