2013-07-31 7 views
5

(विंडोज 7/आर संस्करण 3.0.1)टीएम पैकेज से readPDF का उपयोग कर

आदेशों नीचे और जिसके परिणामस्वरूप त्रुटि एक पीडीएफ पढ़ने का प्रयास करते समय त्रुटि ?


संपादित मैं

(बेन ने सुझाव दिया और here बताया गया है)

मैं Xpdf C:\Program Files\xpdf64

को C:\Program Files (x86)\xpdf32 के लिए 32 बिट संस्करण और 64 बिट संस्करण की नकल की डाउनलोड किया पर्यावरण चर pdfinfo और pdftotext संबंधित निष्पादनयोग्य या तो 32 बिट (आर 32 बिट के साथ परीक्षण) या 64 बिट के लिए बात कर रहे हैं (आर 64 बिट के साथ परीक्षण)


संपादित द्वितीय

एक बहुत भ्रमित अवलोकन एक से शुरू कि है ताजा सत्र (टीएम लोड नहीं) अकेले पिछले आदेश त्रुटि उत्पन्न करेगा:

> 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 

मैं इस सब पर समझ में नहीं आता क्योंकि समारोह चर नहीं है अभी तक tm.readPDF द्वारा परिभाषित किया गया है। नीचे आप मिल जाएगा समारोह पीडीएफ करने के लिए "स्वाभाविक रूप से" और को संदर्भित करता है क्या 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> 

जाहिर है वहाँ कोई अंतर नहीं है - तो क्यों उपयोग readPDF बिल्कुल?


संपादित तृतीय

pdf फ़ाइल यहाँ स्थित है: C:\Users\Raffael\Documents

> getwd() 
[1] "C:/Users/Raffael/Documents" 

संपादित चतुर्थ

में सबसे पहले अनुदेश

> 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 

जाहिर tempfile() बस एक फ़ाइल बनाने नहीं करता है: और वहाँ त्रुटि पहली कुछ पंक्तियों के भीतर कारण होता है - 43,583,210 tm:::pdfinfo() के लिए एक कॉल है।

> outfile <- tempfile("pdfinfo") 
> outfile 
[1] "C:\\Users\\Raffael\\AppData\\Local\\Temp\\RtmpquRYX6\\pdfinfo8d437bd65d9" 

फ़ोल्डर C:\Users\Raffael\AppData\Local\Temp\RtmpquRYX6 मौजूद है और कुछ फ़ाइलों को रखती है, लेकिन कोई भी pdfinfo8d437bd65d9 नाम पर है।

getAnywhere(pdf) 
A single object matching ‘pdf’ was found 
It was found in the following places 
    package:grDevices 
    namespace:grDevices [etc.] 

लेकिन वापस, पाठ के रूप में पीडीएफ फाइलों में पढ़ने नगण्य साथ पथ है की समस्या के लिए:

+0

क्या आपको अपना पीडीएफ 2txt 'पथ 'सही तरीके से कॉन्फ़िगर किया गया है? विवरण के लिए यहां देखें: https://stat.ethz.ch/pipermail/r-help/2008-November/180201.html – Ben

+0

कृपया, संपादित प्रश्न – Raffael

उत्तर

4

Intersting, मेरे मशीन पर एक नई शुरुआत pdf के बाद एक समारोह एक पीडीएफ के लिए एक छवि परिवर्तित करने के लिए है थोड़ा हिट-एंड-मिस (और यदि आप कई अलग-अलग कंप्यूटरों पर काम करते हैं तो परेशान), इसलिए मुझे लगता है कि Tony Breyal describes here के रूप में pdf2text पर कॉल करना सबसे सरल और सुरक्षित तरीका है।

आपके मामले में यह होगा (ध्यान दें उद्धरण के दो सेट):

system(paste('"C:/Program Files/xpdf64/pdftotext.exe"', 
      '"C:/Users/Raffael/Documents/17214.pdf"'), wait=FALSE) 

यह आसानी से एक *apply समारोह या पाश के साथ बढ़ाया जा सकता है आप कई पीडीएफ फाइलों है।

+0

सरल कार्यवाही पर एक नज़र डालें। क्यों नहीं। ऐसा लगता है कि कई मुद्दे हैं। सबसे पहले tempfile फ़ाइल नहीं बना रहा है। मैं file.create का उपयोग करके इसे ओवरराइट करता हूं और फिर आगे के मुद्दों का सामना करता हूं। यह परेशानी के लायक नहीं है। – Raffael

+0

हां, खेद है कि यह आपके द्वारा प्रकट की गई जटिलताओं को संबोधित नहीं करता है, लेकिन यह काम पूरा हो जाता है। – Ben

संबंधित मुद्दे