(Windows 7/R phiên bản 3.0.1)Lỗi cố gắng để đọc một PDF bằng cách sử readPDF từ gói tm
Dưới các lệnh và các lỗi dẫn đến:
> library(tm)
> pdf <- readPDF(PdftotextOptions = "-layout")
> dat <- pdf(elem = list(uri = "17214.pdf"), language="de", id="id1")
Error in file(con, "r") : cannot open the connection
In addition: Warning message:
In file(con, "r") :
cannot open file 'C:\Users\Raffael\AppData\Local\Temp
\RtmpS8Uql1\pdfinfo167c2bc159f8': No such file or directory
Làm thế nào để giải quyết vấn đề này ?
EDIT Tôi
(Theo đề nghị của Ben và mô tả here)
tôi tải Xpdf sao chép phiên bản 32bit để C:\Program Files (x86)\xpdf32
và phiên bản 64bit để C:\Program Files\xpdf64
Các biến môi trường pdfinfo
và pdftotext
đang đề cập đến thực thi hoặc 32bit (thử nghiệm với R 32bit) hoặc 64bit tương ứng (thử nghiệm với R 64bit)
EDIT II
Một quan sát rất khó hiểu là bắt đầu từ một phiên mới (tm không được tải) lệnh cuối cùng một mình sẽ tạo ra lỗi:
> dat <- pdf(elem = list(uri = "17214.pdf"), language="de", id="id1")
Error in file(con, "r") : cannot open the connection
In addition: Warning message:
In file(con, "r") :
cannot open file 'C:\Users\Raffael\AppData\Local\Temp\RtmpKi5GnL
\pdfinfode8283c422f': No such file or directory
Tôi không hiểu điều này chút nào vì biến chức năng không phải là được định nghĩa bởi tm.readPDF. Dưới đây bạn sẽ thấy hàm pdf đề cập đến "một cách tự nhiên" và những gì được trả về bởi tm.readPDF:
> pdf
function (elem, language, id)
{
meta <- tm:::pdfinfo(elem$uri)
content <- system2("pdftotext", c(PdftotextOptions, shQuote(elem$uri),
"-"), stdout = TRUE)
PlainTextDocument(content, meta$Author, meta$CreationDate,
meta$Subject, meta$Title, id, meta$Creator, language)
}
<environment: 0x0674bd8c>
> library(tm)
> pdf <- readPDF(PdftotextOptions = "-layout")
> pdf
function (elem, language, id)
{
meta <- tm:::pdfinfo(elem$uri)
content <- system2("pdftotext", c(PdftotextOptions, shQuote(elem$uri),
"-"), stdout = TRUE)
PlainTextDocument(content, meta$Author, meta$CreationDate,
meta$Subject, meta$Title, id, meta$Creator, language)
}
<environment: 0x0c3d7364>
Rõ ràng là không có sự khác biệt - vậy tại sao lại sử dụng readPDF?
EDIT III
Các tập tin pdf nằm ở đây: C:\Users\Raffael\Documents
> getwd()
[1] "C:/Users/Raffael/Documents"
EDIT IV
hướng dẫn đầu tiên trong pdf()
là một lời kêu gọi tm:::pdfinfo()
- và có lỗi gây ra trong vòng vài dòng đầu tiên:
> outfile <- tempfile("pdfinfo")
> on.exit(unlink(outfile))
> status <- system2("pdfinfo", shQuote(normalizePath("C:/Users/Raffael/Documents/17214.pdf")),
+ stdout = outfile)
> tags <- c("Title", "Subject", "Keywords", "Author", "Creator",
+ "Producer", "CreationDate", "ModDate", "Tagged", "Form",
+ "Pages", "Encrypted", "Page size", "File size", "Optimized",
+ "PDF version")
> re <- sprintf("^(%s)", paste(sprintf("%-16s", sprintf("%s:",
+ tags)), collapse = "|"))
> lines <- readLines(outfile, warn = FALSE)
Error in file(con, "r") : cannot open the connection
In addition: Warning message:
In file(con, "r") :
cannot open file 'C:\Users\Raffael\AppData\Local\Temp\RtmpquRYX6\pdfinfo8d419174450': No such file or direc
Rõ ràng tempfile()
chỉ đơn giản là không tạo ra một tập tin.
> outfile <- tempfile("pdfinfo")
> outfile
[1] "C:\\Users\\Raffael\\AppData\\Local\\Temp\\RtmpquRYX6\\pdfinfo8d437bd65d9"
Thư mục C:\Users\Raffael\AppData\Local\Temp\RtmpquRYX6
tồn tại và giữ một số tệp nhưng không có tên nào là pdfinfo8d437bd65d9
.
Bạn đã định cấu hình pdf2txt 'PATH' đúng chưa? Xem tại đây để biết chi tiết: https://stat.ethz.ch/pipermail/r-help/2008-November/180201.html – Ben
vui lòng xem câu hỏi đã chỉnh sửa – Raffael