玩玩文本挖掘
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
玩玩文本挖掘-wordcloud、主题模型与文本分类
Askyer(QQ:642874367)
序
本文主要介绍文本挖掘的常见方法,主要包括词频分析及wordcloud展现、主题模型、文本分类、分类评价等。分类主要包括无监督分类(系统聚类、KMeans、string kernals),有监督分类(knn、SVM)。
文本挖掘概念
将数据挖掘的成果用于分析以自然语言描述的文本,这种方法被称为文本挖掘(Text Mining)或文本知识发现(Knowledge Discovery in Text)。
文本挖掘主要过程:特征抽取、特征选择、文本分类、文本聚类、模型评价。
主题模型(Topic Mode)介绍
主题模型是专门抽象一组文档所表达“主题”的统计技术。
最早的模型是probabilistic latent semantic indexing (PLSI),后来Latent Dirichlet allocation (LDA,潜在狄利克雷分配模型) 模型成为了最常见的主题模型,它可以认为是PLSI 的泛化形式。LDA 主题模型涉及到贝叶斯理论、Dirichlet 分布、多项分布、图模型、变分推断、EM 算法、Gibbs 抽样等知识。
实例分析
0.数据预处理
数据来源于sougou实验室数据。
数据网址:/dl/sogoulabdown/SogouC.mini.20061102.tar.gz 文件结构
└─Sample
├─C000007 汽车
├─C000008 财经
├─C000010 IT
├─C000013 健康
├─C000014 体育
├─C000016 旅游
├─C000020 教育
├─C000022 招聘
├─C000023 文化
└─C000024 军事
采用Python对数据进行预处理为train.csv文件,并把每个文件文本数据处理为1行。
1.读取资料库
setwd("d:\\Testing\\R\\w12")
csv <- read.csv("train.csv",header=T, stringsAsFactors=F)
mystopwords<- unlist (read.table("StopWords.txt",stringsAsFactors=F))
2.数据预处理(中文分词、stopword处理)
library(tm)
#移除数字
removeNumbers = function(x) { ret = gsub("[0-90123456789]","",x) }
#中文分词,也可以考虑使用rmmseg4j、rsmartcn
wordsegment<- function(x) {
library(Rwordseg)
segmentCN(x)
}
#去除停止词,效果比较差,可以进一步完善
removeStopWords = function(x,words) {
ret = character(0)
index <- 1
it_max <- length(x)
while (index <= it_max) {
if (length(words[words==x[index]]) <1) ret <- c(ret,x[index])
index <- index +1
}
ret
}
sample.words <- lapply(csv$text, removeNumbers)
sample.words <- lapply(sample.words, wordsegment)
#先处理中文分词,再处理stopwords,防止全局替换丢失信息
sample.words <- lapply(sample.words, removeStopWords, mystopwords)
#构建语料库
corpus = Corpus(VectorSource(sample.words))
meta(corpus,"cluster") <- csv$type
unique_type <- unique(csv$type)
#建立文档-词条矩阵
(sample.dtm <- DocumentTermMatrix(corpus, control = list(wordLengths = c(2, Inf))))
3.wordcloud展示
library(wordcloud)
#不同文档wordcloud对比图
sample.tdm <- TermDocumentMatrix(corpus, control = list(wordLengths = c(2, Inf))) tdm_matrix <- as.matrix(sample.tdm)
png(paste("sample_comparison",".png", sep = ""), width = 1500, height = 1500 ) comparison.cloud(tdm_matrix)
title(main = "sample comparision")
dev.off()
#按分类汇总wordcloud对比图
n <- nrow(csv)
zz1 = 1:n
cluster_matrix<-sapply(unique_type,function(type){apply(tdm_matrix[,zz1[csv$type==type]],1,su m)})
png(paste("sample_ cluster_comparison",".png", sep = ""), width = 800, height = 800 ) comparison.cloud(cluster_matrix)
title(main = "sample cluster comparision")
dev.off()