基于R语言的文本挖掘技术

2743人阅读 评论(0) 收藏 举报
分类:

绪论

目前我们可以获取的大部分信息是以文本的形式存储在文本数据库中的,由来自各种数据源的大量文档组成,如新闻文档、研究论文、书籍、数字图书馆和web页面。由于电子形式的文本信息飞速增长,文本挖掘已经成为信息领域的研究热点。

要分析文本内容,最常见的分析方法是提取文本中的词语,并统计频率。频率能反映词语在文本中的重要性,一般越重要的词语,在文本中出现的次数就会越多。词语提取后,还可以做成词云,让词语的频率属性可视化,更加直观清晰。

文本挖掘是应用驱动的。它在商业智能、信息检索、生物信息处理等方面都有广泛的应用;例如,客户关系管理,自动邮件回复,垃圾邮件过滤,自动简历评审,搜索引擎等等。

1.文本挖掘的基本概念

1.1文本挖掘的介绍

文本挖掘一词出现于1998年第十届欧洲机器学习会议上。Kodratoff认为文本挖掘的目的是从文本集合中,试图在一定的理解水平上尽可能多地提取知识。

文本挖掘是一个从大量文本数据中提取以前未知的、有用的、可理解的、可操作的知识的过程。

文本数据包括:技术报告、文本集、新闻、电子邮件、网页、用户手册等。

1.2文本挖掘的定义

文本挖掘(TextMining)是一个从非结构化文本信息中获取用户感兴趣或者有用的模式的过程。其中被普遍认可的文本挖掘定义如下:

文本挖掘是指从大量的文本数据中抽取事先未知的、可理解的、最终可用的知识的过程,同时运用这些只是更好的组织信息以便将来参考。

文本特征指的是关于文本的元数据:

1)描述性特征,例如文本的名称、日期、大小、类型等;

2)语义性特征,例如文本的作者、机构、标题、内容等

1.3文本挖掘的任务

1)短语提取:提取文本集中所有相关的短语 。

2)概念提取(聚类):对这些短语之间的关系,建立一个该文本集中的主要概念。

3)可视化显示和导航:从多个视角出发进行分析。

1.4文本挖掘的主要用途

文本挖掘的主要用途是从原来未经处理的文本中提取未知的知识,但是文本挖掘也是一项非常困难的工作,因为它必须处理那些本来就模糊而且非结构化的文本数据,所以他是一个多学科混杂的领域,涵盖了信息技术、文本分析、模式识别、统计学、数据可视化、数据库技术、机器学习以及数据挖掘等技术。文本挖掘是从数据挖掘发展而来,因此其定义与我们熟知的数据挖掘定一类似。但与传统的数据挖掘相比,文本挖掘有其独特之处,主要变现在:文档本身是非结构化的,无确定形式并且缺乏机器可理解的语义;而数据挖掘的对象以数据库中的结构化数据为主,并利用关系表等存储结构来发现知识。因此,有些数据挖掘技术并不适用于文本挖掘,即使可用,也需要建立在对文本集预处理的基础之上。

1.5文本挖掘与数据挖掘


  1. 文本挖掘的过程

文本知识发现主要由以下步骤组成:


2.1文本预处理

选取任务相关的文本并将其转化成文本挖掘工具可以处理的中间形式。

如果是网页文本,去掉html一些tag标记去除停用词(stopwords)、词根还原(stemming)(中文)分词、词性标注、短语识别、…

词频统计

1TFi,j:特征i在文档j中出现次数,词频(TermFrequency)

2DFi:所有文档集合中出现特征i的文档数目,文档频率(DocumentFrequency)

TFIDF型权重

TF:aij=TFij

TF*IDF:aij=TFij*log(N/DFi)

TFC:对上面进行归一化

LTC:降低TF的作用

基于熵概念的权重(Entropyweighting)称为termi的某种熵,如果term分布极度均匀:熵等于-1,只在一个文档中出现:熵等于0

数据清洗:去掉不合适的噪声文档或文档内垃圾数据

文本表示:向量空间模型

降维技术

1)特征选择(FeatureSelection)

2)特征重构(Re-parameterisation,如LSI)

2.2文本挖掘

在完成文本预处理后,可以利用机器学习、数据挖掘以及模式识别等方法提取面向特定应用目标的只是或模式。

2.3模式评估与表示

模式评估与表示为最后一个环节,是利用已经定义好的评估指标对获取的知识或模式进行评价。如果评价结果符合要求,就存储该模式以备用户使用;否则返回到前面的某个环节重新调整和改进,然后再进行新一轮的发现。

如果把文本挖掘视为一个独立的过程,则上面三个步骤可以细化为下图表示:


  1. 文本挖掘的关键技术及文本分类

3.1模式评估与表示

文本转换为向量形式并经特征选择以后,便可以进行挖掘分析了。常用的文本分析技术有:文本结构分析、文本摘要、文本分类、文本聚类、文本关联分析、分布分析和趋势预测等。文本分类是其中一种很关键的挖掘任务也是在文本信息处理领域用得最多的一种技术。

文本分类系统的任务是:在给定的分类体系下,根据文本的内容自动地确定文本关联的类别。从数学角度来看,文本分类是一个映射的过程,她将未标明类别的文本映射到已有的类别中,该映射可以使一一映射,也可以是一对多映射,因为通常一篇文本可以同多个类别相关联。用数学公式表示如下:

f:A->B A为待分类文本集,B为分类体系中的类别集合

文本分类的映射规则是系统根据已经掌握的每类若干样本的数据信息,总结出分类的规律性而建立的判别公式和判别规则。然后再遇到心文本时,根据总结出的判别规则,确定文本相关的类别。

3.2文本分类步骤

首先,把一组预先聚类过或标注过类别的文本作为训练集;然后对训练集进行学习以便得出各类的分类模式。

常用的分类算法有:

相似度模型(K-NN)、概率模型(Bayes)、线性模型(SVM)、非线性模型(决策树、神经网络)、组合模型(随机森林)等。

3.3文本分类步骤

  1. 首先,获取训练文本集。

训练文本集由一组进过预处理的文本特征向量组成,每个训练文本(或称训练样本)有一个类别标号。

  1. 选择分类方法并训练分类模型。

文本分类方法有统计方法、机器学习方法和神经网络方法等等。在对待分类样本进行分类前,要根据所选择的分类方法,利用训练集进行训练并得出分类模型。

  1. 用训练好的分类模型对其他待分类文本进行分类。

  2. 根据分类结果评估分类模型。

下图是一个完整的文本分类过程:

  1. 文本挖掘的案例

4.1文本挖掘的实例代码

这是一个关于文本的挖掘的实例:

案例源码:

###1.读取资料库

setwd("F://R/R文本挖掘1")

csv<- read.csv("train.csv",header=T, stringsAsFactors=F)

mystopwords<-unlist (read.table("StopWords.txt",stringsAsFactors=F))

###2.数据预处理(中文分词、stopword处理)

#设置java环境变量

#Sys.setenv(JAVA_HOME='C://ProgramFiles/Java/jdk1.6.0_21/jre')

Sys.setenv(JAVA_HOME='C://Java/jdk1.8.0_60/jre')

library(tm)

#移除数字

removeNumbers= function(x) { ret = gsub("[0-90123456789]","",x)}

#中文分词,也可以考虑使用rmmseg4j、rsmartcn

#安装分词工具包

#install.packages("Rwordseg",repos= "http://R-Forge.R-project.org", type = "source")

library(Rwordseg)

#去除停止词,效果比较差,可以进一步完善

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, segmentCN)

#先处理中文分词,再处理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,sum)})

png(paste("sample_cluster_comparison",".png", sep = ""), width= 800, height = 800 )

comparison.cloud(cluster_matrix)

title(main= "sample cluster comparision")

dev.off()

#数据分布不均匀,culture、auto等数据很少。

#按各分类画wordcloud

sample.cloud<- function(cluster, maxwords = 100) {

words<- sample.words[which(csv$type==cluster)]

allwords<- unlist(words)

wordsfreq<- sort(table(allwords), decreasing = T)

wordsname<- names(wordsfreq)

png(paste("sample_",cluster, ".png", sep = ""), width = 600, height =600 )

wordcloud(wordsname,wordsfreq, scale = c(6, 1.5), min.freq = 2, max.words = maxwords,

colors= rainbow(100))

title(main= paste("cluster:", cluster))

dev.off()

}

lapply(unique_type,sample.cloud)#unique(csv$type)



查看评论

R语言-文本挖掘例子

以总理2015报告原文进行挖掘处理,先将报告内容保存为TXT格式文本。 需要的包:rJava,Rwordseg,wordcloud。 library(rJava) library(Rword...
  • hongweigg
  • hongweigg
  • 2015-11-18 10:24:52
  • 8182

R语言文本挖掘tm包详解(附代码实现)

文本挖掘相关介绍 1什么是文本挖掘 2NLP 3 分词 4 OCR 5 常用算法 6 文本挖掘处理流程 7 相应R包简介 8 文本处理 词干化stemming ...
  • qq_22194911
  • qq_22194911
  • 2017-05-06 23:00:34
  • 1123

R语言做文本挖掘 Part2分词处理

Part2分词处理 在RStudio中安装完相关软件包之后,才能做相关分词处理,请参照Part1部分安装需要软件包。 1.       RWordseg功能 说明文档可在http://downlo...
  • cl1143015961
  • cl1143015961
  • 2015-03-06 23:57:29
  • 12531

利用R语言的tm包进行文本挖掘

摘要: tm包是R语言中为文本挖掘提供综合性处理的package,进行操作前载入tm包,vignette命令可以让你得到相关的文档说明library(tm)vignette("tm")首先要读取文本,...
  • u011955252
  • u011955252
  • 2017-04-23 13:32:54
  • 1588

R语言︱文本挖掘之中文分词包——Rwordseg包(原理、功能、详解)

笔者寄语:与前面的RsowballC分词不同的地方在于这是一个中文的分词包,简单易懂,分词是一个非常重要的步骤,可以通过一些字典,进行特定分词。大致分析步骤如下: 数据导入——选择分词字典——分词...
  • sinat_26917383
  • sinat_26917383
  • 2016-04-04 13:38:52
  • 20764

R语言做文本挖掘 Part3文本聚类

Part3文本聚类 分类和聚类算法,都是数据挖掘中最常接触到的算法,分类聚类算法分别有很多种。可以看下下面两篇文章对常见的分类聚类算法的简介: 分类算法:http://blog.csdn.net/...
  • cl1143015961
  • cl1143015961
  • 2015-03-16 20:54:35
  • 7994

基于<em>R语言</em>的自动数据收集--网络抓取和<em>文本挖掘</em>实用指南,完整中文...

作者深入剖析自动化数据抓取和分析各个层面的问题,从网络和数据技术到网络抓取和<em>文本挖掘</em>的实用工具箱,重点阐释利用<em>R语言</em>进行自动化数据抓取和分析,能为社会科学研究...
  • 2018年04月17日 00:00

R语言之文本挖掘

文本挖掘涉及到知识有:贝叶斯,朴素贝叶斯、分词算法。 贝叶斯公式: P(H|X) = P(X|H)P(H)/P(X) 解释:X代表词,H代表是否是垃圾邮件,P(H|X)代表出现X次是垃圾...
  • zhf1234abc
  • zhf1234abc
  • 2015-08-22 21:25:55
  • 310

R语言︱文本挖掘——jiabaR包与分词向量化的simhash算法(与word2vec简单比较)

《数据挖掘之道》点评:虽然我比较执着于Rwordseg,并不代表各位看管执着于我的执着,推荐结巴分词包,小巧玲珑,没有那么多幺蛾子,而且R版本和python版本都有,除了词性标注等分词包必备功能以外,...
  • sinat_26917383
  • sinat_26917383
  • 2016-04-05 21:01:54
  • 12249

R之文本挖掘

中文及英文的文本挖掘——R语言 所需要的包tm(text mining) rJava,Snowball,zoo,XML,slam,Rz, RWeka,matlab 1  文本挖掘概要 文本挖掘是...
  • u013946794
  • u013946794
  • 2015-03-13 22:13:30
  • 3010
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 56万+
    积分: 5497
    排名: 6071
    博客专栏
    最新评论