用R语言进行文本挖掘和主题建模
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~
我们每天都会遇到各种各样的文本数据,但大部分是非结构化的,并不是全部都是有价值的。
据估计,全球约80%的数据是非结构化的。这包括音频,视频和文本数据。在这篇文章中,我们将只讨论文本数据。在系列后面,我们将会谈论到其他非结构化数据。
我们阅读的书籍,博客,新闻文章,网页,电子邮件等都是文本数据。所有这些文本都为我们提供了大量的信息,并不断增长。但是,并非所有的数据都是有用的。我们过滤掉噪音,只保留重要的信息。这是一个乏味的过程,但作为人类,我们需要智慧 - 阅读是一个必不可少的工具。而且,当世界倾向于智能机器时,处理来自非结构化数据的信息的能力是必须的。对于人类和智能机器来说,从大量的文本数据中挖掘信息是必需的。文本挖掘可以提供方法来提取,总结和分析来自非结构化数据的有用信息,以获得新的见解。
文本挖掘可以用于各种任务。以下是我们的系列将进一步讨论的几个主题:
- 主题建模
- 文档聚类
- 文档分类
- 文字摘要
这篇文章主要关注主题建模。在接下来的帖子中,我们将深入到其他任务。
1、文本检索
文本文件可以有各种格式,如PDF,DOC,HTML等。第一步是将这些文档转换为可读的文本格式。接下来,必须创建一个语料库。语料库只是一个或多个文档的集合。当我们在R中创建语料库时,文本会被标记并可供进一步处理。
library(tm)
library(SnowballC)
library(topicmodels)
#设置工作目录(根据需要修改路径)
setwd("//Users//datascience//textmining//topicmodel")
#加载文档到语料库
#获取目录中的.txt文件列表
filenames <- list.files(getwd(),pattern="*.txt")
#将文件读入字符向量
files <- lapply(filenames,readLines)
#创建矢量语料库
articles.corpus <- Corpus(VectorSource(files))
2、文本预处理
接下来,我们需要对文本进行预处理,将其转换为可以处理以提取信息的格式。在分析文本之前减小特征空间的大小是非常重要的。我们可以在这里使用各种预处理方法,如停用词清除,案例折叠,词干化,词形化和收缩简化。但是,没有必要将所有的规范化方法应用于文本。这取决于我们检索的数据和要执行的分析类型。
# 将每个字母变成小写
articles.corpus <- tm_map(articles.corpus, tolower)
# 删除标点符号
articles.corpus <- tm_map(articles.corpus, removePunctuation)
#删除数字
articles.corpus <- tm_map(articles.corpus, removeNumbers);
# 删除通用和自定义的停用词
stopword <- c(stopwords('english'), "best");
articles.corpus <- tm_map(articles.corpus, removeWords, stopword)
articles.corpus <- tm_map(articles.corpus, stemDocument);
以下是我们应用于减少数据集特征空间的预处理方法的简短描述:
删除标点符号:删除了各种标点符号,如+, - 和〜。
停用词清除:将常用词和短语功能词等停用词过滤掉,以便对数据进行有效的分析。由NLTK提供的标准英语停用词列表与自定义词汇集合一起使用,以消除非正式词汇和产品名称。我们也可以从我们的文本中提供我们认为与我们的分析无关的文字。
案例折叠:案例折叠将所有大写字母转换为小写字母。
词干化:词干是将修饰词或派生词归为根的过程。例如,工作(进行时)和工作(过去式)都会被词干化为工作(原型)。
删除号码:对于某些文本挖掘活动,号码不是必需的。例如,在主题建模的情况下,我们关心的是找到描述我们语料库的基本词汇。在这种情况下,我们可以删除号码。然而,在某些情况下,例如,如果我们正在为财务报表进行主题建模,它们可能会增加实质性内容。
下一步是创建一个文档项矩阵(DTM)。这是一个重要的步骤,因为解释和分析文本文件,它们最终必须转换成文档术语矩阵。 DTM包含每个文档的术语出现次数。 DTM中的行代表文档,文档中的每个词代表一列。在将文集转换为文档项矩阵之后,我们还移除了低频词(稀疏词)。
articleDtm <- DocumentTermMatrix(articles.corpus, control = list(minWordLength = 3));
articleDtm2 <- removeSparseTerms(articleDtm, sparse=0.98)
3、主题建模
主题建模是为了找到最能代表集合的文档集合中的关键词/术语。Latent Dirichlet Allocation(LDA)模型是一种广泛使用的话题建模技术。以上结果表明,这两个文件的主题都集中在机器学习和数据科学领域,你可以从GitHub中找到数据集和代码。
问答
相关阅读
此文已由作者授权腾讯云+社区发布,原文链接:https://cloud.tencent.com/developer/article/1007140?fromSource=waitui
用R语言进行文本挖掘和主题建模的更多相关文章
- R语言做文本挖掘 Part5情感分析
Part5情感分析 这是本系列的最后一篇文章,该.事实上这种单一文本挖掘的每一个部分进行全部值获取水落石出细致的研究,0基础研究阶段.用R里面现成的算法,来实现自己的需求,当然还參考了众多网友的智慧结 ...
- R语言做文本挖掘 Part4文本分类
Part4文本分类 Part3文本聚类提到过.与聚类分类的简单差异. 那么,我们需要理清训练集的分类,有明白分类的文本:測试集,能够就用训练集来替代.预測集,就是未分类的文本.是分类方法最后的应用实现 ...
- R语言-用R眼看琅琊榜小说的正确姿势
博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html 目录: 零:写在前面的一些废话 一.R眼看琅琊榜的基本原理 1.导入数据 2.筛选数据 3.多条 ...
- 第五篇:R语言数据可视化之散点图
散点图简介 散点图通常是用来表述两个连续变量之间的关系,图中的每个点表示目标数据集中的每个样本. 同时散点图中常常还会拟合一些直线,以用来表示某些模型. 绘制基本散点图 本例选用如下测试数据集: 绘制 ...
- R语言︱集合运算——小而美法则
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 集合运算的一般规则如下: union(x ...
- R语言︱词典型情感分析文本操作技巧汇总(打标签、词典与数据匹配等)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:情感分析中对文本处理的数据的小技巧要 ...
- R语言︱文件读入、读出一些方法罗列(批量xlsx文件、数据库、文本txt、文件夹)
笔者寄语:小规模的读取数据的方法较为简单并且多样,但是,批量读取目前看到有以下几种方法:xlsx包.RODBC包.批量转化成csv后读入. R语言中还有一些其他较为普遍的读入,比如代码包,R文件,工作 ...
- R语言︱LDA主题模型——最优主题数选取(topicmodels)+LDAvis可视化(lda+LDAvis)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:在自己学LDA主题模型时候,发现该模 ...
- R语言-文本挖掘
---恢复内容开始--- 案例1:对主席的新年致辞进行分词,绘制出词云 掌握jieba分词的用法 1.加载包 library(devtools) library(tm) library(jiebaR) ...
随机推荐
- 如何设计一个可用的web容器
之前在另外一个平台(http://www.jointforce.com/jfperiodical/article/1035)发表的一篇文章,现在发布到自己的博客上. 开发一个web容器涉及很多不同方面 ...
- Unity 数据Json格式的转换
把对象转换为字节序列的过程称为对象的序列化. 把字节序列化恢复为对象过程称为对象的反序列化. JSON格式的转换,是一大神给我说的,让我拿来存储数据库时对一些数据的处理,感觉特别好用.但是我并没有深入 ...
- IP网际协议 - IP首部,IP路由选择,子网掩码
IP首部 4个字节的32 bit值以下面的次序传输:首先是0-7 bit,其次8-15 bit,然后1 6-23 bit,最后是24~31 bit.这种传输次序称作big endian字节序.由于T ...
- OpenGL OpenCV根据视差图重建三维信息
代码如下: // disparity_to_3d_reconstruction.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" //Huan ...
- mybatis ----数据级联查询(多对一)
工程的目录结构: 有两个表,一个文章表article ,一个用户表user. create table article (id int(11) not null auto_increment, use ...
- LeetCode(39)-Intersection of Two Linked Lists
听歌曲初爱有感: 开头啰嗦两句,刚在做算法题目的时候,听到了杨宗纬的<初爱>,突然有了一种本科时候的感觉,想想自己现在研二了,青春喂了狗,我果断喝了一罐啤酒,循环这首歌到吐-.. 题目: ...
- vicoapp使用备忘
vico是一个模式编辑器,意味着没用过vi之类编辑器的童鞋用起来肯定觉得很不习惯. 模式切换 i:切至编辑模式,在光标前插入 a:切至编辑模式,在在光标后插入 I:类似于i,不过在行首插入 esc键: ...
- asp.net 下的中文分词检索工具 - jieba.net
jieba是python下的一个检索库, 有人将这个库移植到了asp.net 平台下, 完全可以替代lucene.net以及盘古分词的搭配 之所以写这个, 其实是因为昨天面试时, 被问到网站的关键字检 ...
- 【备忘】Windows的命令行下设置网络代理
在公司访问网络的时候,需要设置代理,设置浏览器的代理是相当的方便了.但有的时候要使用命令行,就需要自己设置了(貌似只要浏览器设置好了,可以直接使用命令行,但我们公司的借,需要有用户名和密码,如果没有使 ...
- Java杂记9—NIO
前言 非阻塞IO,也被称之为新IO,它重新定义了一些概念. 缓冲buffer 通道 channel 通道选择器 BIO 阻塞IO,几乎所有的java程序员都会的字节流,字符流,输入流,输出流等分类就是 ...