京公网安备 11010802034615号
经营许可证编号:京B2-20210330
R语言进行中文分词和聚类
由于时间较紧,且人手不够,不能采用分类方法,主要是没有时间人工分类一部分生成训练集……所以只能用聚类方法,聚类最简单的方法无外乎:K-means与层次聚类。
尝试过使用K-means方法,但结果并不好,所以最终采用的是层次聚类,也幸亏结果还不错……⊙﹏⊙
分词(Rwordseg包):
安装:
P.S.
由于我是64位机,但是配置的rj包只能在32bit的R上使用,而且Rwordseg包貌似不支持最新版本的R(3.01),所以请在32bit的R.exe中运行如下语句安装0.0-4版本:
貌似直接在Rstudio中运行会安装失败,而且直接在Rstudio中点击install安装,安装的是0.0-5版本,我就一直失败……
使用:
1. 分词时尽量关闭人名识别
否则会将“中秋国庆”,分为“中”“秋国庆“
2. 可以使用insertWords()函数添加临时的词汇
3. 对文档向量进行分词时,强烈建议用for循环对每一个元素执行segmentCN,而不要对整个向量执行!!!因为我蛋疼的发现对整个向量执行时,还是会出现识别人名的现象……
4. 运行完后请detach()包,removeWords()函数与tm包中的同名函数冲突。
微博分词的一些建议:
1. 微博内容中经常含有url,分词后会将url拆散当做英文单词处理,所以我们需要用正则表达式,将url去掉:
2. 微博中含有#标签#,可以尽量保证标签的分词准确,可以先提取标签,然后用insertWords()人工添加一部分词汇:
文本挖掘(tm包):
语料库:
分词之后生成一个列表变量,用列表变量构建语料库。
由于tm包中的停用词()都是英文(可以输入stopwords()查看),所以大家可以去网上查找中文的停用词(一般700多个的就够了,还有1208个词版本的),用removeWords函数去除语料库中的停用词:
TDM:
生成语料库之后,生成词项-文档矩阵(Term Document Matrix,TDM),顾名思义,TDM是一个矩阵,矩阵的列对应语料库中所有的文档,矩阵的行对应所有文档中抽取的词项,该矩阵中,一个[i,j]位置的元素代表词项i在文档j中出现的次数。
由于tm包是对英文文档就行统计挖掘的,所以生成TDM时会对英文文档进行分词(即使用标点和空格分词),之前Rwordseg包做的就是将中文语句拆分成一个个词,并用空格间隔。
创建TDM的语句为:
变量control是一个选项列表,控制如何抽取文档,removePunctuation表示去除标点,minDocFreq=5表示只有在文档中至少出现5次的词才会出现在TDM的行中。
tm包默认TDM中只保留至少3个字的词(对英文来说比较合适,中文就不适用了吧……),wordLengths = c(1, Inf)表示字的长度至少从1开始。
默认的加权方式是TF,即词频,这里采用Tf-Idf,该方法用于评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度:
1. 在一份给定的文件里,词频 (term frequency, TF) 指的是某一个给定的词语在该文件中出现的次数。这个数字通常会被归一化,以防止它偏向长的文件。
2. 逆向文件频率 (inverse document frequency, IDF) 是一个词语普遍重要性的度量。某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到。
3. 某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于保留文档中较为特别的词语,过滤常用词。
由于TDM大多都是稀疏的,需要用removeSparseTerms()函数进行降维,值需要不断的测试,我一般会使词项减少到原有的一半。
层次聚类:
层次聚类的核心实际在距离阵的计算,一般聚类时会使用欧氏距离、闵氏距离等,但在大型数据条件下会优先选择 cosine 距离,及 dissmilarity 函数:
(P.S.要使用cosine方法,需要先安装proxy包。)
层次聚类的方法也有很多,这里选用mcquitty,大家还是多试试,本文给出的选择不一定适合你~
注意:由于R对向量的大小有限制,所以在计算距离时,请优先使用64bit,3.0版本的R~
但如果出现如下报错信息:
"Error in vector(typeof(x$v), nr * nc): vector size cannot be NA
In addition: Warning message:
In nr * nc : NAs produced by integeroverflow"
恭喜你!这个问题64位版本的R也解决不了,因为矩阵超出了R允许的最大限制~我也是遇到同样的问题,所以没办法,只能将原始数据进行拆分,不过我的情况是多个微博账户,但彼此之间的微博分类差不太多,所以可以进行拆分。强烈推荐大家有问题去stackoverflow查找!
(我看到有国外友人说可以用int64包尝试一下,因为tdm其实也是个list,但我没试成功……)
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在数字化时代,商业竞争的核心已从“经验驱动”转向“数据驱动”,越来越多的企业意识到,商业分析不是简单的数据统计与报表呈现 ...
2026-05-06在Excel数据透视表的实操中,“引用”是连接透视表与公式、辅助数据的核心操作,而相对引用作为最基础、最常用的引用方式,其设 ...
2026-05-06 很多数据分析师做过按月份的销售额趋势图,画过按天的流量折线图,但当被问到“时间序列和普通数据有什么本质区别”“季节性 ...
2026-05-06在Excel数据分析中,数据透视表是汇总、整理海量数据的高效工具,而公式则是实现数据二次计算、逻辑判断的核心功能。实际操作中 ...
2026-04-30Excel透视图是数据分析中不可或缺的工具,它能将透视表中的数据快速可视化,帮助我们直观捕捉数据规律、呈现分析结果。但在实际 ...
2026-04-30 很多数据分析师能熟练地计算指标、搭建标签体系,但当被问到“画像到底在解决什么问题”“画像和标签是什么关系”“画像如何 ...
2026-04-30在中介效应分析中,人口统计学变量(如年龄、性别、学历、收入、职业等)是常见的控制变量或调节变量,其处理方式直接影响分析结 ...
2026-04-29在SQL数据库实操中,日期数据的存储与显示是高频需求,而“数字日期”(如20240520、20241231、45321)是很多开发者、数据分析师 ...
2026-04-29 很多分析师在设计标签时思路清晰,但真到落地环节却面临“数据在手,不知如何转化为可用标签”的困境:或因加工方式选择不当 ...
2026-04-29在手游行业竞争日趋白热化的当下,“流量为王”早已升级为“留存为王”,而付费用户留存率更是衡量一款手游盈利能力、运营质量的 ...
2026-04-28在日常MySQL数据库运维与开发中,经常会遇到“同一台服务器上,两个不同数据库(以下简称“源库”“目标库”)的表数据需要保持 ...
2026-04-28 很多分析师每天和数据打交道,但当被问到“标签是什么”“标签和指标有什么区别”“标签体系如何设计”时,却常常答不上来。 ...
2026-04-28箱线图(Box Plot)作为一种经典的数据可视化工具,广泛应用于统计学、数据分析、科研实证等领域,核心价值在于直观呈现数据的集 ...
2026-04-27实证分析是社会科学、自然科学、经济管理等领域开展研究的核心范式,其核心逻辑是通过对多维度数据的收集、分析与解读,揭示变量 ...
2026-04-27 很多数据分析师精通Excel函数和数据透视表,但当被问到“数据从哪里来”“表和视图有什么区别”“数据库管理系统和SQL是什么 ...
2026-04-27在大数据技术飞速迭代、数字营销竞争日趋激烈的今天,“精准触达、高效转化、成本可控”已成为企业营销的核心诉求。传统广告投放 ...
2026-04-24在游戏行业竞争白热化的当下,用户流失已成为制约游戏生命周期、影响营收增长的核心痛点。据行业报告显示,2024年移动游戏平均次 ...
2026-04-24 很多业务负责人开会常说“我们要数据驱动”,最后却变成“看哪张报表数据多就用哪个”,往往因为缺乏一套结构性的方法去搭建 ...
2026-04-24在Power BI数据可视化分析中,切片器是连接用户与数据的核心交互工具,其核心价值在于帮助使用者快速筛选目标数据、聚焦分析重点 ...
2026-04-23以数为据,以析促优——数据分析结果指导临床技术改进的实践路径 临床技术是医疗服务的核心载体,其水平直接决定患者诊疗效果、 ...
2026-04-23