看书标记【数据科学:R语言实战 3】

本文详细介绍了如何使用R语言进行文本挖掘,包括创建语料库、清洗文本数据(如转换为小写、移除标点、数字和停用词)、构建文档词条矩阵,以及使用k-means进行文本聚类和分析。还展示了如何使用图形表示文本数据和XML文件的处理。
摘要由CSDN通过智能技术生成


【数据科学:R语言实战 3】

Chapter 3 文本挖掘

3.1 功能包

tm:文本挖掘工具
XML:XML处理工具

path <- "C:/Users/Dan/Documents/state-of-the-union.txt"
install.packages(“tm”)
library(tm)
text <- readLines(path,encoding="UTF-8")
vs <- VectorSource(text)  ##VectorSource文本流作为源,将原始文本转换成语料库
elem <- getElem(stepNext(vs))
result <- readPlain(elem, "en", "id1")
txt <- Corpus(vs)
创建语料库
##将文本转换成小写字母
txtlc <- tm_map(txt, tolower)
inspect(txt[1])
inspect(txtlc[1])
----------------------------------------------------------------
##移除标点
txtnp <- tm_map(txt, removePunctuation)
inspect(txt[1])
inspect(txtnp[1])
----------------------------------------------------------------
##移除数字
txtnn <- tm_map(txt, removeNumbers)
inspect(txt[49])
inspect(txtnn[49])
----------------------------------------------------------------
##移除停用词
txtns <- tm_map(txt[1], removeWords, stopwords("english"))
inspect(txtns)
inspect(txt[1])
----------------------------------------------------------------
##移除空格符
txtnw <- tm_map(txt[30], stripWhitespace)
inspect(txtnw)
inspect(txt[30])
----------------------------------------------------------------
##仅仅使用题干
inspect(txt[86])
txtstem <- tm_map(txt, stemDocument)
inspect(txtstem[86])
txtcomplete <- tm_map(txtstem, stemCompletion, dictionary=txt)
inspect(txtcomplete[86])
----------------------------------------------------------------
##文档词条矩阵  文档中发现的关键词以及出现的频率
dtm <- DocumentTermMatrix(txt)
dtm
#txt <- tm_map(txt,removeWords,stopwords("English"))   ##用转换函数移除语料库列表中多余的单词,移除稀疏术语
dtm2 <- removeSparseTerms(dtm, 0.94)  ##用转换函数移除语料库列表中多余的单词,移除稀疏术语
inspect(dtm2)
findAssocs(dtm, "work", 0.15)  ##不同单词间的关联

源函数:VectorSource()、getElem()、stepNext()、Corpus()、DocumentTermMatrix()、tm_map()、removewords、stopWords、removeSparseTerms()、findAssocs().

3.1.2 文本集群

探索单词用法之间的关系,k-means聚类减少了关系式之间的平方差之和以及距离 被最小化到规定的阈值的群组/集群字。

library(stats)
mymeans <- kmeans(dtm,5)
mymeans
summary(mymeans)   ##结论表明需要剔除稀疏项,因为聚类中心过多
freq <- findFreqTerms(dtm,10);freq  频数大于10的频繁项

m2 <- as.matrix(dtm)
dm <- dist(scale(m2))
fit <- hclust(dm, method="ward")
plot(fit)  ##绘制集群的树枝形结构关系图
1.文字图形

文本数据:FOMC(美联储公开市场评论)文本

##用前十个术语(至少使用过5次)表示关系图
source("http://bioconductor.org/biocLite.R")
biocLite("Rgraphviz")
plot(dtm, terms = findFreqTerms(dtm, lowfreq = 5)[1:10], corThreshold = 0.5)
##常用词的条形图(包含停用词)
library(ggplot)
p <- ggplot(subset(wf, freq>10), aes(word,freq))
p <- p + geom_bar(stat="identity")
p <- p + theme(axis.text.x=element_text(angle=45, hjust=1))
p
##生成词云图
install.packages("wordcloud")  ##wordcloud2 功能更强大些
library(wordcloud)
wordcloud(names(wf), freq, min.freq=10)
2.XML文本 (示例不具有代表性

文本数据:http://msdn.microsoft.com/en-us/library/ms762271%28v=vs.85%29.aspx book.xml
找到示例书籍数据的XML,将其存储下来后,再输入R中。

install.packages("XML")
library(XML)
url <- “books.xml”
data <- xmlParse(url)
df <- xmlToDataFrame(data)  ##判断XML是否已对全部XML流进行解析,并转换成列表
colnames(df) ##第一行标题栏,判断是否被转换(有点不易转换)
# mean(as.numeric(df$price))  ##计算平均图书价格

文本数据:好像是无效了 [华盛顿大学的课程列表](http://www.cs.washington.edu/research/ xmldatasets/ data/courses/uwm.xml)(http://aiweb.cs.washington.edu/research/projects/xmltk/xmldata/data/courses/uwm.xml)

##XML需要移至文档中的实际数据进行操作,通过访问文档根实现
root <- xmlRoot(data)
root[1]  ##看第一课程设置
fields <- xmlApply(root, names);fields  ##可获取一张出现在每个XML节点的字段列表

table(sapply(fields, identical, fields[[1]]))  ##检查XML核实存在差异
##有300+个科目有若干章节,这会导致XML的转换出现困难,即数据节点不一致
unique(unlist(fields))  #查看多出的字段列表
unique(xpathSApply(data,"//*/level",xmlValue))  ##找出课程中不同的等级
table(xpathSApply(data,"//*/level",xmlValue))  ##等级之间的拆分
instructors <- table(xpathSApply(data,"///*/instructor",xmlValue)) ##哪些讲师授课最多
which.max(instructors)
which.min(instructors)

sections <- table(xpathSApply(data,"//*/section_listing",xmlValue))
which.max(sections)  ##哪门课程包含的章节最多
credits <- table(xpathSApply(data,"//credits",xmlValue))
credits  ##查看不同科目的学分
xpathSApply(data,"//*[credits=12]",xmlValue) 
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值