2017-09-17 6 views
2

私の会社は、各クライアントのポリシー/サービスの要約をpdf形式のファイルで文書化しています。これらのファイルは、毎年大きなデータセットに結合されます。クライアントごとに1つの行と列は、クライアントのドキュメント内の変数です。数千のファイルがあり、それぞれに約20-30個の変数があります。クライアントを表す各行でdata.frameを作成し、各クライアントの変数をpdfドキュメントから取得することで、このプロセスを自動化したいと考えています。ディレクトリ内のpdfファイル名ですべてのクライアントのリストまたはdata.frameを作成できますが、各ドキュメントに必要な各変数を取得するループを作成する方法はわかりません。私は現在、私が決めることができない2つの異なる方法を持っています。また、それぞれのクライアント文書に必要な変数を取得するループの助けも必要です。私のコードと2つのモックファイルへのリンクを以下に示します。どんな助けもありがとう!各文書から変数を抽出し、適切な列に配置するループ

ファイル:Client 1Client 2

方法1:pdftools

第一の方法の利点は、それが別の要素にベクターに全体PDF、各ページを抽出します。これにより、文字列や変数を簡単に取得できます。しかし、それをループして各クライアントから情報を引き出し、それを各クライアントの列に適切に配置する方法を知らないでください。

library(pdftools) 
library(stringr) 

Files <- list.files(path="...", pattern=".pdf") 
Files <- Files %% mutate(FR = 
    str_match(text, "\\$\\d+\\s\\Financial Reporting")) #Extract the first variable 

方法2:

このアプローチの利点は、自動的に可変の行としてファイル名でクライアントドキュメントのそれぞれについてデータベース、及びザ各PDFを作成しています。欠点は、変数内のpdf全体が、各ページをそれ自身の要素に持つことと比べて、文字列の一致と抽出をより困難にしていることです。私は各クライアントの変数を抽出し、それぞれの列に配置するループを書く方法を知らない。

DF <- readtext("directory pathway/*.pdf") 
DF <- DF %>% mutate(FR = 
        str_match(text, "\\$\\d+\\s\\Financial Reporting")) 

答えて

2

ここで私は、私はあなたが抽出任意の数値変数は、あなたがしたいと思うという仮定の下で、テキストからカンマを削除し、あなたの提案方法1.

library(pdftools) 
library(stringr) 

Files <- list.files(path="pdfs/", pattern=".pdf") 
lf <- length(Files) 

client_df <- data.frame(client = rep(NA, lf), fr = rep(NA, lf)) 
for(i in 1:lf){ 
    # extract the text from the pdf 
    f <- pdf_text(paste0("pdfs/", Files[i])) 

    # remove commas from numbers 
    f <- gsub(',', '', f) 

    # extract variables 
    client_name <- str_match(f[1], "Client\\s+\\d+")[[1]] 
    fr <- as.numeric(str_match(f[1], "\\$(\\d+)\\s+Financial Reporting")[[2]]) 

    # add variables to your dataframe 
    client_df$client[i] <- client_name 
    client_df$fr[i] <- fr 
} 

を使用して、あなたの問題を解決だと思う基本的な枠組みですいくつかの分析で数字として使用します。これにより、すべてのカンマが削除されるため、他の領域で重要な場合は、それを再考する必要があります。

また、サンプルPDFを「pdfs」というディレクトリに配置しています。

少し創造的な正規表現では、他のものを抽出することができると思います。この方法を使用すると、関心のある要素が常にすべての文書の同じページにある場合に、データを簡単にスクラップできます。 (str_match行のfの索引に注意してください)。これが役立つことを願っています!

+0

これは素晴らしい作品です - ありがとう!ループに変数を追加するには、変数を抽出する行を追加し、それをdata.frameに追加するための2行目を追加するだけですか、data.frameのサイズを調整する必要がありますか(たとえば、列)何とか? この分野(私が初めてです)は、Excelを広範囲に分析に使用しているので、このデータベースが興味深い場合、このデータベースをExcelファイルに抽出することが最終目標です。 –

+1

空のdata.frameの列、関心のある変数を抽出する行、もう1つをdata.frameに追加する3つの要素すべてを変更する必要があります。次の変数の名前がrisk_modelingの場合は、client_df

+0

あなたは非常に役に立ちました。説明する時間をとってくれてありがとう。 –

関連する問題