R语言做文本挖掘 Part2分词处理

Part2分词处理

在RStudio中安装完相关软件包之后,才能做相关分词处理,请参照Part1部分安装需要软件包。参考文档:玩玩文本挖掘,这篇文章讲用R做文本挖掘很详尽,并且有一些相关资料的下载,值得看看!

1.       RWordseg功能

说明文档可在http://download.csdn.net/detail/cl1143015961/8436741下载,这里只做简单介绍。

分词

> segmentCN(c("如果你因为错过太阳而流泪", "你也会错过星星"))

[[1]]

[1] "如果""你"   "因为" "错"   "过"   "太阳" "而"

[8] "流泪"

[[2]]

[1] "你"   "也"   "会"   "错"   "过"   "星星"

可以看到分词的效果不是很理想,“错过”这是一个词却被分开了,说明词库中不存在这个词,所以,我们有时候需要向词库中添加我们需要的词语。

 

加词删词

> insertWords("错过")

> segmentCN(c("如果你因为错过太阳而流泪", "你也会错过星星"))

[[1]]

[1] "如果""你"   "因为" "错过" "太阳" "而"   "流泪"

[[2]]

[1] "你"   "也"   "会"   "错过" "星星"

有些情况下,你不希望某个词被分出来,例如还是“错过”这个词,这里“错”和“过”语义上已经不应该是一个词语了,所以,可以从词典中删除这个词,再添加上你需要的词语,继续做分词,效果就好多了。

> segmentCN("这个错过去你可以犯,但是现在再犯就不应该了")

[1] "这个" "错过" "去"   "你"   "可以" "犯"   "但是"

[8] "现在" "再"   "犯"   "就"   "不"   "应该" "了"

>deleteWords("错过")

> insertWords("过去")

> segmentCN("这个错过去你可以犯,但是现在再犯就不应该了")

[1] "这个" "错"   "过去" "你"   "可以" "犯"   "但是"

[8] "现在" "再"   "犯"   "就"   "不"   "应该" "了"

安装卸载词典

在做分词处理时,可能会遇到一些比较精而专的文章,专业词汇在词库里面并没有,这时候就需要去找相关的词典,安装到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还有更多的功能,请查看其中文文档。

2.       对某品牌官微做分词

数据来源是某服装品牌的官方微博从2012年到2014年末的微博。数据的基本内容结构如下图示,看内容大概能猜出来是哪个品牌了吧。

首先安装跟服装相关的词典,同样是从搜狗输入法的词库中下载的两个服饰类的词典, 下载地址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 服饰

下一步是将数据读入R中,可以看到一共有1640条微博数据,注意数据的编码格式,readLines默认读取格式是gbk格式的,读取格式不对时会乱码。

>hlzj <-readLines("d:\\R\\RWorkspace\\orgData.txt",encoding ="UTF-8")

>length(hlzj)

[1] 1640

接下来就是做分词了,要先去除数据中可能存在的数字和一些特殊符号,然后分词。

>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"

可以看到微博内容都已经被做过分词处理了,这个过程很简单,但实际上可能需要多次查看分词处理结果,有些词库中不存在所以被截开了的词需要被添加进去,从而让分词效果达到最好。

3.       去停词

分词已经有结果了,但是分词的结果中存在很多像,“吧”,“吗”,“的”,“呢”这些无实际含义的语气词,或者是“即使”,“但是”这样的转折词,或者是一些符号,这样的词就叫做停词。要做进一步的分析可能需要去掉这些停词。

先自己整理一个停词表,这个停词表是我自己找的,包含一些常见的停词,然后根据实际内容中出现的一些无实际分析意义的词语,就可以作为我们的停词表了,网上能找到别人已经整理好的停词表。

>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]的内容比较可以明显发现“的”这样的字都被去掉了。

4.       词云

词云是现在很常见的一种分析图,把这些词语放在一张图中,频次来显示词语的大小,这样就能很直观看出那些词语出现得比较多,在舆情分析中经常被用到。

下面的过程是将分词结果做一个统计,计算出每个词出现的次数并排序,然后取排名在前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)

该品牌微博的内容有很明显的特征,品牌名“海澜之家”出现的次数远大于其他词语;其次出现频度比较高的词语是“链接”,“旗舰店”,“时尚”,“新品”,“修身”,“男装”,可以大概看出这个该品牌专注于男装,该微博账号经常做新品推荐,可能会提供服装链接到它的旗舰店;另外还能看到“全能星战”,“奔跑吧兄弟”这样的电视节目,稍微了解一下就知道,这是海澜之家这两年赞助的两个节目,所以在它的微博中出现多次是很正常的。

原始数据就不共享了,大家可以另外找数据尝试。

时间: 2024-08-29 13:41:22

R语言做文本挖掘 Part2分词处理的相关文章

R语言做文本挖掘 Part3文本聚类

Part3文本聚类 分类和聚类算法,都是数据挖掘中最常接触到的算法,分类聚类算法分别有很多种.可以看下下面两篇文章对常见的分类聚类算法的简介: 分类算法:http://blog.csdn.net/chl033/article/details/5204220 聚类算法:http://blog.chinaunix.net/uid-10289334-id-3758310.html 文本分类聚类会要用到这些算法去实现,暂时不用深究算法细节,R中已经有成熟的可以直接调用的这些算法了.大概说下分类和聚类的差

R语言做文本挖掘 Part1

Part1安装依赖包 R语言中中文分析的软件包是Rwordseg,Rwordseg软件包依赖rJava包,rJava需要本机中有安装Java.   第一步是安装Java,请安装JDK,JRE不行.请对应机型,下载安装32位的JDK.机器里已经有JDK的也请改成32位的,不然没办法使用Rwordseg,尝试使用过64位的,不可行. 下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151

R语言做文本挖掘Part5

Part5情感分析 这是这个系列里面最后一篇文章了,其实这里文本挖掘每一个部分单拎出来都是值得深究和仔细研究的,我还处于初级研究阶段,用R里面现成的算法,来实现自己的需求,当然还参考了众多网友的智慧结晶,所以也想把我的收获总结出来分享给大家,希望也能像我一样在看大家的分享时得到自己的启发. 网上翻了下中文文本情感分析的一些文章,再回想了一下我自己做情感分析的方法,觉得我的想法真的是简单粗暴直接.这是一篇介绍中文文本情感分析倾向的论文.http://wenku.baidu.com/link?url

R语言做文本挖掘Part4

Part4文本分类 Part3文本聚类里讲到过,分类跟聚类的简单差异.所以要做分类我们需要先整理出一个训练集,也就是已经有明确分类的文本:测试集,可以就用训练集来替代:预测集,就是未分类的文本,是分类方法最后的应用实现. 1.       数据准备 训练集准备是一个很繁琐的功能,暂时没发现什么省力的办法,根据文本内容去手动整理.这里还是使用的某品牌的官微数据,根据微博内容,我将它微博的主要内容分为了:促销资讯(promotion).产品推介(product).公益信息(publicWelfare

R语言做文本挖掘 Part4文本分类

Part4文本分类 Part3文本聚类提到过.与聚类分类的简单差异. 那么,我们需要理清训练集的分类,有明白分类的文本:測试集,能够就用训练集来替代.预測集,就是未分类的文本.是分类方法最后的应用实现. 1.       数据准备 训练集准备是一个非常繁琐的功能,临时没发现什么省力的办法,依据文本内容去手动整理.这里还是使用的某品牌的官微数据,依据微博内容.我将它微博的主要内容分为了:促销资讯(promotion).产品推介(product).公益信息(publicWelfare).生活鸡汤(l

[译]用R语言做挖掘数据《一》

介绍 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到程序: 1. LX终端(LXTerminal): Linux命令行终端,打开后会进入Bash环境,可以使用Linux命令2. GVim:非常好用的编辑器,最简单的用法可以参考课程Vim编辑器3. R:在命令行输入‘R’即可进入交互式环境,下面的代码都是在交互式环境运行. 3. 环境使用 使用R语言交互式环境输入

[译]用R语言做挖掘数据《七》

时间序列与数据挖掘 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到: 1. LX终端(LXTerminal): Linux命令行终端,打开后会进入Bash环境,可以使用Linux命令2. GVim:非常好用的编辑器,最简单的用法可以参考课程Vim编辑器3. R:在命令行输入‘R’进入交互式环境,下面的代码都是在交互式环境运行4. 数据:在命令行终端输入以下命令:

用R语言做挖掘数据《三》

决策树和随机森林 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到程序: 1. LX终端(LXTerminal): Linux命令行终端,打开后会进入Bash环境,可以使用Linux命令2. GVim:非常好用的编辑器,最简单的用法可以参考课程Vim编辑器.3. R:在命令行终端输入‘R’,进入R的交互式环境,下面的代码都是在交互式环境运行. 3. 环境使用 使用

[译]用R语言做挖掘数据《五》

介绍 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到程序: 1. LX终端(LXTerminal): Linux命令行终端,打开后会进入Bash环境,可以使用Linux命令2. GVim:非常好用的编辑器,最简单的用法可以参考课程[Vim编辑器](http://www.shiyanlou.com/courses/2)3. R:在命令行输入‘R’进入交互式环境,下