我们的数据分析工作,不仅仅有对数据的分析,还有对文字资料整合的统计分析。在进行词频统计之前,有一项必须要做的工作就是中文的分词。

语料库的处理

语料库
语料库是我们要分析的所有文档的集合
中文分词
将一个汉字序列切分成一个一个单独的词
停用词
数据处理的时候,自动过滤掉某些字或词,包括泛滥的词,例如web,
网站等,又如语气助词、副词、介词、连接词等,例如的,地,得。

R 中的 API(应用程序的接口)
tm包
安装 install.packages(“tm”)
读入语料库:
Corpus(x,readerControl)
x 语料库的数据源

  • DirSource 目录数据源
  • VectorSource 向量数据源

readerControl 语料库的读取控制器,是一个list

  • reader 文本为reader,pdf为readPDF等
  • language 文本语言,默认为”en”

语料库处理与中文分词
语料库处理函数:
tm_map(x,FUN)
x 语料库
FUN 处理函数

  • tolower 转成小写
  • stripWhitespace 移除空白字符
  • plainTextDocument处理HTML或者XML文档
  • segmentCN 中文分词函数,来自Rwordseg包

Rwordseg包
安装方法:
install.packages(“rJava”)
install.packages(“Rwordseg”,repos=”http://R-Forge.R-project.org”)
在安装Rwordseg包时,大家可能会遇到各种各样的问题,我专门写了一篇关于Rwordseg包的安装教程,供大家参考:
http://blog.csdn.net/lll1528238733/article/details/75269892

分词方法:
segmentCN(strwords,outfile=”“,returnType=c(“vector”,”tm”))

  • strwords 需要分词的字符串或者文件路径 outfile
  • 分词后输出的路径,默认为输入文件的同级目录
  • returnType 返回值类型,默认是数组,可以选择为tm包的语料库类型。

安装字典来提高分词的准确性
安装/卸载 字典
installDict(dictpath,dictname)
uninstallDict(dictname)

  • dictpath 字典文件路径
  • dictname 字典的名字

字典下载:http://pinyin.sougou.com/dict/
显示字典列表
listDict()

中文分词的代码示例:

#install.packages("tm");
#install.packages("tmcn", repos="http://R-Forge.R-project.org");

library(tm)
library(tmcn)

#按目录读入语料库
C000007 <- Corpus(
  DirSource(
    'SogouC.mini/Sample/C000007'
  ), 
  readerControl = list(language="UTF-8")
)

stopwordsCN()

library(Rwordseg)

C000007 <- tm_map(C000007, stripWhitespace)
C000007 = tm_map(C000007, content_transformer(segmentCN), returnType='tm')
C000007 <- tm_map(C000007, content_transformer(function(x) iconv(x, from="UTF8", to="GB2312", sub="byte")))

control = list(
  wordLengths = c(4, 8),
  stopwords = stopwordsCN()
)
dd = stopwordsCN()

fix(dd)
#转成向量矩阵
mt <- TermDocumentMatrix(C000007, control=control)
mt$dimnames
dmt <- as.matrix(mt)
fix(dmt)

#install.packages("wordcloud")
library(wordcloud)
v <- sort(rowSums(dmt), decreasing = TRUE)
d <- data.frame(word = names(v), freq = v)
wordcloud(
  d$word, 
  d$freq, 
  min.freq=10, 
  random.order=F, 
  colors=rainbow(length(row.names(dmt)))
)

这里写图片描述

更多推荐