2016-06-30 2 views
0

Использование R {тм} пакет, я создать корпус, по обыкновению:названия документов R тм отсутствует

mycorpus <- Corpus(DirSource(folder,pattern="txt"))

Пожалуйста, обратите внимание, что я не использую переменную кодирования. В списке summary (mycorpus) перечислены имена документов. Однако после того, как ряд tm_map трансформирует:

(content_transformer(tolower),content_transformer(removeWords), stopwords("SMART"),stripWhitespace) заканчивая mycorpus<- tm_map(mycorpus, PlainTextDocument) и mydtm <- DocumentTermMatrix(mycorpus, control = list(...))

Я получаю сообщение об ошибке с inspect(mydtm[1:10, intersect(colnames(dtm), 'toyota')]), чтобы получить мою переменную выбора: Terms Docs toyota character(0) 0 character(0) 0 character(0) 0 character(0) 0 character(0) 1 character(0) 0 character(0) 0 character(0) 0 character(0) 1 character(0) 0

Имена файлов (Doc ID) имеют исчез. Любая идея, что может вызвать эту ошибку? что еще важнее, как восстановить имена документов? Большое спасибо.

ответ

0

Код ниже будет работать для одного файла. Вероятно, вы могли бы использовать что-то вроде list.files для чтения всех файлов в каталоге.
Во-первых, я бы обернул функции очистки в пользовательскую функцию. Обратите внимание на порядок, и вы должны использовать content_transformer, если функция не от tm.

clean.corpus<-function(corpus){ 
    corpus <- tm_map(corpus, removePunctuation) 
    corpus <- tm_map(corpus, stripWhitespace) 
    corpus <- tm_map(corpus, removeNumbers) 
    corpus <- tm_map(corpus, content_transformer(tolower)) 
    corpus <- tm_map(corpus, removeWords, custom.stopwords) 
    return(corpus) 
} 

Затем объединить английские слова с пользовательскими словами. Это передается как последняя часть пользовательской функции выше.

custom.stopwords <- c(stopwords('english'), 'lol', 'smh') 

doc<-read.csv('coffee.csv', header=TRUE) 

CSV-представляет собой кадр данных с колонной твитов в текстовом документе и другую колонку с идентификатором для каждого твита. Файл из моей мастерской с этим файлом - here. Теперь файл csv находится в памяти, поэтому следующий шаг - прочитать его в табличном виде с определенным отображением при создании корпуса. Здесь содержимое находится в столбце с именем text, а уникальный идентификатор - в столбце «id».

custom.reader <- readTabular(mapping=list(content="text", id="id")) 
corpus <- VCorpus(DataframeSource(doc), readerControl=list(reader=custom.reader)) 
corpus<-clean.corpus(corpus) 

Создание корпуса использует readerControl и затем один раз сделано, вы можете применить шаги предварительной обработки. Без контроля читателя пакет назначает символ 0 в качестве имени.

Содержание корпус документа 1 можно ознакомиться здесь

corpus[[1]][1] 

Вы можете просмотреть данные Corpus мета для первого документа с этим кодом

corpus[[1]][2] 

Так что я думаю, что вы необходимости использовать readTabular и readerControl в конструкции вашего корпуса независимо от источника.

0

У меня была такая же проблема, и я понял, что это произошло из-за tolower. ToLower, в отличие от removeNumbers, removePunctuation, removeWords, stemDocument, stripWhitespace не tranformations определены в тм пакета.Для того, чтобы получить список преобразований, определенных в пакете тм, который может быть непосредственно применен к мозолистого, типа:

getTransformations() 
[1] “removeNumbers” “removePunctuation” “removeWords” “stemDocument” “stripWhitespace” 

Таким образом, для того, чтобы использовать ToLower он первым должен сделать преобразование для ToLower для него для правильной обработки корпусных объектов.

docs <- tm_map(docs,content_transformer(tolower)) 

выше строка кода должна остановить файлы переименовываются в символ (0)

Тот же трюк может быть применен к любой функции R для работы с корпусов. Например, для gsub применяется следующий синтаксис:

docs <- tm_map(docs, content_transformer(gsub), pattern = “internt”, replacement = “internet”) 
Смежные вопросы