R: Объединение списков с метаданными CSV
У меня возникли проблемы с работой с текстовыми файлами и связанными с ними метаданными. Я могу прочитать файлы, предварительно обработать их, а затем преобразовать их в читаемый формат для пакета lda, который я использую ( используя это руководство от Sievert). Пример ниже:
#Reading the files
corpus <- file.path("Folder/Fiction/texts")
corpus <- list.files(corpus)
corpus <- lapply(corpus, readLines)
***pre-processing functions removed for space***
corp.list <- strsplit(corpus, "[[:space:]]+")
# compute the table of terms:
corpterm.table <- table(unlist(corp.list))
corpterm.table <- sort(corpterm.table, decreasing = TRUE)
***removing stopwords, again removed for space***
# now put the corpus into the format required by the lda package:
getCorp.terms <- function(x) {
index <- match(x, vocabCorp)
index <- index[!is.na(index)]
rbind(as.integer(index - 1), as.integer(rep(1, length(index))))
}
corpus <- lapply(corp.list, getCorp.terms)
На данный момент, corpus
Переменная - это список токенов документа с отдельным вектором для каждого документа, но он был отделен от пути к файлу и имени файла. Вот где начинается моя проблема: у меня есть CSV с метаданными для текстов (их имен файлов, названий, авторов, лет, жанров и т. Д.), Которые я хотел бы связать с каждым вектором токенов, чтобы легко смоделировать мою информацию по времени, полу и т. д.
Я не уверен, как это сделать, но я предполагаю, что это нужно будет делать, когда файлы читаются, а не объединяются после того, как я манипулирую текстами документа. Я полагаю, что это будет что-то вроде:
corpus.f <- file.path (stuff)
corpus <- list.files(corpus)
corpus <- lapply(corpus, ReadLines)
corpus.df <- as.data.frame(c(corpus.f,corpus))
corpus.info <- read.csv(stuff.csv)
И оттуда с помощью функции слияния или сопоставления в сочетании, чтобы связать каждый документ (или вектор токенов документа) с его правильной строкой метаданных.
1 ответ
Попробуйте перейти на это:
pth <- file.path("Folder/Fiction/texts")
fi <- list.files(pth)
corpus <- lapply(fi, readLines)
corp.list <- strsplit(corpus, "[[:space:]]+")
setNames(object = corp.list, nm = fi) -> corp.list