R语言文本数据挖掘(二)

文本挖掘是从非结构化的文本信息中抽取潜在的、用户感兴趣的重要模式或知识的过程,可以把它看作数据挖掘或数据库中知识发现的延伸。对文本信息的挖掘主要是以数理统计学和计算语言学为理论基础,让计算机发现某些文字出现的规律以及文字与语义、语法间的联系。文本挖掘涉及多个学科领域,如信息检索、文本分析、信息抽取等。文本挖掘被描述为“自动化或半自动规划处理文本的过程”,包含了文档聚类、文档分类、自然语言处理、文体变化分析及网络舆情等领域内容。对于文本处理过程首先要拥有分析的语料(text corpus),比如报告、信函、出版物等。而后根据这些语料建立半结构化的文本库(text database)。而后生成包含词频的结构化的词条-文档矩阵(term-document matrix)。 这个一般性数据结构会被用于后续的分析,比如:1)文本分类,比如根据现有的文本分类情况,对未知文本进行归类:2)语法分析;3) 信息提取和修复;4) 文档信息汇总,比如提取相关有代表性的关键词、句子等。

一、R包安装与数据导入

1.1 安装相关包

library(XML)
library(SnowballC)
library(tm.plugin.webmining)
library(tm)
library(Rwordseg)

1.2 数据导入语料库

#找到tm包下texts/crude文件夹的位置,里面含有20个xml文档
adress=system.file("texts","crude",package="tm") 
reuters=Corpus(DirSource(adress),readerControl=list(reader=readReut21578XML))

二、数据处理

2.1 分词和整理

#将reuters转换为纯文本,去除标签
reuters=tm_map(reuters,PlainTextDocument) 
# 所有字母转换成小写
corpus_clean <- tm_map(reuters, tolower)
# 去除text中的数字
corpus_clean <- tm_map(reuters, removeNumbers)
 # 去除停用词,例如and,or,until...
corpus_clean <- tm_map(reuters, removeWords, ("english")) 
# 去除标点符号
corpus_clean <- tm_map(reuters, removePunctuation)
# 去除多余的空格,使单词之间只保留一个空格
corpus_clean <- tm_map(reuters, stripWhitespace)

2.2 文档矩阵化

 #将文档转为稀疏矩阵,
dtm <- DocumentTermMatrix(reuters)
#找出发生5次及以上的条目
findFreqTerms(dtm, 5) 
#找相关性,比如对于opec,找到相关系数在0.8 以上的条目
findAssocs(dtm, "opec", 0.8)  
#要考察多个文档中特有词汇的出现频率,可以手工生成字典,并将它作为生成矩阵的参数
d <- Dictionary(c("prices", "crude", "oil"))
inspect(DocumentTermMatrix(reuters, list(dictionary = d)))
#inspect函数查看部分矩阵内容
inspect(dtm[1:5,740:743])
#使用筛选器筛选出ID=237的文档
idx<-meta(reuters,"id")=='237'
reuters[idx]
#找出词频在5次以上的词
findFreqTerms(dtm,5)
#找出与opec相关系数在0.8以上的词
findAssocs(dtm,"opec",0.8)

三、结果获取

#进行降维处理
dtm2 <- removeSparseTerms(dtm, sparse=0.95) 
#将term-document矩阵生成数据框
data <- as.data.frame(inspect(dtm2))  

#查看词条-文本矩阵
inspect(tdm[202:205, 1:5])
inspect(tdm[c("price", "texas"), c("127", "144", "191", "194")])
inspect(dtm[1:5, 273:276])
#频数提取
findFreqTerms(dtm, 5)
#相关性提取
findAssocs(dtm, "opec", 0.8)

四、可视化

data(crude)
crudeDTM <- DocumentTermMatrix(crude, control = list(stopwords = TRUE))
#crudeDTM <- removeSparseTerms(crudeDTM, 0.8) #可以选择去除权重较小的项
crudeDTM.matrix <- as.matrix(crudeDTM)  
d <- dist(crudeDTM.matrix,method="euclidean")
hclustRes <- hclust(d,method="complete")  
hclustRes.type <- cutree(hclustRes,k=5)   #按聚类结果分5个类别  
length(hclustRes.type) 
hclustRes.type  #查看分类结果
plot(hclustRes, xlab = '')  #画出聚类系谱图

参考文献

1.(R语言文本挖掘tm包详解)[https://www.jianshu.com/p/948eef869be3]
2.(R语言学习-词频学习)[https://www.136.la/tech/show-598389.html]

posted @ 2022-05-19 20:58  郝hai  阅读(403)  评论(0编辑  收藏  举报