Мне нужно преобразовать 24 файла PDF в папке в файлы txt, чтобы я мог выполнить их семантический анализ. Я взглянул на это вопрос, оттуда и исходил. Однако после того, как код заработал в первый раз, я изменил некоторые вещи, и теперь я получаю следующую ошибку:
In scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
EOF within quoted string
Из-за этого то, что сохраняется в переменной bodies
в приведенном ниже коде, представляет собой просто список из 24 пробелов, и я получаю 24 пустых текстовых файла (в дополнение к 24 текстовым файлам, которые создаются путем преобразования PDF-файлов в txt) . Я не уверен, что я сделал неправильно - в какой-то момент этот код работал!
Я уже просмотрел, что смог найти по этой ошибке, но те связаны с read.csv
, и предложенные ими исправления (настройка white.space=TRUE
и quote=""
) не сработали.
Вот код (ошибка в строке 20-23):
# folder with journal articles
PDFfolder_path <- "~/Dropbox/The Egoist PDFs/PDFs"
# vector of PDF file names
PDFfiles <- list.files(path=PDFfolder_path, pattern="*.pdf", full.names=TRUE)
# location of pdftotext.exe file
converter <- "~/Widgets/PDFConverter/bin64/pdftotext"
# folder with text files
textfolder_path <- "~/Dropbox/The Egoist PDFs/textfiles"
# convert PDFs in origin folder into txt files
lapply(PDFfiles, function(i) {
system(paste(converter, paste0('"', i, '"')), wait=FALSE)
})
# it takes DropBox a bit of time to catch all of the folders
# without this we only end up with 23 txt files for some reason
Sys.sleep(.5)
txtfiles_in_PDFfolder_path <- list.files(path=PDFfolder_path, pattern="*.txt", full.names=TRUE)
# extracting only the Bodies of the articles
bodies <- lapply(txtfiles_in_PDFfolder_path, function(i){
j <- paste0(scan(i, what = character()), collapse = " ")
regmatches(j, gregexpr("(?<=Published).*?(?=Prepaid Advertisements)", j, perl=TRUE))
})
# write article-bodies into txt files
lapply(1:length(bodies), function(i){
write.table(bodies[i], file=paste(txtfiles_in_PDFfolder_path[i], "body", "txt", sep="."), quote=FALSE, row.names=FALSE, col.names=FALSE, eol=" ")
})
РЕДАКТИРОВАТЬ: Еще немного о результате переменной bodies
: результатом является список из 24, который принимает следующую форму (на консоли R Studio я не уверен, что это фактическое имя): bodys: list of 24 :Список из 1 ..$ : chr(0) :Список из 1 ..$ : chr(0) (повторяется 24 раза)
Но я не могу понять, почему это chr(0)
- я думаю, что это как-то связано с теми же вещами, которые происходят здесь - я точно не улавливаю все строки.
Я перепробовал все, что мог придумать, даже поменял readLines()
на scan()
, и посмотрел, не поможет ли это. Я даже поменял scan()
на read.table()
, но оказывается, что read.table()
сам полагается на scan
! Итак... Я застрял, и я просто работаю по кругу.
scan()
, а неreadLines()
? (Обратите внимание, что они возвращают разные векторы, но не похоже, что вам нужно разбивать по словам) - person MrFlick   schedule 07.07.2015Read 10648 items
, и стало занимать заметно больше времени. - person mlinegar   schedule 07.07.2015readLines( )
, я получилWarning message: In readLines(i) : incomplete final line found on '/Users/mlinegar/Dropbox/The Egoist PDFs/PDFs/The Egoist 2.1.1914.txt'
. Но я не уверен, что может привести к неполной финальной строке... есть идеи? - person mlinegar   schedule 07.07.2015