说明文档可http://download.csdn.net/detail/cl下载1143015961/8436741,这里简单介绍一下。
segmentCN(c("如果你因为错过了太阳而流泪", "你也会错过星星"))
[[1]] [1] 如果你 “因为” “错” “过” “太阳” “而” [8] “流泪” [[2]] [1] “你” “也” “会” “错” “过” “星星” 可以看出,分词的效果并不理想。错过是一个单词,但它是分开的,这表明单词不存在于单词库中。因此,有时我们需要在单词库中添加我们需要的单词。
insertWords("错过") segmentCN(c("如果你因为错过了太阳而流泪", "你也会错过星星"))
[[1]] [1] 如果你 “因为” “错过” “太阳” “而” “流泪” [[2]] [1] “你” “也” “会” “错过” “星星” 在某些情况下,你不想把一个词分开,比如错过这个词,这里的错和通过语义不应该是一个词,所以,你可以删除词典,添加你需要的单词,继续做单词,效果更好
segmentCN("你可以犯这个错误,但现在不应该再犯了。")
[1] “这个” “错过” “去” “你” “可以” “犯” “但是” [8] “现在” “再” “犯” “就” “不” “应该” “了”
deleteWords("错过") insertWords("过去") segmentCN("你可以犯这个错误,但现在不应该再犯了。")
在进行分词处理时,可能会遇到一些更精细、更专业的文章,专业词汇不在词库中,此时需要找到相关的词典,安装在R中。例如,在新闻分析中,许多明星歌手的名字出现在一些娱乐新闻中,这些名字在做分词时不会被识别为一个词。这时可能需要加一个名字的词典,可以自己建,也可以从网上找。建议从搜狗输入法的词库下载地址http://pinyin.sogou.com/dict/,您可以选择下载所需的分类词典。 我在这里用的词典names的下载地址:http://pinyin.sogou.com/dict/cate/index/429。
segmentCN("唐嫣出现在2015年的几部开年剧中。")
[1] “2015年” “的” “几部” “开” “年” [6] “戏” “都” “出现” “了” “唐” [11] “嫣” “的” “身影”
installDict("D:\\R\\sources\\Dictionaries\\singers.scel", dictname ="names")
3732 words were loaded! … New dictionary ‘names’ was installed!
segmentCN("唐嫣出现在2015年的几部开年剧中。")
[1] “2015年” “的” “几部” “开” “年” [6] “戏” “都” “出现” “了” “唐嫣” [11] “的” “身影”
listDict()
Name Type Des 1 names 明星官方推荐,词库来源于网友上传 Path 1 E:/programFiles/R/R-3.1.2/library/Rwordseg/dict/names.dic 也可以删除不需要自己添加的词典。
uninstallDict()
3732 words were removed! … The dictionary ‘names’ wasuninstalled!
listDict()
[1] Name Type Des Path <0 行>(或0-长度的row.names) 以上是基本介绍,RWordseg有更多功能,请查看文档。
数据来源是一个服装品牌的官方微博,从2012年到2014年底。数据的基本内容结构如下图所示。你可以猜出是哪个品牌。
A、首先,安装与服装相关的词典,也是从搜狗输入法的词库中下载的两种服装词典, 下载地址http://pinyin.sogou.com/dict/cate/index/397,这个地址下的前两个词库。
installDict("D:\\R\\sources\\Dictionaries\\fushi.scel",dictname = "fushi") installDict("D:\\R\\sources\\Dictionaries\\Ali_fushi.scel",dictname = "alifushi")
listDict()
Name Type 1 names 明星 2 pangu Text 3 fushi 服饰 4 ali 服饰
B、下一步是将数据读入R中,可以看到一共有1640条微博数据,注意数据的编码格式,readLines默认读取格式是gbk格式的,读取格式不对时会乱码。
hlzj <-readLines("d:\\R\\RWorkspace\\orgData.txt",encoding ="UTF-8")
length(hlzj)
[1] 1640
C、做分词了,要先去除数据中可能存在的数字和一些特殊符号,然后分词。
hlzjTemp <- gsub("[0-90123456789 < > ~]","",hlzj)
hlzjTemp <- segmentCN(hlzjTemp)
hlzjTemp[1:2]
[[1]] [1] “新品” “推荐” “时尚” “迷彩” “面料” “设计” [7] “为” “简约” “的” “单” “西” “注入” [13] “非同凡响”“的” “野性” “魅力” “良好” “的” [19] “防水” “效果” “使得” “实用” “性” “更” [25] “高” “极” “具” “春日” “吸” “睛” [31] “亮点” “春季” “新品” “海澜之家” “男士” “休闲” [37] “西服” “韩版” “迷彩” “西装” “外套” “HWXAJAA” [[2]] [1] “小编” “推荐” “修身” “薄款” “连帽” “暖心” [7] “设计” “防风” “保暖” “撞色” “线条” “设计” [13] “年轻” “时尚” “走亲访友” “休闲” “出行” “的” [19] “时尚” “选择” “活力” “过冬” “保暖” “轻松” [25] “冬季” “热卖” “海澜之家” “正品” “男士” “保暖” [31] “连帽” “羽绒服” “外套” “HWRAJGA”
可以看到微博内容都已经被做过分词处理了,这个过程很简单,但实际上可能需要多次查看分词处理结果,有些词库中不存在所以被截开了的词需要被添加进去,从而让分词效果达到最好。
分词已经有结果了,但是分词的结果中存在很像,“吧”,“吗”,“的”,“呢”这些无实际含义的语气词,或者是“即使”,“但是”这样的转折词,或者是一些符号,这样的词就叫做停词。要做进一步的分析可能需要去掉这些停词。 先自己整理一个停词表,,包含一些常见的停词,然后根据实际内容中出现的一些无实际分析意义的词语,就可以作为我们的停词表了,网上能找到别人已经整理好的停词表。
stopwords<- unlist(read.table("D:\\R\\RWorkspace\\StopWords.txt",stringsAsFactors=F))
stopwords[50:100]
V150 V151 V152 V153 V154 V155 V156
"哎哟" "唉" "俺" "俺们" "按" "按照" "吧"
V157 V158 V159 V160 V161 V162 V163
"吧哒" "把" "罢了" "被" "本" "本着" "比"
V164 V165 V166 V167 V168 V169 V170
"比方" "比如" "鄙人" "彼" "彼此" "边" "别"
V171 V172 V173 V174 V175 V176 V177
"别的" "别说" "并" "并且" "不比" "不成" "不单"
V178 V179 V180 V181 V182 V183 V184
"不但" "不独" "不管" "不光" "不过" "不仅" "不拘"
V185 V186 V187 V188 V189 V190 V191
"不论" "不怕" "不然" "不如" "不特" "不惟" "不问"
V192 V193 V194 V195 V196 V197 V198
"不只" "朝" "朝着" "趁" "趁着" "乘" "冲"
V199 V1100
"除""除此之外"
removeStopWords <- function(x,stopwords) {
temp <- character(0)
index <- 1
xLen <- length(x)
while (index <= xLen) {
if (length(stopwords[stopwords==x[index]]) <1)
temp<- c(temp,x[index])
index <- index +1
}
temp
}
hlzjTemp2 <-lapply(hlzjTemp,removeStopWords,stopwords)
hlzjTemp2[1:2]
[[1]] [1] “新品” “推荐” “时尚” “迷彩” “面料” “设计” [7] “简约” “单” “西” “注入” “非同凡响” “野性” [13] “魅力” “防水” “效果” “实用” “性” “高” [19] “极” “具” “春日” “吸” “睛” “亮点” [25] “春季” “新品” “海澜之家” “男士” “休闲” “西服” [31] “韩版” “迷彩” “西装” “外套” “HWXAJAA” [[2]] [1] “小编” “推荐” “修身” “薄款” “连帽” “暖心” [7] “设计” “防风” “保暖” “撞色” “线条” “设计” [13] “年轻” “时尚” “走亲访友” “休闲” “出行” “时尚” [19] “选择” “活力” “过冬” “保暖” “轻松” “冬季” [25] “热卖” “海澜之家” “正品” “男士” “保暖” “连帽” [31] “羽绒服” “外套” “HWRAJGA” 跟hlzjTemp[1:2]的内容比较可以明显发现“的”这样的字都被去掉了。
词云是现在很常见的一种分析图,把这些词语放在一张图中,频次来显示词语的大小,这样就能很直观看出那些词语出现得比较多,在舆情分析中经常被用到。 下面的过程是将分词结果做一个统计,计算出每个词出现的次数并排序,然后取排名在前150的150个词语,用wordcloud()方法来画词云。
words <- lapply(hlzjTemp2,strsplit," ")
wordsNum <- table(unlist(words))
wordsNum <- sort(wordsNum) #排序
wordsData <- data.frame(words =names(wordsNum), freq = wordsNum)
library(wordcloud) #加载画词云的包
weibo.top150 <- tail(wordsData,150) #取前150个词
colors=brewer.pal(8,"Dark2")
wordcloud(weibo.top150$words,weibo.top150$freq,scale=c(8,0.5),colors=colors,random.order=F)
该品牌微博的内容有很明显的特征,品牌名“海澜之家”出现的次数远大于其他词语;其次出现频度比较高的词语是“链接”,“旗舰店”,“时尚”,“新品”,“修身”,“男装”,可以大概看出这个该品牌专注于男装,该微博账号经常做新品推荐,可能会提供服装链接到它的旗舰店;另外还能看到“全能星战”,“奔跑吧兄弟”这样的电视节目,稍微了解一下就知道,这是海澜之家这两年赞助的两个节目,所以在它的微博中出现多次是很正常的。 没有原始数据
转载自:http://blog.csdn.net/cl1143015961/article/details/44108143