1文本挖掘定义
文本挖掘指的是从文本数据中获取有价值的信息和知识,它是数据挖掘中的一种方法。文本挖掘中最重要最基本的应用是实现文本的分类和聚类,前者是有监督的挖掘算法,后者是无监督的挖掘算法。
2文本挖掘步骤
1)读取数据库或本地外部文本文件
2)文本分词
2.1)自定义字典
2.2)自定义停止词
2.3)分词
2.4)文字云检索哪些词切的不准确、哪些词没有意义,需要循环2.1、2.2和 2.3步骤
3)构建文档-词条矩阵并转换为数据框
4)对数据框建立统计、挖掘模型
5)结果反馈
3文本挖掘所需工具
本次文本挖掘将使用R语言实现,除此还需加载几个R包,它们是tm包、tmcn包、Rwordseg包和wordcloud包。
4实战
本文对该数据集做了整合,将各个主题下的新闻汇总到一张csv表格中,数据格式如下图所示:
具体数据可至文章后面的链接。
#加载所需R包 library(tm) library(Rwordseg) library(wordcloud) library(tmcn) #读取数据 mydata <- read.table(file = file.choose(), header = TRUE, sep = ',', stringsAsFactors = FALSE) str(mydata)
接下来需要对新闻内容进行分词,在分词之前需要导入一些自定义字典,目的是提高切词的准确性。由于文本中涉及到军事、医疗、财经、体育等方面的内容,故需要将搜狗字典插入到本次分析的字典集中。
#添加自定义字典 installDict(dictpath = 'G:\\dict\\财经金融词汇大全【官方推荐】.scel', dictname = 'Caijing', dicttype = 'scel') installDict(dictpath = 'G:\\dict\\军事词汇大全【官方推荐】.scel', dictname = 'Junshi', dicttype = 'scel') installDict(dictpath = 'G:\\dict\\篮球【官方推荐】.scel', dictname = 'Lanqiu', dicttype = 'scel') installDict(dictpath = 'G:\\dict\\旅游词汇大全【官方推荐】.scel', dictname = 'Lvyou', dicttype = 'scel') installDict(dictpath = 'G:\\dict\\汽车词汇大全【官方推荐】.scel', dictname = 'Qiche1', dicttype = 'scel') installDict(dictpath = 'G:\\dict\\汽车频道专用词库.scel', dictname = 'Qiche2', dicttype = 'scel') installDict(dictpath = 'G:\\dict\\医学词汇大全【官方推荐】.scel', dictname = 'Yixue', dicttype = 'scel') installDict(dictpath = 'G:\\dict\\足球【官方推荐】.scel', dictname = 'Zuqiu', dicttype = 'scel') #查看已安装的词典 listDict()
如果需要卸载某些已导入字典的话,可以使用uninstallDict()函数。
分词前将中文中的英文字母统统去掉。
#剔除文本中含有的英文字母 mydata$Text <- gsub('[a-zA-Z]','',mydata$Text) #分词 segword <- segmentCN(strwords = mydata$Text) #查看第一条新闻分词结果 segword[[1]]
图中圈出来的词对后续的分析并没有什么实际意义,故需要将其剔除,即删除停止词。
#创建停止词 mystopwords <- read.table(file = file.choose(), stringsAsFactors = FALSE) head(mystopwords) class(mystopwords) #需要将数据框格式的数据转化为向量格式 mystopwords <- as.vector(mystopwords[,1]) head(mystopwords)
停止词创建好后,该如何删除76条新闻中实际意义的词呢?下面通过自定义删除停止词的函数加以实现。
#自定义删除停止词的函数 removewords <- function(target_words,stop_words){ target_words = target_words[target_words%in%stop_words==FALSE] return(target_words) } segword2 <- sapply(X = segword, FUN = removewords, mystopwords) #查看已删除后的分词结果 segword2[[1]]
相比与之前的分词结果,这里瘦身了很多,剔除了诸如“是”、“的”、“到”、“这”等无意义的次。
判别分词结果的好坏,最快捷的方法是绘制文字云,可以清晰的查看哪些词不该出现或哪些词分割的不准确。
#绘制文字图 word_freq <- getWordFreq(string = unlist(segword2)) opar <- par(no.readonly = TRUE) par(bg = 'black') #绘制出现频率最高的前50个词 wordcloud(words = word_freq$Word, freq = word_freq$Freq, max.words = 50, random.color = TRUE, colors = rainbow(n = 7)) par(opar)
很明显这里仍然存在一些无意义的词(如说、日、个、去等)和分割不准确的词语(如黄金周切割为黄金,医药切割为药等),这里限于篇幅的原因,就不进行再次添加自定义词汇和停止词。
#将已分完词的列表导入为语料库,并进一步加工处理语料库 text_corpus <- Corpus(x = VectorSource(segword2)) text_corpus
此时语料库中存放了76条新闻的分词结果。
#去除语料库中的数字 text_corpus <- tm_map(text_corpus, removeNumbers) #去除语料库中的多余空格 text_corpus <- tm_map(text_corpus, stripWhitespace) #创建文档-词条矩阵 dtm <- DocumentTermMatrix(x = text_corpus, control = list(wordLengths = c(2,Inf))) dtm
从图中可知,文档-词条矩阵包含了76行和7939列,行代表76条新闻,列代表7939个词;该矩阵实际上为稀疏矩阵,其中矩阵中非0元素有11655个,而0元素有591709,稀疏率达到98%;最后,这7939个词中,最频繁的一个词出现在了49条新闻中。
由于稀疏矩阵的稀疏率过高,这里将剔除一些出现频次极地的词语。
#去除稀疏矩阵中的词条 dtm <- removeSparseTerms(x = dtm, sparse = 0.9) dtm
这样一来,矩阵中列大幅减少,当前矩阵只包含了116列,即116个词语。
为了便于进一步的统计建模,需要将矩阵转换为数据框格式。
#将矩阵转换为数据框格式 df <- as.data.frame(inspect(dtm)) #查看数据框的前6行(部分) head(df)
聚类分析是文本挖掘的基本应用,常用的聚类算法包括层次聚类法、划分聚类法、EM聚类法和密度聚类法。
这里使用层次聚类中的McQuitty相似分析法实现新闻的聚类。
#计算距离 d <- dist(df) #层次聚类法之McQuitty相似分析法 fit1 <- hclust(d = d, method = 'mcquitty') plot(fit1) rect.hclust(tree = fit1, k = 7, border = 'red')
这里的McQuitty层次聚类法效果不理想,类与类之间分布相当不平衡,我想可能存在三种原因:
1)文章的主干关键词出现频次不够,使得文章没能反映某种主题;
2)分词过程中没有剔除对建模不利的干扰词,如中国、美国、公司、市场、记者等词语;
3)没能够准确分割某些常用词,如黄金周。
5总结
所以在实际的文本挖掘过程中,最为困难和耗费时间的就是分词部分,既要准确分词,又要剔除无意义的词语,这对文本挖掘者是一种挑战。数据分析师培训
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
CDA持证人简介: 居瑜 ,CDA一级持证人国企财务经理,13年财务管理运营经验,在数据分析就业和实践经验方面有着丰富的积累和经 ...
2025-04-25在当今数字化时代,数据分析师的重要性与日俱增。但许多人在踏上这条职业道路时,往往充满疑惑: 如何成为一名数据分析师?成为 ...
2025-04-24以下的文章内容来源于刘静老师的专栏,如果您想阅读专栏《刘静:10大业务分析模型突破业务瓶颈》,点击下方链接 https://edu.cda ...
2025-04-23大咖简介: 刘凯,CDA大咖汇特邀讲师,DAMA中国分会理事,香港金管局特聘数据管理专家,拥有丰富的行业经验。本文将从数据要素 ...
2025-04-22CDA持证人简介 刘伟,美国 NAU 大学计算机信息技术硕士, CDA数据分析师三级持证人,现任职于江苏宝应农商银行数据治理岗。 学 ...
2025-04-21持证人简介:贺渲雯 ,CDA 数据分析师一级持证人,互联网行业数据分析师 今天我将为大家带来一个关于用户私域用户质量数据分析 ...
2025-04-18一、CDA持证人介绍 在数字化浪潮席卷商业领域的当下,数据分析已成为企业发展的关键驱动力。为助力大家深入了解数据分析在电商行 ...
2025-04-17CDA持证人简介:居瑜 ,CDA一级持证人,国企财务经理,13年财务管理运营经验,在数据分析实践方面积累了丰富的行业经验。 一、 ...
2025-04-16持证人简介: CDA持证人刘凌峰,CDA L1持证人,微软认证讲师(MCT)金山办公最有价值专家(KVP),工信部高级项目管理师,拥有 ...
2025-04-15持证人简介:CDA持证人黄葛英,ICF国际教练联盟认证教练,前字节跳动销售主管,拥有丰富的行业经验。在实际生活中,我们可能会 ...
2025-04-14在 Python 编程学习与实践中,Anaconda 是一款极为重要的工具。它作为一个开源的 Python 发行版本,集成了众多常用的科学计算库 ...
2025-04-14随着大数据时代的深入发展,数据运营成为企业不可或缺的岗位之一。这个职位的核心是通过收集、整理和分析数据,帮助企业做出科 ...
2025-04-11持证人简介:CDA持证人黄葛英,ICF国际教练联盟认证教练,前字节跳动销售主管,拥有丰富的行业经验。 本次分享我将以教培行业为 ...
2025-04-11近日《2025中国城市长租市场发展蓝皮书》(下称《蓝皮书》)正式发布。《蓝皮书》指出,当前我国城市住房正经历从“增量扩张”向 ...
2025-04-10在数字化时代的浪潮中,数据已经成为企业决策和运营的核心。每一位客户,每一次交易,都承载着丰富的信息和价值。 如何在海量客 ...
2025-04-09数据是数字化的基础。随着工业4.0的推进,企业生产运作过程中的在线数据变得更加丰富;而互联网、新零售等C端应用的丰富多彩,产 ...
2025-04-094月7日,美国关税政策对全球金融市场的冲击仍在肆虐,周一亚市早盘,美股股指、原油期货、加密货币、贵金属等资产齐齐重挫,市场 ...
2025-04-08背景 3月26日,科技圈迎来一则重磅消息,苹果公司宣布向浙江大学捐赠 3000 万元人民币,用于支持编程教育。 这一举措并非偶然, ...
2025-04-07在当今数据驱动的时代,数据分析能力备受青睐,数据分析能力频繁出现在岗位需求的描述中,不分岗位的任职要求中,会特意标出“熟 ...
2025-04-03在当今数字化时代,数据分析师的重要性与日俱增。但许多人在踏上这条职业道路时,往往充满疑惑: 如何成为一名数据分析师?成为 ...
2025-04-02