データ入力ジョブの生産性を向上させる良い方法を見つけようとしています。
私がやろうとしているのは、PDFからデータをスクレイピングしてExcelに入力する方法です。
具体的には、私が扱っているデータは、食料品店のチラシからのものです。現状では、チラシのすべての取引を手動でデータベースに入力する必要があります。チラシのサンプルは http://weeklyspecials.safeway.com/customer_Frame.jsp?drpStoreID=1551 です。
私がやろうとしていることは、製品、価格、および事前定義されたオプション(ポイントカード、クーポン、バラエティの選択など)の列を用意することです。
何か助けていただければ幸いです。具体的にする必要がある場合はお知らせください。
特定のPDFOPにリンクされているを見た後、これは典型的な表形式を完全に表示しているわけではないこと。
「セル」内には多くの画像が含まれていますが、セルがすべて厳密に垂直または水平に配置されているわけではありません。
したがって、これは「ナイス」なテーブルでもありませんが、非常に醜く扱いにくいテーブルです...
そうは言っても、追加する必要があります:
標準PDFは、ページに描画する semantics についてのヒントを提供していません。構文が提供する唯一の違いは、ベクトル要素(線、塗りつぶし、...)の違いです。 )、画像、テキスト。
文字が表の一部であったり、行の一部であったり、孤独であったりしても、PDFソースコードを解析することによって、他の点では空の領域内の単一の文字をプログラムで認識することは簡単ではありません。
PDFファイル形式が抽出可能な構造化データのホスティングに適しているとは考えられない理由についての背景情報、この記事を参照してください:
ドキュメントのドルの更新がなぜ難しいのか(ProPublica-Website)
上記を述べたので、これを追加しましょう:
PDFから表形式のデータを抽出するために週ごとに次第に向上する驚くべきオープンソースのツールファミリ(スキャンされたページでない限り)-何が矛盾するか私の紹介パラグラフで言った! -チェックアウトTabulaPDF次のリンクを参照してください。
Tabula-ExtractorはRubyで書かれています。バックグラウンドでは、Javaで記述されたPDFBoxと他のいくつかのサードパーティのライブラリを利用します。実行するには、Tabula-ExtractorにJRuby-1.7がインストールされている必要があります。
私は、GitHubソースコードリポジトリから直接、「最先端」バージョンのTabula-Extractorを使用しています。私のシステムにはJRuby-1.7.4_0がすでに存在しているので、それを機能させるのは非常に簡単でした。
mkdir ~/svn-stuff
cd ~/svn-stuff
git clone https://github.com/tabulapdf/tabula-extractor.git git.tabula-extractor
このGitクローンにはすでに必要なライブラリが含まれているため、PDFBoxをインストールする必要はありません。コマンドラインツールは/bin/
サブディレクトリ。
コマンドラインオプションの確認:
~/svn-stuff/git.tabula-extractor/bin/tabula -h
Tabula helps you extract tables from PDFs
Usage:
tabula [options] <pdf_file>
where [options] are:
--pages, -p <s>: Comma separated list of ranges, or all. Examples:
--pages 1-3,5-7, --pages 3 or --pages all. Default
is --pages 1 (default: 1)
--area, -a <s>: Portion of the page to analyze
(top,left,bottom,right). Example: --area
269.875,12.75,790.5,561. Default is entire page
--columns, -c <s>: X coordinates of column boundaries. Example
--columns 10.1,20.2,30.3
--password, -s <s>: Password to decrypt document. Default is empty
(default: )
--guess, -g: Guess the portion of the page to analyze per page.
--debug, -d: Print detected table areas instead of processing.
--format, -f <s>: Output format (CSV,TSV,HTML,JSON) (default: CSV)
--outfile, -o <s>: Write output to <file> instead of STDOUT (default:
-)
--spreadsheet, -r: Force PDF to be extracted using spreadsheet-style
extraction (if there are ruling lines separating
each cell, as in a PDF of an Excel spreadsheet)
--no-spreadsheet, -n: Force PDF not to be extracted using
spreadsheet-style extraction (if there are ruling
lines separating each cell, as in a PDF of an Excel
spreadsheet)
--silent, -i: Suppress all stderr output.
--use-line-returns, -u: Use embedded line returns in cells. (Only in
spreadsheet mode.)
--version, -v: Print version and exit
--help, -h: Show this message
OPのモンスターPDFからこの醜いテーブルを抽出する trying すらしません。冒険心を十分に感じているこれらの読者への練習問題として...
代わりに、「ニース」テーブルを抽出する方法をデモします。 公式PDF-1.7仕様から651〜653ページを取得します。ここではスクリーンショットで示しています。
私はこのコマンドを使用しました:
~/svn-stuff/git.tabula-extractor/bin/tabula \
-p 651,652,653 -g -n -u -f CSV \
~/Downloads/pdfs/PDF32000_2008.pdf
生成されたCSVをLibreOffice Calcにインポートすると、スプレッドシートは次のようになります。
私にとってこれは、3つの異なるPDFページに渡ったテーブルの完全な抽出のように見えます。(テーブルセル内で使用された改行でさえ、スプレッドシートに入れられました。)
これはASCiinemaのスクリーンキャストです(これもダウンロードでき、Linux/MacOSX/Unixターミナルでローカルで再生できますasciinema
コマンドラインツールのヘルプ)、主なtabula-extractor
: