R语言学习笔记:文本分析

文本分析

使用的数据:yelp_subset.csv

library (data.table)
data.all = fread ('yelp_subset.csv', stringsAsFactors = FALSE)
dim (data.all)
data = data.all [1:100,]#取前一百行来分析

目标:利用评论预测打分
为了简化,把星级分为两类:1-3星为0,4-5星为1

data$rating = c(0)#做出新的rating列并赋值为0
data$rating [data$stars >= 4] = 1#大于等于四星的评价赋值为1
data$rating = as.factor (data$rating)#变为类别变量
table (data$rating)/nrow (data)#查看好坏点评的数量
data1.text <- data$text#取出文本
print(data1.text[1:5])#看看前五段
library(tm)
library(SnowballC)
mycorpus1 <- VCorpus( VectorSource(data1.text))#转成corpus格式
mycorpus2 <- tm_map(mycorpus1, content_transformer(tolower))#全部转成小写字母
mycorpus3<- tm_map(mycorpus2, removeWords, stopwords("english"))#去掉无实际意义的单词
mycorpus4 <- tm_map(mycorpus3, removePunctuation)#去掉标点符号
mycorpus5 <- tm_map(mycorpus4, removeNumbers)#去掉数字
mycorpus6 <- tm_map(mycorpus5, stemDocument, lazy = TRUE)  #使用词根
dtm1 <- DocumentTermMatrix( mycorpus6 ) #制作单词频率矩阵
as.matrix(dtm1[1, 1:50])#第一篇点评的前五十个变量,基本都是0,因为第一篇点评只有28个单词
dim(as.matrix(dtm1))#一共有7161个自变量

可以通过lasso先筛选出来对于星级贡献更为显著的单词,再进行多元线性回归来观察单词

threshold <- .01*length(mycorpus6)#留了出现频率至少为文本总量1%的单词
words.10 <- findFreqTerms(dtm1, lowfreq=threshold)
length(words.10)#将符合标准的单词筛选出来
dtm.10 <- DocumentTermMatrix(mycorpus6, control = list(dictionary = words.10)) #将筛选出来的单词从单词矩阵中拿出放入新的矩阵

去掉那些不常出现的单词,还剩1128个单词,但是我们只有1000条数据,自变量数量大于数据数量,运用lasso筛选出更有用的单词

data1.temp <- data.frame(data,as.matrix(dtm.10) ) #将数据变成dataframe格式,将原始数据和矩阵合并在一起,自变量和因变量放在一起 
data2 <- data1.temp[, c(11, 14:ncol(data1.temp))] #11列(data2的第一列)和14列分别为因变量和自变量(词频)

你可能感兴趣的:(R语言学习笔记:文本分析)