2017-06-11 13 views
1

現在、多くのpdfファイルをデータフレームに読み込む関数を作成しようとしています。私の最終的な目標は、pdfファイルから特定の情報を読み取り、各行の保険プラン名と個々のプラン価格、家族計画価格など必要な情報で構成される列を含むdata.frameに変換することです。 answer given by someone for a similar question in the pastに続いています。しかし、私は間違いを続けている。ここに私が練習している2つの異なるファイル(12)へのリンクがあります。ここでpdfファイルをdata.framesに変換する

は、以下の私のコードとエラー、次のとおりです。このアプローチの前に

PDFtoDF = function(file) { 

    dat = readPDF(control=list(text="-layout"))(elem=list(uri=file), 
               language="en", id="id1") 
    dat = c(as.character(dat)) 

    dat = gsub("^ ?([0-9]{1,3}) ?", "\\1|", dat) 

    dat = gsub("(, HVOL)","\\1 ", dat) 
    dat = gsub(" {2,100}", "|", dat) 

    excludeRows = lapply(gregexpr("\\|", dat), function(x) length(x)) != 6 
    write(dat[excludeRows], "rowsToCheck.txt", append=TRUE) 

    dat = dat[!excludeRows] 

    dat = read.table(text=dat, sep="", quote="", stringsAsFactors=FALSE) 
    names(dat) = c("Plan", "Individual", "Family") 
    return(dat) 
} 

files <- list.files(pattern = "pdf$") 

df = do.call("rbind", lapply(files, PDFtoDF)) 


    Error in read.table(text = dat, sep = "", quote = "", stringsAsFactors = 
    FALSE) : no lines available in input 

、私はpdftoolsパッケージや正規表現を使用してきました。このアプローチは、最上位にある計画名などのドキュメントの一部のパターンを明確にすることが困難な点を除いて機能しました。私は、私が今使っている方法論が、私のためにテキストを別々の文字列に抽出するので、助けになると思っていました。はい、それはREADTEXTパッケージと、その簡単です

require(readtext) 
df <- readtext("*.pdf") 

答えて

1

はここで最高の答えです!

+0

pdfのテキスト用に作成した "text"変数を出力すると、その変数の一部がコンソールに表示され、と表示されます。これは、pdfの情報はすべて保存されていますが、長すぎてコンソールに表示できないということですか? これは方法で動作する可能性があります - ありがとう!その変数を複数の変数に分割し、必要な情報を各自のセル/変数に入れる方法を考え出すことができます。私は、それを多くのpdfにするためにループを作る方法を学ぶのは難しいことではないと思います。 –

+0

これは単なるdata.frameであり、textカラムは(あなたの例では) 'df $ text'と呼ばれています。しかし、** readtext **パッケージは、** tibble **から印刷メソッドを借用しているので、コンソールにオブジェクトのバージョンが表示されます。切り捨ては、印刷のためのものであり、オブジェクトに対して行われたものではありません。 –

+0

私は助けに感謝します!私の最終的な目標は、価格設定のデータだけでなく、データベースに格納される各pdfの特定の言い回し/文章を取得することです。有益なこのプロジェクトまたはパッケージの最適な方法論に関する助言をお持ちですか?私は純粋に基本的な正規表現を使用してパターンを見つけ、それらを必要な変数に分割してから、列変数に変換することが最良のアプローチではないかもしれないと心配しています –

関連する問題