文本分析
使用的數(shù)據(jù):yelp_subset.csv
library (data.table)
data.all = fread ('yelp_subset.csv', stringsAsFactors = FALSE)
dim (data.all)
data = data.all [1:100,]#取前一百行來分析
目標(biāo):利用評(píng)論預(yù)測(cè)打分
為了簡(jiǎn)化,把星級(jí)分為兩類:1-3星為0,4-5星為1
data$rating = c(0)#做出新的rating列并賦值為0
data$rating [data$stars >= 4] = 1#大于等于四星的評(píng)價(jià)賦值為1
data$rating = as.factor (data$rating)#變?yōu)轭悇e變量
table (data$rating)/nrow (data)#查看好壞點(diǎn)評(píng)的數(shù)量
data1.text <- data$text#取出文本
print(data1.text[1:5])#看看前五段
library(tm)
library(SnowballC)
mycorpus1 <- VCorpus( VectorSource(data1.text))#轉(zhuǎn)成corpus格式
mycorpus2 <- tm_map(mycorpus1, content_transformer(tolower))#全部轉(zhuǎn)成小寫字母
mycorpus3<- tm_map(mycorpus2, removeWords, stopwords("english"))#去掉無實(shí)際意義的單詞
mycorpus4 <- tm_map(mycorpus3, removePunctuation)#去掉標(biāo)點(diǎn)符號(hào)
mycorpus5 <- tm_map(mycorpus4, removeNumbers)#去掉數(shù)字
mycorpus6 <- tm_map(mycorpus5, stemDocument, lazy = TRUE) #使用詞根
dtm1 <- DocumentTermMatrix( mycorpus6 ) #制作單詞頻率矩陣
as.matrix(dtm1[1, 1:50])#第一篇點(diǎn)評(píng)的前五十個(gè)變量,基本都是0,因?yàn)榈谝黄c(diǎn)評(píng)只有28個(gè)單詞
dim(as.matrix(dtm1))#一共有7161個(gè)自變量
可以通過lasso先篩選出來對(duì)于星級(jí)貢獻(xiàn)更為顯著的單詞,再進(jìn)行多元線性回歸來觀察單詞
threshold <- .01*length(mycorpus6)#留了出現(xiàn)頻率至少為文本總量1%的單詞
words.10 <- findFreqTerms(dtm1, lowfreq=threshold)
length(words.10)#將符合標(biāo)準(zhǔn)的單詞篩選出來
dtm.10 <- DocumentTermMatrix(mycorpus6, control = list(dictionary = words.10)) #將篩選出來的單詞從單詞矩陣中拿出放入新的矩陣
去掉那些不常出現(xiàn)的單詞,還剩1128個(gè)單詞,但是我們只有1000條數(shù)據(jù),自變量數(shù)量大于數(shù)據(jù)數(shù)量,運(yùn)用lasso篩選出更有用的單詞
data1.temp <- data.frame(data,as.matrix(dtm.10) ) #將數(shù)據(jù)變成dataframe格式,將原始數(shù)據(jù)和矩陣合并在一起,自變量和因變量放在一起
data2 <- data1.temp[, c(11, 14:ncol(data1.temp))] #11列(data2的第一列)和14列分別為因變量和自變量(詞頻)