中文信息处理技术专栏
tm是一个专门用于文本挖掘的程序包,它可以把来自多种途径(文件夹、文件、甚至是pdf或者word文件)的文本转换为语料库,然后按照自己的需求表示为文档特征矩阵,接着利用进行多种成熟挖掘手段进行处理。而wordcloud是一个可以把文本根据频度等进行进行可视化输出词云的包,使用简单。
下面针对《骆驼祥子》的电子书,首先分词、然后去除停用词,接着转换为语料库,并统计出词频,从而输出数据供wordcloud输出词云。
#install.packages(wordcloud,repos=http://mirrors.ustc.edu.cn/CRAN/)
#安装词云包
library(rJava)
library(Rwordseg)
library(wordcloud)
library(tm)
insertWords(c(祥子,虎妞,刘四爷,曹先生,曹太太,小福子,二强子,老马,高妈,孙侦探,陈二奶,阮明))
#把姓名加入到分词的词库
segmentCN(F:/Ex12/data/骆驼祥子.txt,outfile=f:/ex12/data/骆驼祥子.txt.segment)
#分词
file<-DirSource(directory = f:/ex12/data,
encoding=UTF-8,
pattern = *.segment)
ovid<-Corpus(file,readerControl = list(language = zh))
#从文件加载语料库
ovid<-tm_map(ovid,stripWhitespace)
#去除多余的空格
ctrl <- list(tolower=FALSE,
removeNumbers=FALSE,
wordLengths = c(1, Inf),
stopwords = FALSE)
stopwords<-read.csv(f:/ex12/data/stopwords.txt, stringsAsFactors=FALSE)
stopwords<-stopwords[,1]
stopwords<-enc2utf8(stopwords)
stopwords<-stopwords[Encoding(stopwords)!=unknown]
#读取停用词并过滤掉不合法的数据
ovid<-tm_map(ovid,removeWords,stopwords)
#去除停用词
wordfreq<-termFreq(ovid[[1]],ctrl)
#获取频度
wordfreq<-sort(wordfreq,decreasing=true)
#按照频度从大到小排序
summary(wordfreq)
#得到词频
wordfreq<-wordfreq[wordfreq>mean(wordfreq)]
#只留下词频大于平均值的词语
words<-names(wordfreq)
#从向量的名称中得到每一个词组
wordcloud(words, wordfreq, col = rainbow(length(wordfreq)),max.words=500)
#输出词云
在R语言环境中运行如上代码,可以输出类似图1的词云图,其中的字大小代表了该词组的频道信息,越大的字词频道越高。
图1骆驼祥子的词云图
地址:苏州市十梓街1号 18新利体育 纵横研究所联系电话:0512-65243192电子邮箱:ckc@suda.edu.cn
Copyright © 18新利体育 纵横汉字信息技术研究所 2017