生活工程体验信仰哲学精神
投稿投诉
精神世界
探索历史
哲学文学
艺术价值
信仰创造
境界审美
体验技术
技能工具
工程信息
医学生产
生活运用
操作能力

R语言进行中文分词和聚类

10月6日 乔了了投稿
  目标:对大约6w条微博进行分类
  环境:R语言
  由于时间较紧,且人手不够,不能采用分类方法,主要是没有时间人工分类一部分生成训练集所以只能用聚类方法,聚类最简单的方法无外乎:Kmeans与层次聚类。
  尝试过使用Kmeans方法,但结果并不好,所以最终采用的是层次聚类,也幸亏结果还不错
  分词(Rwordseg包):
  分词采用的是Rwordseg包,具体安装和一些细节请参考作者首页。请仔细阅读该页提供的使用说明pdf文档,真是有很大帮助。
  安装:
  P。S。
  由于我是64位机,但是配置的rj包只能在32bit的R上使用,而且Rwordseg包貌似不支持最新版本的R(3。01),所以请在32bit的R。exe(2。15)中运行如下语句安装0。04版本:
  install。packages(Rwordseg,reposhttp:RForge。Rproject。org)
  貌似直接在Rstudio中运行会安装失败,而且直接在Rstudio中点击install安装,安装的是0。05版本,我就一直失败
  使用:
  分词时尽量关闭人名识别
  segmentCN(doc,recognitionF)
  否则会将“中秋国庆”,分为“中”“秋国庆“
  可以使用insertWords()函数添加临时的词汇
  对文档向量进行分词时,强烈建议用for循环对每一个元素执行segmentCN,而不要对整个向量执行!!!因为我蛋疼的发现对整个向量执行时,还是会出现识别人名的现象
  运行完后请detach()包,removeWords()函数与tm包中的同名函数冲突。
  微博分词的一些建议:
  微博内容中经常含有url,分词后会将url拆散当做英文单词处理,所以我们需要用正则表达式,将url去掉:
  gsub(patternhttp:〔azAZ。09〕,,doc)
  微博中含有标签,可以尽量保证标签的分词准确,可以先提取标签,然后用insertWords()人工添加一部分词汇:
  library(stringr)
  tagstrextract(doc,。?)以“”开头,“。表示任意字符,表示前面的字符至少出现一次,?表示不采用贪婪匹配即之后遇到第一个就结束
  tagna。omit(tag)去除NA
  tagunique(tag)去重
  文本挖掘(tm包):
  语料库:
  分词之后生成一个列表变量,用列表变量构建语料库。
  由于tm包中的停用词都是英文(可以输入stopwords()查看),所以大家可以去网上查找中文的停用词(一般700多个的就够了,还有1208个词版本的),用removeWords函数去除语料库中的停用词:
  doc。corpustmmap(doc。corpus,removeWords,stopwordsCN)
  TDM:
  生成语料库之后,生成词项文档矩阵(TermDocumentMatrix,TDM),顾名思义,TDM是一个矩阵,矩阵的列对应语料库中所有的文档,矩阵的行对应所有文档中抽取的词项,该矩阵中,一个〔i,j〕位置的元素代表词项i在文档j中出现的次数。
  由于tm包是对英文文档就行统计挖掘的,所以生成TDM时会对英文文档进行分词(即使用标点和空格分词),之前Rwordseg包做的就是将中文语句拆分成一个个词,并用空格间隔。
  创建TDM的语句为:
  controllist(removePunctuationT,minDocFreq5,wordLengthsc(1,Inf),weightingweightTfIdf)
  doc。tdmTermDocumentMatrix(doc。corpus,control)
  变量control是一个选项列表,控制如何抽取文档,removePunctuation表示去除标点,minDocFreq5表示只有在文档中至少出现5次的词才会出现在TDM的行中。
  tm包默认TDM中只保留至少3个字的词(对英文来说比较合适,中文就不适用了吧),wordLengthsc(1,Inf)表示字的长度至少从1开始。
  默认的加权方式是TF,即词频,这里采用TfIdf,该方法用于评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度:
  在一份给定的文件里,词频(termfrequency,TF)指的是某一个给定的词语在该文件中出现的次数。这个数字通常会被归一化,以防止它偏向长的文件。(同一个词语在长文件里可能会比短文件有更高的词频,而不管该词语重要与否。)
  逆向文件频率(inversedocumentfrequency,IDF)是一个词语普遍重要性的度量。某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到。
  某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TFIDF。因此,TFIDF倾向于保留文档中较为特别的词语,过滤常用词。
  由于TDM大多都是稀疏的,需要用removeSparseTerms()函数(:Atermdocumentmatrixwherethosetermsfromxareremovedwhichhaveatleastasparsepercentageofempty)进行降维,值需要不断的测试,我一般会使词项减少到原有的一半。
  层次聚类:
  层次聚类的核心实际在距离矩阵的计算,一般聚类时会使用欧氏距离、闵氏距离等,但在大型数据条件下会优先选择cosine距离,及dissmilarity函数:
  dissimilarity(tdmremoved,methodcosine)
  (P。S。要使用cosine方法,需要先安装proxy包。)
  层次聚类的方法也有很多,这里选用mcquitty,大家还是多试试,本文给出的选择不一定适合你
  注意:由于R对向量的大小有限制,所以在计算距离时,请优先使用64bit,3。0版本的R
  但如果出现如下报错信息:
  Errorinvector(typeof(xv),nrnc):vectorsizecannotbeNA
  Inaddition:Warningmessage:
  Innrnc:NAsproducedbyintegeroverflow
  恭喜你!这个问题64位版本的R也解决不了,因为矩阵超出了R允许的最大限制我也是遇到同样的问题,所以没办法,只能将原始数据进行拆分,不过我的情况是多个微博账户,但彼此之间的微博分类差不太多,所以可以进行拆分。强烈推荐大家有问题去查找!
  (我看到有外国友人说可以用int64包尝试一下,因为tdm其实也是个list,但我没试成功)
  好了,下面贴上全部代码:
  读取数据
  colc(rep(character,6),NULL,NA,NA,character,rep(NULL,4))
  dataread。csv(filetext。csv,headerT,sep,,colClassescol)
  将文本存储到一个向量中
  docc(NULL)
  for(iin1:dim(data)〔1〕){
  docc(doc,dataText〔i〕)
  }
  去除微博中含有的url
  docgsub(patternhttp:〔azAZ。09〕,,doc)
  无意义微博处理
  emptyNc(2032,2912,7518,8939,14172,14422,26786,30126,34501,35239,48029,48426,48949,49100,49365,49386,49430,50034,56818,56824,56828,57859)
  doc〔emptyN〕NA
  添加词汇
  library(Rwordseg)
  textwordsc(。。。)
  insertWords(textwords)
  removeWords(tagwords)
  docCNlist()
  for(jin1:length(doc)){
  docCN〔〔j〕〕c(segmentCN(doc〔j〕,recognitionF))
  }
  detach(package:Rwordseg,unloadTRUE)
  构建语料库(Corpus对象)
  library(tm)
  doc。corpusCorpus(VectorSource(docCN))
  停用词
  datastwread。table(file中文停用词库。txt,colClassescharacter)
  stopwordsCNc(NULL)
  for(iin1:dim(datastw)〔1〕){
  stopwordsCNc(stopwordsCN,datastw〔i,1〕)
  }
  doc。corpustmmap(doc。corpus,removeWords,stopwordsCN)删除停用词
  创建词项文档矩阵(TDM)
  controllist(removePunctuationT,minDocFreq5,wordLengthsc(1,Inf),weightingweightTfIdf)
  doc。tdmTermDocumentMatrix(doc。corpus,control)
  length(doc。tdmdimnamesTerms)
  tdmremovedremoveSparseTerms(doc。tdm,0。9998)1去除了低于99。98的稀疏条目项
  length(tdmremoveddimnamesTerms)
  层次聚类:
  disttdmremoveddissimilarity(tdmremoved,methodcosine)
  hchclust(disttdmremoved,methodmcquitty)
  cutNum20
  ctcutree(hc,kcutNum)
  sink(fileresult。txt)
  for(iin1:cutNum){
  print(paste(第,i,类:,sum(cti),个));
  print();
  print(attr(ct〔cti〕,names));
  print(doc〔as。integer(names(ct〔cti〕))〕)
  print()
  }
  sink()
  输出结果
  outputdata。frame(clasNULL,tagNULL,textNULL)
  for(iin1:cutNum){
  intagtag〔as。integer(names(ct〔cti〕))〕
  intextdoc〔as。integer(names(ct〔cti〕))〕
  cutoutputdata。frame(clasrep(i,length(intag)),tagintag,textintext)
  outputrbind(output,cutoutput)
  }
  write。table(output,fileclassification。csv,sep,,row。namesF)
投诉 评论 转载

当春天来敲门作文热传聚热点网 当春天来敲门作文在学习、工作或生活中,大家总免不了要接触或使用作文吧,写作文可以锻炼我们的独处习惯,让自己的心静下来,思考自己未来的方向。那么你知道一篇好的作文该怎么写吗……父亲节的作文300字热评聚热点网 关于父亲节的作文300字合集六篇无论是在学校还是在社会中,大家都经常看到作文的身影吧,作文可分为小学作文、中学作文、大学作文(论文)。你知道作文怎样才能写的好吗?下面是小……圣诞节的作文1200字热评聚热点网 精选圣诞节的作文1200字三篇在日常学习、工作或生活中,大家总少不了接触作文吧,作文是通过文字来表达一个主题意义的记叙方法。如何写一篇有思想、有文采的作文呢?以下是小编整……最近看了《青春斗》,看到赵聪失踪后向真的心思,你对于初恋怎么 赵聪的突然失踪,并不是他刻意为之,应该是被迫的,手机也被丢到了窗外。向真发疯似的寻找,然而真的是毫无痕迹,瞬间人间蒸发了一样!向真跑去他家,他家被贴上封条了,此处是伏笔,他家出……立秋后要贴秋膘,“秋膘”是什么?怎么贴?建议所有人都学习一下 立秋节气的到来,对生活有着非常重要的影响和作用,并借此延续出许多的民间讲究,老百姓口中的“贴秋膘”就是其中之一,民间有“贴秋膘,一年病不沾”的说法。“秋膘”是什么?为什么要“贴……R语言进行中文分词和聚类热传聚热点网 目标:对大约6w条微博进行分类环境:R语言由于时间较紧,且人手不够,不能采用分类方法,主要是没有时间人工分类一部分生成训练集所以只能用聚类方法,聚类最简单的方法无外……伴优秀作文热传聚热点网 伴优秀作文无论是在学校还是在社会中,大家对作文都不陌生吧,作文是一种言语活动,具有高度的综合性和创造性。那么你有了解过作文吗?以下是小编精心整理的伴优秀作文,供大家参考借……人类的最后一滴水作文热议聚热点网 人类的最后一滴水作文人类的最后一滴水作文1“妈妈,我渴”这是一为可怜的小朋友对妈妈说的话。一位脸色苍伤的厂长说:“要不是我以前大量的浪费水,就不会有现在这个样子,孩……庆祝元旦作文热文聚热点网 庆祝元旦作文庆祝元旦作文1xxxx年12月31日,xxxx年最后一天,我们的学校组织了庆祝元旦活动。同学们高兴地欢呼,都迫不及待地想看表演,庆祝这一伟大的日子。……小学六年级暑假作文500字热闻聚热点网 精选小学六年级暑假作文500字汇编七篇无论在学习、工作或是生活中,大家都接触过作文吧,作文是人们以书面形式表情达意的言语活动。写起作文来就毫无头绪?以下是小编精心整理的小……初中寒假随笔作文热文聚热点网 初中寒假随笔作文初中寒假随笔作文1寒期里的一天,妈妈带我去单位值班。我在那里写完作业后,妈妈叫我先独自去奶奶家,她等值完了班再去。这可是我第一次走这么远的路啊!妈妈……劳动节的作文热闻聚热点网 劳动节的作文精选在日常学习、工作或生活中,大家都跟作文打过交道吧,写作文可以锻炼我们的独处习惯,让自己的心静下来,思考自己未来的方向。相信写作文是一个让许多人都头痛的问题……
投入百亿流量疯狂布局,快手要到元宇宙卖货热闻聚热点网 人民日报:防疫躺平不可取躺赢不可能动态清零符合国情热传聚热点 乌克兰国家紧急事务局:空袭已造成14死97伤热传聚热点网 被骗写下借条不给我钱怎么办?热评聚热点网 你与跑步大神最大的区别是什么?热评聚热点网 南国,三十载我的梦热评聚热点网 肿瘤的概念是什么?热闻聚热点网 南京老牌房企掌门人逝世,曾坐拥数十亿资产,因拍下毕加索名画一 已住人的违章建筑如何处理?违章建筑不拆除还可以使用吗热议聚热 SaaS到底该如何推广引流?答案是内容营销热评聚热点网 杭州一咖啡店老板:“实习六个月没工资怎么了,学点技术不好吗” 马来西亚超神秘的洞穴,在丛林掩映的半山腰,被印度教誉为神庙热
小龙虾标准化养殖流程,十招助你入门干皮夏天用什么保湿夏天干皮保湿用什么护肤品酷热一夏,你对空调病知多少?南瓜不能和什么一起吃南瓜为什么不能和这些一起吃面膜的材质有哪些种类面膜有什么材质海啸对气候有什么影响柠檬水怎么喝可以有效减肥亚历克斯卡鲁索准备回归,公牛队的防守需要他快乐的节日来我跟你说一个人怎样腌酱油黄瓜?深圳的房子到底是涨了还是跌了?

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找新乡渭南铜川松江山南雅安松原荃湾淮北昭通平凉鞍山赤峰苗栗保亭池州渝北株洲陇南濮阳三沙秀山密云鸡西