web-dev-qa-db-ja.com

PDFファイルからRにデータを読み込む

それも可能ですか!?!

データベースにインポートする必要があるレガシーレポートがたくさんあります。ただし、それらはすべてPDF形式です。 PDFを読むことができるRパッケージはありますか?それともコマンドラインツールに任せるべきですか?

レポートはExcelで作成されてからPDF化されたため、規則的な構造ですが、多くの空白の「セル」があります。

49
Justin

データを抽出することを望んでいる可能性のある他の人への警告:PDFはフォーマットではなく、コンテナです。元のドキュメントにテキストのビットマップ画像または場合によっては実際のテキストが含まれていない場合私が想像できるよりもthingsいものでさえ、OCR以外はあなたを助けることができません。

その上、私の悲しい経験では、PDF docsがすべて同じ動作をするアプリであるという保証はありません。そのため、テーブル内のデータが望ましい順序で読み出される場合とされない場合があります(ドキュメントの作成方法の結果として)。注意してください。

おそらく、数人の大学院生にデータを転記してもらう方が良いでしょう。安いです:-)

21
Carl Witthoft

だから...これはかなり複雑なテーブルでも私を近づけます。

bmi pdf からサンプルPDFをダウンロードします

library(tm)

pdf <- readPDF(PdftotextOptions = "-layout")

dat <- pdf(elem = list(uri='bmi_tbl.pdf'), language='en', id='id1')

dat <- gsub(' +', ',', dat)
out <- read.csv(textConnection(dat), header=FALSE)
31
Justin

PDFからテキストを取得するための現在のパッケージdu jourpdftools (上記のRpopplerの後継、 )、Linux、Windows、およびOSXで正常に動作します。

install.packages("pdftools")
library(pdftools)
download.file("http://arxiv.org/pdf/1403.2805.pdf", "1403.2805.pdf", mode = "wb")
txt <- pdf_text("1403.2805.pdf")

# first page text
cat(txt[1])

# second page text
cat(txt[2])
9
Ben

新しい(2015-07)Rpopplerパッケージを使用することもできます(現在)。

Rpoppler::PDF_text(file)

3つの関数が含まれています(実際には4つですが、1つはPDFオブジェクト)へのptrを取得するだけです):

  • PDF_fonts PDFフォント情報
  • PDF_info PDFドキュメント情報
  • PDF_text PDFテキスト抽出

(新しい検索者がパッケージを見つけるのに役立つ回答として投稿します)。

6
hrbrmstr

per zx8754 ...作業ディレクトリにあるpdftotext.exeを使用してWin7で次のように動作します。

library(tm)
uri = 'bmi_tbl.pdf'
pdf = readPDF(control = list(text = "-layout"))(elem = list(uri = uri),
                                                language = "en", id = "id1")   
3
Paul McGee