5

(Windows 7/R バージョン 3.0.1)

コマンドと結果のエラーの下:

> 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

この問題を解決するにはどうすればよいですか?


編集私

(ベンによって提案され、ここで説明されているように)

Xpdfをダウンロードし、32 ビット版を にコピーし C:\Program Files (x86)\xpdf32 、64 ビット版 を にコピーしましたC:\Program Files\xpdf64

環境変数pdfinfopdftotextは、32 ビット (R 32 ビットでテスト済み) または 64 ビット (R 64 ビットでテスト済み) のそれぞれの実行可能ファイルを参照しています。


編集Ⅱ

非常に紛らわしい観察の 1 つは、新しいセッション (ロードされていない tm) から開始して、最後のコマンドだけでエラーが発生することです。

> 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 でまだ定義されていないため、これはまったくわかりません。以下では、関数 pdf が「自然に」および 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"

編集 IV

最初の命令pdf()は - の呼び出しtm:::pdfinfo()であり、最初の数行でエラーが発生します。

> 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()単にファイルを作成しないようです。

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

フォルダC:\Users\Raffael\AppData\Local\Temp\RtmpquRYX6は存在し、いくつかのファイルを保持していますが、名前が付けられていませんpdfinfo8d437bd65d9

4

1 に答える 1

4

興味深いことに、再起動後の私のマシンでpdfは、画像を PDF に変換する機能があります。

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

しかし、PDF ファイルをテキストとして読み取る問題に戻ると、PATH をいじるのはちょっと行き当たりばったりです (また、複数の異なるコンピューターで作業している場合は面倒です) pdf2textTony Breyal がここで説明していますsystem

あなたの場合は次のようになります(2組の引用符に注意してください):

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

*apply多くのPDFファイルがある場合、これは関数またはループで簡単に拡張できます。

于 2013-07-31T21:23:45.533 に答える