train <- read.delim('train.tsv', header= T, fileEncoding= "windows-1252",stringsAsFactors=F)
Train.tsv には、4 つの列名 Phrase、PhraseID、SentenceID、Sentiment (スケール 0 ~ 4) を持つ 1,56,060 行のテキストが含まれています。Phrase 列にはテキスト行があります。(Tm パッケージは既にロードされています) R バージョン: 3.1.2 ; OS: Windows 7、64 ビット、4 GB RAM。
> dput(head(train,6))
structure(list(PhraseId = 1:6, SentenceId = c(1L, 1L, 1L, 1L,
1L, 1L), Phrase = c("A series of escapades demonstrating the adage that what is good for the goose is also good for the gander , some of which occasionally amuses but none of which amounts to much of a story .",
"A series of escapades demonstrating the adage that what is good for the goose",
"A series", "A", "series", "of escapades demonstrating the adage that what is good for the goose"
), Sentiment = c(1L, 2L, 2L, 2L, 2L, 2L)), .Names = c("PhraseId",
"SentenceId", "Phrase", "Sentiment"), row.names = c(NA, 6L), class = "data.frame")
これは train ドキュメントの上位 6 行です。
clean_corpus <- function(corpus)
{
mycorpus <- tm_map(corpus, removeWords,stopwords("english"))
mycorpus <- tm_map(mycorpus, removeWords,c("movie","actor","actress"))
mycorpus <- tm_map(mycorpus, stripWhitespace)
mycorpus <- tm_map(mycorpus, tolower)
mycorpus <- tm_map(mycorpus, removeNumbers)
mycorpus <- tm_map(mycorpus, removePunctuation)
mycorpus <- tm_map(mycorpus, PlainTextDocument )
return(mycorpus)
}
# Build DTM
generateDTM <- function(df)
{
m <- list(Sentiment = "Sentiment", Phrase = "Phrase")
myReader <- readTabular(mapping = m)
mycorpus <- Corpus(DataframeSource(df), readerControl = list(reader = myReader))
#Code to attach sentiment label with every text line
for (i in 1:length(mycorpus))
{
attr(mycorpus[[i]], "Sentiment") <- df$Sentiment[i]
}
mycorpus <- clean_corpus(mycorpus)
dtm <- DocumentTermMatrix(mycorpus)
return(dtm)
}
dtm1 <- generateDTM(train)
ここでは、2 つの関数を作成しました。1 つはコーパスをきれいにするため、もう 1 つは DTM (Document Term Matrix) を作成するためです。また、各センチメント値をすべてのテキスト行にリンクしました。今、dtm1の寸法を使用すると; 156060 行が表示されますが、列は 0 です。
では、センチメント ラベルが添付された DTM を生成するにはどうすればよいでしょうか。