R语言文本挖掘
- 格式:doc
- 大小:367.17 KB
- 文档页数:13
文本挖掘深度学习之word2vec的R语言实现_光环大数据培训机构一、word2vec词向量由来在word2vec产生前,还有一些语言模型,在自然语言处理 NLP模型中,到达word2vec历经了一些步骤。
但是对于NLP模型中,起到确定性作用的是词向量(Distributed Representation/word Embedding)的提出,在这之前有一些基础性的模型如统计语言模型、神经网络概率语言模型。
几个基于统计的传统语言模型与word2vec这种直接预测的方法的比较(图片摘自Stanford CS244)【5】:1、统计语言模型统计语言模型的一般形式直观、准确,n元模型中假设在不改变词语在上下文中的顺序前提下,距离相近的词语关系越近,距离较远的关联度越远,当距离足够远时,词语之间则没有关联度。
但该模型没有完全利用语料的信息:1) 没有考虑距离更远的词语与当前词的关系,即超出范围n的词被忽略了,而这两者很可能有关系的。
例如,“华盛顿是美国的首都”是当前语句,隔了大于n个词的地方又出现了“北京是中国的首都”,在n元模型中“华盛顿”和“北京”是没有关系的,然而这两个句子却隐含了语法及语义关系,即”华盛顿“和“北京”都是名词,并且分别是美国和中国的首都。
2) 忽略了词语之间的相似性,即上述模型无法考虑词语的语法关系。
样的句子,因为两个句子中“鱼”和“马”、“水”和“草原”、“游”和“跑”、“中”和“上”具有相同的语法特性。
而在神经网络概率语言模型中,这两种信息将充分利用到。
2、神经网络概率语言模型神经网络概率语言模型是一种新兴的自然语言处理算法,该模型通过学习训练语料获取词向量和概率密度函数,词向量是多维实数向量,向量中包含了自然语言中的语义和语法关系,词向量之间余弦距离的大小代表了词语之间关系的远近,词向量的加减运算则是计算机在”遣词造句”。
如今在架构方面有比NNLM更简单的CBOW模型、Skip-gram模型;其次在训练方面,出现了Hierarchical Softmax算法、负采样算法(Negative Sampling),以及为了减小频繁词对结果准确性和训练速度的影响而引入的欠采样(Subsumpling)技术。
R语⾔-⽂本挖掘主题模型⽂本分类####需要先安装⼏个R包,如果有这些包,可省略安装包的步骤。
#install.packages("Rwordseg")#install.packages("tm");#install.packages("wordcloud");#install.packages("topicmodels")例⼦中所⽤数据数据来源于sougou实验室数据。
数据⽹址:/dl/sogoulabdown/SogouC.mini.20061102.tar.gz⽂件结构└─Sample├─C000007 汽车├─C000008 财经├─C000010 IT├─C000013 健康├─C000014 体育├─C000016 旅游├─C000020 教育├─C000022 招聘├─C000023└─C000024 军事采⽤Python对数据进⾏预处理为train.csv⽂件,并把每个⽂件⽂本数据处理为1⾏。
预处理python脚本<ignore_js_op> (720 Bytes, 下载次数: 96)所需数据<ignore_js_op> (130.2 KB, 下载次数: 164)⼤家也可以⽤R直接将原始数据转变成train.csv中的数据⽂章所需stopwords<ignore_js_op> (2.96 KB, 下载次数: 114)1. 读取资料库1. csv <- read.csv("d://wb//train.csv",header=T, stringsAsFactors=F)2. mystopwords<- unlist (read.table("d://wb//StopWords.txt",stringsAsFactors=F))复制代码2.数据预处理(中⽂分词、stopwords处理)1.2. library(tm);3.4. #移除数字5. removeNumbers = function(x) { ret = gsub("[0-90123456789]","",x) }6. sample.words <- lapply(csvtext, removeNumbers)复制代码1.2. #处理中⽂分词,此处⽤到Rwordseg包3.4. wordsegment<- function(x) {5. library(Rwordseg)6. segmentCN(x)7. }8.9. sample.words <- lapply(sample.words, wordsegment)复制代码1.2. ###stopwords处理3. ###先处理中⽂分词,再处理stopwords,防⽌全局替换丢失信息4.5. removeStopWords = function(x,words) {6. ret = character(0)7. index <- 18. it_max <- length(x)9. while (index <= it_max) {10. if (length(words[words==x[index]]) <1) ret <- c(ret,x[index])11. index <- index +112. }13. ret14. }15.16.17. sample.words <- lapply(sample.words, removeStopWords, mystopwords)复制代码3. wordcloud展⽰1. #构建语料库2. corpus = Corpus(VectorSource(sample.words))3. meta(corpus,"cluster") <- csvtype4. unique_type <- unique(csvtype)5. #建⽴⽂档-词条矩阵6. (sample.dtm <- DocumentTermMatrix(corpus, control = list(wordLengths = c(2, Inf))))复制代码1.2. #install.packages("wordcloud"); ##需要wordcloud包的⽀持3. library(wordcloud);4. #不同⽂档wordcloud对⽐图5. sample.tdm <- TermDocumentMatrix(corpus, control = list(wordLengths = c(2, Inf)));6.7. tdm_matrix <- as.matrix(sample.tdm);8.9. png(paste("d://wb//sample_comparison",".png", sep = ""), width = 1500, height = 1500 );10. comparison.cloud(tdm_matrix,colors=rainbow(ncol(tdm_matrix)));####由于颜⾊问题,稍作修改11. title(main = "sample comparision");12. dev.off();13.复制代码1.2. #按分类汇总wordcloud对⽐图3. n <- nrow(csv)4. zz1 = 1:n5. cluster_matrix<-sapply(unique_type,function(type){apply(tdm_matrix[,zz1[csvtype==type]],1,sum)})6. png(paste("d://wb//sample_ cluster_comparison",".png", sep = ""), width = 800, height = 800 )7. comparison.cloud(cluster_matrix,colors=brewer.pal(ncol(cluster_matrix),"Paired")) ##由于颜⾊分类过少,此处稍作修改8. title(main = "sample cluster comparision")9. dev.off()10.复制代码<ignore_js_op>可以看出数据分布不均匀,culture、auto等数据很少。
务(附代码数据),咨询QQ:3025393450有问题到百度搜索“大数据部落”就可以了欢迎登陆官网:/datablogR语言挖掘公告板数据文本挖掘研究分析## Registered S3 methods overwritten by 'ggplot2':## method from## [.quosures rlang## c.quosures rlang## print.quosures rlang我们对1993年发送到20个Usenet公告板的20,000条消息进行从头到尾的分析。
此数据集中的Usenet公告板包括新闻组用于政治,宗教,汽车,体育和密码学等主题,并提供由许多用户编写的丰富文本。
该数据集可在/~jason/20Newsgroups/(该20news-bydate.tar.gz文件)上公开获取,并已成为文本分析和机器学习练习的热门。
1预处理我们首先阅读20news-bydate文件夹中的所有消息,这些消息组织在子文件夹中,每个消息都有一个文件。
我们可以看到在这样的文件用的组合read_lines(),map()和unnest()。
请注意,此步骤可能需要几分钟才能读取所有文档。
library(dplyr)library(tidyr)library(purrr)务(附代码数据),咨询QQ:3025393450有问题到百度搜索“大数据部落”就可以了欢迎登陆官网:/databloglibrary(readr)training_folder <- "data/20news-bydate/20news-bydate-train/"# Define a function to read all files from a folder into a data frameread_folder <-function(infolder) {tibble(file =dir(infolder, s =TRUE)) %>%mutate(text =map(file, read_lines)) %>%transmute(id =basename(file), text) %>%unnest(text)}# Use unnest() and map() to apply read_folder to each subfolderraw_text <-tibble(folder =dir(training_folder, s =TRUE)) %>%unnest(map(folder, read_folder)) %>%transmute(newsgroup =basename(folder), id, text)raw_text## # A tibble: 511,655 x 3## newsgroup id text## <chr> <chr> <chr>## 1 alt.atheism 49960 From: mathew <mathew@>## 2 alt.atheism 49960 Subject: Alt.Atheism FAQ: Atheist Resources## 3 alt.atheism 49960 Summary: Books, addresses, music -- anything related to atheism## 4 alt.atheism 49960 Keywords: FAQ, atheism, books, music, fiction, addresses, contacts## 5 alt.atheism 49960 Expires: Thu, 29 Apr 1993 11:57:19 GMT## 6 alt.atheism 49960 Distribution: world## 7 alt.atheism 49960 Organization: Mantis Consultants, Cambridge. UK.## 8 alt.atheism 49960 Supersedes: <19930301143317@>## 9 alt.atheism 49960 Lines: 290## 10 alt.atheism 49960 ""## # … with 511,645 more rows请注意该newsgroup列描述了每条消息来自哪20个新闻组,以及id列,用于标识该新闻组中的唯一消息。
R语言环境下的文本挖掘tm包_光环大数据培训机构文本挖掘被描述为“自动化或半自动规划处理文本的过程”,包含了文档聚类、文档分类、自然语言处理、文体变化分析及网络万巨额等领域内容。
对于文本处理过程首先要拥有分析的语料(text corpus),比如报告、信函、出版物等而后根据这些语料建立半结构化的文本库(text database)。
而后生成包含词频的结构化的词条-文档矩阵(term-document matrix)这个一般性数据结构会被用于后续的分析,比如:1)文本分类,比如根据现有的文本分类情况,对未知文本进行归类:2)语法分析;3) 信息提取和修复4) 文档信息汇总,比如提取相关有代表性的关键词、句子等。
文本挖掘相关的R程序包:tm、lsa、RTextTools、textcat、corpora、zipfRmaxent、TextRegression、wordcloud词干化(stemming):比如我们要识别cat这个字符,但还可能有catlike、catty、cats等词,需要进行词干化记号化(Tockenization):将一段文本分割成叫做token(象征)过程,token 可能是单词、短语、符号或其他有意义的元素。
library(Snowball)> SnowballStemmer(c(‘functions’, ‘stemming’, ‘liked’, ‘doing’))[1] “function”“stem”“like”“do”> NGramTokenizerlibrary(Rwordseg)segmentCN(‘花儿为什么这样红’)[1] “花儿”“为什么”“这样”“红”1、tm包1)数据读入:在tm 中主要的管理文件的结构被称为语料库(Corpus),代表了一系列的文档集合。
语料库是一个概要性的概念,在这里分为动态语料库(Volatile Corpus,作为R 对象保存在内存中)和静态语料库(Permanent Corpus,R 外部保存)。
论文题目:R语言用之进行文本挖掘与分析摘要:要分析文本内容,最常见的分析方法是提取文本中的词语,并统计频率。
频率能反映词语在文本中的重要性,一般越重要的词语,在文本中出现的次数就会越多。
词语提取后,还可以做成词云,让词语的频率属性可视化,更加直观清晰。
本文利用R语言对2016年政府工作报告进行文本挖掘与分析并使用词云是该报告可视化,统计词频,用图片方式短时间看透文章的重点。
关键词:文本挖掘;R语言;2016政府工作报告;词云;可视化Abstract:To analyze text content, the most common method of analysis is to extract the words in the text and to count the frequency. After extraction, can also be made word cloud, so that the frequency of the word attribute visualization, more intuitive and clear. This paper uses the R language to carry on the text mining and analysis to the government work report in 2016 and use the word cloud to visualize the report, to count word frequency, and to see the focus of the article in a short time.Key words:Text mining; R language; 2016 government work report; word cloud; visualization引言我们从新华网上可以找到2016年的政府工作报告(附录1),将其整理下来,并转换为TXT格式,去掉空格与分段,最后变为TXT格式的文件,可见附件1(2016政府工作报告)。
R语⾔做⽂本挖掘Part5情感分析Part5情感分析这是本系列的最后⼀篇⽂章,该。
事实上这种单⼀⽂本挖掘的每⼀个部分进⾏全部值获取⽔落⽯出细致的研究,0基础研究阶段。
⽤R⾥⾯现成的算法,来实现⾃⼰的需求,当然还參考了众多⽹友的智慧结晶,所以也想把我的收获总结出来分享给⼤家,希望也能像我⼀样在看⼤家的分享时得到⾃⼰的启⽰。
⽹上翻了下中⽂⽂本情感分析的⼀些⽂章,再回忆了⼀下我⾃⼰做情感分析的⽅法,认为我的想法真的是简单粗暴直接。
这是⼀篇介绍中⽂⽂本情感分析倾向的论⽂。
,中间讲到做情感分析眼下主要有三种⽅法。
第⼀种由已有的电⼦词典或词语知识库扩展⽣成情感倾向词典;另外⼀种,⽆监督机器学习的⽅法。
第三种基于⼈⼯标注语料库的学习⽅法。
上⾯三种⽅法不细致⼀⼀说明了,它们都有⼀个共同的特点,须要⼀个情感倾向的语料库。
我在R中的实现⽅案与第⼀种⽅法类似。
整理⼀个褒义词词库⼀个贬义词词库(这个万能的互联⽹上有⾃⼰稍加整理就OK)。
给⽂本做分词,并提取出中间的情感词。
给每条⽂本定情感倾向评分初始值为1。
跟褒义贬义词词库做匹配,褒义词+1。
贬义词-1,计算出每条⽂本的终于情感倾向评分,为正值则是正⾯评价,为负值则是负⾯评价。
⽅法能够基本实现情感倾向推断。
但还能够改进。
像前⾯參考论⽂中讲到的,还能够依据词语的词性强弱来评定感情的强,不仅仅是+1和-1之分;还有考虑⼀些词语在不同语境下情感倾向可能会不同,⽐⽅论⽂中讲到的“骄傲”,这个我在想可能须要整理出有这样特殊情况的词语;还有负负得正的情况,⽐⽅“不喜欢是不可能的事情!”,照我的评分标准它的结果就是负⾯评价了;反问的情况。
“哪⾥廉价了?”,评出来结果变成了正。
“廉价”这个词我把它放在褒义词表下,事实上细致考虑假设是说“廉价实惠”肯定是褒义。
假设说“廉价没好货”,也会是褒义,这就不正确了,还是第⼆个问题不同语境下情感倾向会不同。
R中的实现过程:1. 数据输⼊处理数据还是某品牌官微,取它微博中的1376条评论,情感褒义词库和贬义词库。
R语言主成分分析在文本挖掘中的应用探索主成分分析(Principal Component Analysis,简称PCA)是一种常用的统计分析方法,可以降低数据维度和提取重要特征。
在文本挖掘中,R语言主成分分析可以应用于多个方面,包括文本数据降维、文本分类、文本聚类等。
本文将探索R 语言主成分分析在文本挖掘中的应用。
1. 文本数据向量化文本挖掘首先需要将文本数据向量化,将其转化为数值型矩阵,以便进行主成分分析。
在R语言中,我们可以使用"tm"包和"tidytext"包来进行文本预处理和向量化。
首先,可以使用"tm"包对文本进行词频统计,提取关键词,并创建词袋模型。
然后,使用"tidytext"包将文本转换为词-文档矩阵,其中行代表文档,列代表词,并且每个单元格的值表示对应词在文档中的出现频率。
2. 文本数据降维主成分分析可以通过线性变换将原始的高维数据映射到低维空间,提取出重要的特征。
在文本挖掘中,可以利用主成分分析对文本数据进行降维,以便更好地理解和分析文本。
在R语言中,可以使用"prcomp"函数对文本向量进行主成分分析。
该函数会返回主成分得分和主成分的方差贡献率等信息。
可以通过设定方差贡献率的阈值,选择保留的主成分个数,从而实现文本数据降维。
3. 文本特征提取主成分分析可以从文本数据中提取关键特征,这对于后续的文本分类和聚类任务非常有用。
在R语言中,可以通过获取主成分的贡献度来确定每个主成分所代表的特征。
可以使用"princomp"或"prcomp"函数获取主成分的贡献度,并根据贡献度的大小选择最具代表性的主成分特征。
通过提取主成分的特征,可以帮助理解文本的关键主题、词汇分布等。
4. 文本分类与聚类主成分分析在文本分类和聚类中也有广泛应用。
通过提取文本特征,并利用主成分分析得到的低维表示,可以对文本进行分类和聚类。
R语言文本挖掘与自然语言处理教程第一章:R语言简介与基础知识1.1 R语言的发展历程R语言是一种用于统计计算与绘图的开源编程语言,其起源于新西兰奥克兰大学的洛夫斯地质统计软件。
自1995年首次发布以来,R语言逐渐发展成为数据科学领域最受欢迎的编程语言之一。
1.2 R语言的环境搭建与基本操作介绍如何安装R语言及RStudio等开发环境,并演示R语言的基本操作,包括变量赋值、向量操作、数据框处理等。
1.3 R语言常用的文本处理包介绍概述R语言中用于文本处理的常用包,如tm、jTexts、stringr 等,并介绍这些包的基本功能和使用方法。
第二章:文本数据的预处理2.1 文本数据的收集与清洗指导如何从不同来源(本地文件、互联网、数据库等)获取文本数据,并介绍如何进行数据清洗,包括去除特殊字符、处理缺失值等。
2.2 分词与词性标注介绍常见的分词算法和R语言中的分词函数,如jiebaR、Rwordseg等,并讲解如何使用这些函数对文本进行分词和词性标注。
2.3 停用词处理与特征选择讲解如何筛选和去除常见停用词,并介绍R语言中常用的特征选择方法,如TF-IDF、CHI和信息增益等。
第三章:文本挖掘方法与应用3.1 文本分类与情感分析介绍常见的文本分类方法,如朴素贝叶斯分类器、支持向量机等,并演示如何使用这些方法对文本进行分类和情感分析。
3.2 文本聚类与主题模型讲解文本聚类与主题模型的原理和实现方法,如K-Means聚类、层次聚类、Latent Dirichlet Allocation等,并演示如何运用这些方法进行文本聚类和主题提取。
3.3 文本关系抽取与实体识别介绍文本关系抽取的方法,如基于规则的关系抽取、基于机器学习的关系抽取等,并讲解如何进行实体识别和关系抽取。
第四章:自然语言处理进阶应用4.1 机器翻译与语言模型概述机器翻译的基本原理和常见算法,如统计机器翻译、神经机器翻译等,并介绍语言模型的应用。
使用R编程技术进行文本挖掘与情感分析近年来,随着互联网的快速发展,大量的文本数据被广泛产生和传播。
这些数据中蕴含着丰富的信息,而如何从这些海量的文本数据中提取有价值的信息成为了一个挑战。
文本挖掘与情感分析技术应运而生,成为了处理和分析文本数据的重要工具。
文本挖掘是一种从大规模文本数据中自动提取高质量信息的技术。
它可以分析文本中的关键词、主题、情感等内容,为用户提供有关文本内容的深入洞察。
而情感分析则是文本挖掘的一个重要分支,它旨在识别和理解文本中的情感倾向,包括积极、消极或中性情感。
R语言作为一种强大的统计分析和数据可视化工具,也提供了丰富的文本挖掘与情感分析的功能包。
通过使用R编程技术,我们可以利用这些功能包来处理和分析文本数据,从而得到有关文本内容的重要信息。
在进行文本挖掘与情感分析之前,我们首先需要对文本数据进行预处理。
这包括去除文本中的特殊字符、数字和停用词等,以及对文本进行分词和词性标注。
R 语言中有许多强大的文本处理工具包,如tm和NLP包,可以帮助我们完成这些预处理步骤。
一旦完成了文本数据的预处理,我们就可以开始进行文本挖掘和情感分析了。
在R中,有许多功能包可以帮助我们实现这些任务。
例如,通过使用tm包中的函数,我们可以计算文本中的词频、词云和词向量等信息。
这些信息可以帮助我们了解文本中的关键词和主题,从而对文本内容进行深入分析。
此外,R语言中的情感分析工具包也提供了丰富的情感分析功能。
通过使用这些工具包,我们可以识别和理解文本中的情感倾向。
例如,通过使用syuzhet包,我们可以将文本数据映射到情感维度,并得到文本的情感得分。
这些得分可以帮助我们判断文本中的情感倾向,从而更好地理解文本内容。
除了文本挖掘和情感分析,R语言还提供了许多其他的文本分析功能。
例如,通过使用topicmodels包,我们可以进行主题建模,从而发现文本数据中的潜在主题。
这些主题可以帮助我们更好地理解文本内容,并从中提取有价值的信息。
Technical Report2012R语言环境下的文本挖掘Text Mining in RVersion0.022*******刘思喆主页更新/todo联系方式sunbjt@新浪微博@刘思喆Copyright©2012R and all the Contributors to R tm.All rights reserved.R以及R tm的作者拥有版权©2012。
保留所有权利。
Permission is granted to copy,distribute and/or modify this document under the terms of the GNU Free Documentation License,Version1.2or any later version published by the Free Software Foundation;with the Invariant Sections being Contributors,no Front-Cover Texts,and no Back-Cover Texts.你可以拷贝、发布或者修改这份文档,但必须遵守自由软件组织颁布的GNU自由文档许可证1.2或者以后版本的条款。
Invariant Sections包括Contributors,没有Front-Cover Texts和Back-Cover Texts。
目录1文本挖掘介绍32自然语言处理技术 述32.1相关的R包 (3)2.2stemming和Tokenization (5)2.3中文分词 (6)3tm包63.1简介 (6)3.2数据读入 (6)3.3数据输出 (8)3.4语料库的提取 (8)3.5信息转化 (9)3.6转化为纯文本 (9)3.6.1去除多余的空白 (9)3.6.2小写变化 (10)3.6.3停止词去除 (10)3.6.4填充 (10)3.7过滤 (10)3.8元数据管理 (11)3.9标准操作和函数 (13)3.10创建词条-文档关系矩阵 (14)3.11对词条-文档关系矩阵操作 (14)3.12字典 (16)4网页解析的利器–XML包174.1网页解析 (17)4.2字符集转化 (21)5XML同tm包的配合使用(to do)216一些文本挖掘方面的应用216.1基础分析技术 (22)6.1.1文本聚类 (22)6.1.2文本分类 (23)6.2潜变量语义分析(not done) (24)6.3主题模型(Topic model) (24)目录用R语言做文本挖掘|2A附录26A.1关于XML文件 (26)A.2关于正则表达式 (27)用R语言做文本挖掘|31文本挖掘介绍文本挖掘被描述为“自动化或半自动化处理文本的过程”,包含了文档聚类、文档分类、自然语言处理、文体变化分析及网络挖掘等领域内容。
在R语言中实现文本挖掘的技巧和工具R语言的灵活性和强大的数据分析能力让它成为文本挖掘的一流工具。
文本挖掘是从大量文本数据中提取有价值的信息和知识的过程,它在商业、科学、政治和许多其他领域中扮演着重要的角色。
这篇文章将探讨R语言中实现文本挖掘的技巧和工具。
1. 文本预处理的技巧文本挖掘的第一步是将原始文本预处理为可以分析的格式。
以下是一些常用的技巧:1.1 文本清洗文本清洗是指去除文本中的无用信息和干扰因素,例如标点符号、停用词、数字、HTML标签等。
在R语言中,可以使用tm包和stringr包来进行文本清洗。
tm包提供了一整套文本处理工具,包括读取文本、过滤文本、转换文本格式等功能。
范例代码:library(tm)# 读取文本docs <- Corpus(DirSource("path/to/folder"))# 移除标点符号docs <- tm_map(docs, removePunctuation)# 移除数字docs <- tm_map(docs, removeNumbers)# 移除HTML标签docs <- tm_map(docs, removeHTMLTags)1.2 文本分词分词是将文本划分为一组单词或术语的过程。
在R语言中,可以使用tokenizers包和NLP包来进行文本分词。
tokenizers包提供了一系列不同的分词函数,包括基于正则表达式、空格和标点符号的分词。
范例代码:library(tokenizers)# 基于正则表达式分词tokens <- tokenize_regex("This is a sentence.")# 基于空格分词tokens <- tokenize_whitespace("This is a sentence.")# 基于标点符号分词tokens <- tokenize_character("This is a sentence.")1.3 文本标准化文本标准化是将文本中的单词转换为一致的格式,例如转换为小写字母、去除词干和词缀等。
中文及英文的文本挖掘——R语言所需要的包tm(text mining) rJava,Snowball,zoo,XML,slam,Rz, RWeka,matlab1文本挖掘概要文本挖掘是从大量的文本数据中抽取隐含的,求和的,可能有用的信息。
通过文本挖掘实现•Associate:关联分析,根据同时出现的频率找出关联规则•Cluster:将相似的文档(词条)进行聚类•Categorize:将文本划分到预先定义的类别里•文档自动摘要:利用计算机自动地从原始文档中提取全面准确地反映该文档中心内容的简单连贯描述性短文。
文本挖掘的运用主要有如下几方面●智能信息检索同义词,简称词,异形词,同音字、赘字移除●网络内容安全内容监控内容过滤●内容管理自动分类检测和追踪●市场监测口碑监测竞争情报系统市场分析2英文文本挖掘实例实现多个英文文档的聚类分析2.1文本预处理2.1.1读取文本内容#取得tm内部文件texts/crude/下的文件目录。
>library("tm",lib.loc="d:/ProgramFiles/R/R-3.0.3/library")> vignette("tm")#获取相关帮助文档的内容,pdf格式reut<-system.file("texts","crude",package='tm')# 用Corpus命令读取文本并生成语料库文件由于要读取的是xml文件,所以需要xml包reuters <- Corpus(DirSource(reut), readerControl = list(reader =readReut21578XML))# DirSource指示的是文件夹路径,如果是单个向量要设为语料库则VectorSource(向量名) readerControl不用设置查看前两个语料变量内容另外可以从本地文件中读取用户txt文件> inputtest<-read.csv(file.choose())2.1.2文本清理对于xml格式的文档用tm_map命令对语料库文件进行预处理,将其转为纯文本并去除多余空格,转换小写,去除常用词汇、合并异形同意词汇,如此才能得到类似txt文件的效果需要用到的包SnowballCreuters <- tm_map(reuters, PlainTextDocument)#去除标签reuters <- tm_map(reuters, stripWhitespace)#去多余空白reuters <- tm_map(reuters, tolower)#转换小写reuters <- tm_map(reuters, removeWords, stopwords("english"))tm_map(reuters, stemDocument)2.1.3查找含有特定语句的文档例如找出文档编号为237而且包含句子INDONESIA SEEN AT CROSSROADS OVER ECONOMIC CHANGE 的文档。
> query <- "id == '237' & heading == 'INDONESIA SEEN AT CROSSROADS OVER ECONOMIC CHANGE'"> tm_filter(reuters, FUN = sFilter, query)找到由于语料库已经将大小写转换以及将介词类删除所以对应的语句只是特有单词的组合。
2.1.4生成词频矩阵并查看内容dtm <- DocumentTermMatrix(reuters)查看某部分的词频内容个数,其中dtm行提示哪个文件,列表示词语。
> inspect(dtm[10:15,110:120])A document-term matrix (6 documents, 11 terms)Non-/sparse entries: 6/60Sparsity : 91%Maximal term length: 9Weighting : term frequency (tf)TermsDocs activity. add added added. address addressed adherence adhering advantage advisers agency [1,] 0 0 0 0 0 0 1 1 0 0 2[2,] 0 0 0 0 0 0 0 0 0 0 0[3,] 0 0 0 0 0 0 0 0 0 0 1[4,] 0 0 0 0 0 0 0 1 0 0 2[5,] 0 0 0 0 0 0 0 0 0 0 0[6,] 0 0 0 0 0 0 0 0 0 0 02.1.5查看含有特定词的文档若要考察多个文档特定词汇的出现频率或以手工生成字典,并将其作为生成阵的参数> inspect(tdm[c("price", "texas"),c("127","144","191","194")])A term-document matrix (2 terms, 4 documents)Non-/sparse entries: 6/2Sparsity : 25%Maximal term length: 5Weighting : term frequency (tf)DocsTerms 127 144 191 194price 2 1 2 2texas 1 0 0 2> inspect(DocumentTermMatrix(reuters,+ list(dictionary = c("prices", "crude", "oil"))))A document-term matrix (20 documents, 3 terms)Non-/sparse entries: 41/19Sparsity : 32%Maximal term length: 6Weighting : term frequency (tf)TermsDocs crude oil prices127 3 5 4144 0 11 4191 3 2 0194 4 1 0211 0 2 0236 1 7 2237 0 3 02.1.6元数据操作(词元素)2.1.6.1查看词条出现次数大于某个具体值的词findFreqTerms(dtm,5)#查看出现频大于等于5的词2.1.6.2查看与某一词相关度大于0.8的词条> findAssocs(dtm,'opec',0.8)opecmeeting 0.8815.8 0.85oil 0.85emergency 0.83analysts 0.82buyers 0.802.1.7处理词频矩阵> dtm2<-removeSparseTerms(dtm,sparse=0.95) //parse值越少,最后保留的term数量就越少0.95是指如果某一词出现在文档的概率少于(1-0.95)则不再保留到词频矩阵。
即删除权重少的元素。
2.1.8转换为标准阵temp=as.data.frame(inspect(dtm2))> temptoscale<-scale(temp)2.2文本挖掘——聚类分析> d <- dist(temptoscale, method = "euclidean") > fit <- hclust(d, method="ward")> plot(fit)2.3分析结果从聚类图可以看出,文档16和17是比较接近的。
而3,4,1,19可以聚成一类,1,6,11,10,13也可分别聚为一类3中文文本挖掘实例3.1前期准备3.1.1Mmseg4j分词使用中文分词法,由于词之间无有像英文一样的空隔,好在有Java已经解决了这样的问题,我们只需要在R-console里加载rJava与rmmseg4j两个工具包即可。
如>mmseg4j("中国人民从此站起来了")[1] 中国人民从此站起来但事实上其技术是好几代之前的了,目前很少有人还在使用,并且其精度不高,用户自定义词典在R测试并无效。
> teststring<-c('我要学习r语言,兴趣小组,学无止尽')> mmseg4j(teststring)[1] "我要学习 r 语言兴趣小组学无止尽"尽管在D:\Program Files\R\R-3.0.3\library\rmmseg4j\userDic中将自定义的词典r语言写入,但似乎并没有被识别到。
3.1.2Rwordseg介绍所需要的中文分词包Rwordseg,rjava包Rwordseg 是一个R环境下的中文分词工具,使用rJava调用Java分词工具Ansj。
Ansj 也是一个开源的 Java 中文分词工具,基于中科院的 ictclas 中文分词算法,采用隐马尔科夫模型(Hidden Markov Model,HMM)。
作者孙健重写了一个Java版本,并且全部开源,使得 Ansi可用于人名识别、地名识别、组织机构名识别、多级词性标注、关键词提取、指纹提取等领域,支持行业词典、用户自定义词典。
3.1.2.1分词segmentCN(strwords,analyzer = get("Analyzer", envir = .RwordsegEnv),nature = FALSE, nosymbol = TRUE,returnType = c("vector", "tm"), isfast = FALSE,outfile = "", blocklines = 1000)nature用于设置是否输出词性,默认不用。
> segmentCN(teststring)[1] "我" "要" "学习" "r语言" "兴趣" "小组" "学" "无" "止" "尽"加入用户自定义词典并进行测试3.1.2.2自定义词典> insertWords(c("我要"))> segmentCN(teststring)[1] "我要" "学习" "r语言" "兴趣" "小组" "学" "无" "止" "尽"3.1.2.3安装新的词典installDict("E:/default.dic")3.1.2.4人名识别设置> getOption("isNameRecognition")[1] FALSEsegment.options(isNameRecognition = TRUE)用于设置是否进行人名识别segment.options(isNameRecognition = TRUE)3.1.3读取网站内容> library("XML", lib.loc="d:/Program Files/R/R-3.0.3/library")> x <- htmlParse("/cn/")> iconv(xmlValue(getNodeSet(x, "//a[@href]")[[1]]), 'UTF-8', '')#转换编码[1] "COS论坛 | 统计之都"tables=readHTMLTable(x)#读取内容> tables$`NULL`NULL$latest帖子—发表新帖子 <U+00BB> 回复作者最后回复最近更新1 COS论坛说明(新手必读) - 23…474849 979 谢益辉 cassiusoat2 周3.1.4Tm中文常识在tm 中主要的管理文件的结构被称为语料库(Corpus),代表了一系列的文档集合。