0
# init 
libs <- c("tm", "plyr", "class", "RTextTools", "randomForest") 
lapply(libs, require, character.only = TRUE) 

# set options 
options(stringsAsFactors = FALSE) 

# set parameters 
labels <- read.table('labels.txt') 
path <- paste(getwd(), "/data", sep="") 

# clean text 
cleanCorpus <- function(corpus) { 
    corpus.tmp <- tm_map(corpus, removePunctuation) 
    corpus.tmp <- tm_map(corpus.tmp, removeNumbers) 
    corpus.tmp <- tm_map(corpus.tmp, stripWhitespace) 
    corpus.tmp <- tm_map(corpus.tmp, content_transformer(tolower)) 
    corpus.tmp <- tm_map(corpus.tmp, stemDocument, language = "english") 
    corpus.tmp <- tm_map(corpus.tmp, removeWords, stopwords("english")) 
    return(corpus.tmp) 
} 

# build TDM 
generateTDM <- function(label, path) { 
    s.dir <- sprintf("%s/%s", path, label) 
    s.cor <- Corpus(DirSource(directory = s.dir), readerControl = list(language = "en")) 
    s.cor.cl <- cleanCorpus(s.cor) 
    s.tdm <- TermDocumentMatrix(s.cor.cl) 
    s.tdm <- removeSparseTerms(s.tdm, 0.7) 
    return(list(name = label, tdm = s.tdm)) 
} 

tdm <- lapply(labels, generateTDM, path = path) 

# attach name 
bindLabelToTDM <- function(tdm) { 
    s.mat <- t(data.matrix(tdm[["tdm"]])) 
    s.df <- as.data.frame(s.mat, stringsAsFactors = FALSE) 
    s.df <- cbind(s.df, rep(tdm[["name"]], nrow(s.df)), row.names = NULL) 
    colnames(s.df)[ncol(s.df)] <- "targetlabel" 
    return(s.df) 
} 

labelTDM <- lapply(tdm, bindLabelToTDM) 

# stack 
tdm.stack <- do.call(rbind.fill, labelTDM) 
tdm.stack[is.na(tdm.stack)] <- 0 

# hold-out 
train.idx <- sample(nrow(tdm.stack), ceiling(nrow(tdm.stack) * 0.7)) 
test.idx <- (1:nrow(tdm.stack)) [- train.idx] 

tdm.lab <- tdm.stack[, "targetlabel"] 
tdm.stack.nl <- tdm.stack[, !colnames(tdm.stack) %in% "targetlabel"] 

train <- tdm.stack[train.idx, ] 
test <- tdm.stack[test.idx, ] 

train$targetlabel <- as.factor(train$targetlabel) 
label.rf <- randomForest(targetlabel ~ ., data = train, ntree = 5000, mtry = 15, importance = TRUE) 

Я пытаюсь использовать класс classfication для текстовых файлов с использованием алгоритмов randomForest. Ошибка, которую я получаю, вероятно, из-за последней или второй последней строки.randomForest in R object не найден Ошибка

Error in eval(expr, envir, enclos) : object '∗' not found 

tdm.stack содержит столбцы с именами в виде слов, найденных в документе, и значения их ячеек в качестве их частоты. В последнем столбце содержится значение класса.

Я пробовал все, что я не могу выяснить, проблема. Пожалуйста помоги.

+0

Можем ли мы взглянуть на ваш текстовый файл? – erasmortg

+0

текстовые файлы являются исследовательскими статьями от arxiv, которые я преобразовал из pdf в txt с помощью xpdf. Я пытаюсь классифицировать их в своих конкретных областях, таких как cs.AI или cs.CV и т. д. Я только классифицирую их как один класс, так что это не многоклассная классификация классов, а multi-класс. и мой набор данных также отображается на один класс на txt. В общей сложности 29 классов. – abhinav

+0

Мне кажется, что вы пытаетесь классифицировать по-английски, но сталкиваются с некоторыми нестандартными символами (возможно, именами). Если да, можете взглянуть на это? http://stackoverflow.com/questions/18153504/removing-non-english-text-from-corpus-in-r-using-tm – erasmortg

ответ

0

Ошибка была вызвана присутствием символов не ASCII в моих корпусах. я добавил эту линию к моей cleanCorpus функции для удаления не-ASCII символы

corpus.tmp <- tm_map(corpus.tmp, function(x) iconv(x, "latin1", "ASCII", sub="")) 

Это решило проблему.

Смежные вопросы