R: Добавить несколько строк в фрейм данных внутри цикла for - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть файлы PDF, которые я сделал на этих страницах википедии (например):

https://en.wikipedia.org/wiki/AIM-120_AMRAAM

https://en.wikipedia.org/wiki/AIM-9_Sidewinder

У меня есть список ключевых слов IЯ хочу найти в документе и извлечь предложения, в которых они появляются.

keywords <- c("altitude", "range", "speed")

Я могу вызвать файл, извлечь текст из PDF, вытащить предложения с ключевыми словами из PDF.Это работает, если я делаю это с каждым из ключевых слов индивидуально, но когда я пытаюсь сделать это в цикле, я продолжаю получать эту проблему, где строки не добавляются.Вместо этого он почти выполняет команду cbind, а затем выдается сообщение о количестве столбцов.Вот мой код и любая помощь, которую вы можете предоставить относительно того, что я могу сделать, чтобы сделать эту работу, очень ценится.

Как заставить строки правильно добавляться и отображаться в одном файле для каждого PDF-файла?

pdf.files <- list.files(path = "/path/to/file", pattern = "*.pdf", full.names = FALSE, recursive = FALSE)
for (i in 1:length(pdf.files)) {
    for (j in 1:length(keywords)) {
        text <- pdf_text(file.path("path", "to", "file", pdf.files[i]))
        text2 <- tolower(text)
        text3 <- gsub("\r", "", text2)
        text4 <- gsub("\n", "", text3)
        text5 <- grep(keywords[j], unlist(strsplit(text4, "\\.\\s+")), value = TRUE)
    }
    temp <- rbind(text5)
    assign(pdf.files[i], temp)
}

После того, как я получу строки для правильного добавления, следующим шагом будет добавление ключевых слов.в качестве переменной слева от извлеченных предложений.Пример идеального вывода:

keywords   sentence

altitude   sentence1.1
altitude   sentence1.2
range      sentence2.1
range      sentence2.2
range      sentence2.3
speed      sentence3.1
speed      sentence3.2

Будет ли это сделано также в цикле или в виде отдельной функции?

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 19 сентября 2018

Хорошо, так что потребовалось некоторое реальное мышление, но я заставил его работать, и это не красиво, но он выполняет свою работу:

# This first part initializes the files to be written to
files <- list.files(path = "/path/to/file", pattern = "*.*", full.names = FALSE, recursive = FALSE)
for (h in 1:length(files)) {
    temp1 <- data.frame(matrix(ncol = 2, nrow = 0))
    x <- c("Title", "x")
    colnames(temp1) <- x
    write.table(temp1, paste0("/path/to/file", tools::file_path_sans_ext(files[h]), ".txt"), sep = "\t", row.names = FALSE, quote = FALSE)
}
# This next part fills in the files with the sentences
pdf.files <- list.files(path = "/path/to/file", pattern = "*.pdf", full.names = FALSE, recursive = FALSE)
for (i in 1:length(pdf.files)) {
    for (j in 1:length(keywords)) {
        text <- pdf_text(file.path("path", "to", "file", pdf.files[i]))
        text2 <- tolower(text)
        text3 <- gsub("\r", "", text2)
        text4 <- gsub("\n", "", text3)
        text5 <- as.data.frame(grep(keywords[j], unlist(strsplit(text4, "\\.\\s+")), value = TRUE))
        colnames(text5) <- "x"
        if (nrow(text5) != 0) {
            title <- as.data.frame(keywords[j])
            colnames(title) <- "Title"
            temp <- cbind(title, text5)
            temp <- unique(temp)
            write.table(temp, paste0("/path/to/file", tools::file_path_sans_ext(pdf.files[i]), ".txt"), sep = "\t", row.names = FALSE, quote = FALSE, col.names = FALSE, append = TRUE)
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...