GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

WZBSocialScienceCenter

pdftabextract – PDFファイルからテーブルを抽出するためのツールセットで、スキャンされたドキュメント上でデータマイニング(OCR処理)を行います

投稿日:

PDFファイルからテーブルを抽出するためのツールセットで、スキャンされたドキュメント上でデータマイニング(OCR処理)を行います。 https://datascience.blog.wzb.eu/2017/…

pdftabextract – データマイニング(OCR処理)PDF用の一連のツール

2016年7月/ 2017年2月Markus Konrad markus.konrad@wzb.eu / ベルリン社会科学センター

重要な初期ノート

時々、私はPDFから表データを抽出しようとしている人からのメールを受け取ります。 私はそれでいいですし、私は助けてうれしいです。 しかし、 pdftabextractは、提供されたサンプルをドキュメント上で実行するだけで、必要なデータを自動的に抽出する、ある種のマジックワンドだと思う人もいます。 これは、ほとんどの場合、動作しません。 私はあなたがこのソフトウェアを使用する前に、私に電子メールを書く前に考慮すべきいくつかの事柄を明確にしたいと思います:

  1. pdftabextractはOCR(光学式文字認識)ソフトウェアではありません それは、OCR情報 、すなわち、スキャンされた画像と認識されたテキストの両方を含む「サンドイッチPDF」を有するスキャンされたページ必要とする。 あなたはtesseractやOCRのためのABBYY Finereaderのようなソフトウェアが必要です。 「サンドイッチPDF」があるかどうかを確認するには、PDFを開いて「すべて選択」を押します。 これは、通常、OCR処理されたテキスト情報を明らかにする。
  2. pdftabextractは、他のすべてのものがPDFから表データを抽出できないときの最後の手段です。 これを試す前に、あなた自身に次の質問をする必要があります:
  • 実際に他の方法はありませんか /データが利用可能な他の形式はありませんか?
  • ABBYY Finereaderのような特殊なOCRソフトウェアでテーブルを検出し抽出することができますか?(これは、大きなページのサンプルでこれを試す必要があります – Finereaderのテーブル認識がしばしば信頼できないことがわかりました)
  • 認識されたテキストをそのままPDFから抽出して解析することは可能ですか? poppler-utilsの pdftotextツールを使ってみてください 。このパッケージは、ほとんどのLinuxディストリビューションの一部であり、HomebrewまたはMacPorts経由でOSXでも利用できます: pdftotext -layout yourdocument.pdf これにより、認識されたテキスト(OCRから)を含むyourdocument.txtファイルが作成され、テーブルにうまく似たレイアウトが作成されます。 しばしば、これは直接(例えば、 正規表現を使ったPythonスクリプトを使って)直接解析することができます。 解析できない場合(例えば、テキスト内で列がうまく分離されていない場合、各ページの表は構文解析に共通の構造を作り出すにはあまりにも異なっているため、ページが傾いたり回転したりする)pdftabextractはあなたのための適切なソフトウェアです。
  1. pdftabextractは一連のツールです。 したがって、特定のドキュメントには適しているが他のドキュメントには適していない機能が含まれており、多くの機能ではドキュメントのレイアウト、スキャン品質などに依存するパラメータを設定する必要があります。 サンプルスクリプトをデータで盲目的に使うことはできません。 あなたの文書でうまく動作するためには、パラメータを調整する必要があります。 以下に、これらのツールとそのパラメータに関するヒントと説明を示します。

前書き

このリポジトリには、(OCR処理された)PDFファイルから表データを抽出する目的で、Python 3で書かれた一連のツールが含まれています。 これらのファイルを処理するには、 pdf2xml形式のXMLファイルに変換する必要があります。 これは非常に簡単です。下記のセクションを参照してください。

モジュールの概要

その後、必要に応じてpdf2xml-viewerツールで抽出したテキストボックスを表示することができます。 pdf2xml形式はcommonサブモジュールの関数で読み込まれ、解析されます。 imgprocモジュールを使用して、スキャンされたイメージ内で行を検出することができます。 ページが傾いたり回転したりした場合、これはimgprocメソッドとimgproc関数で検出および修正できます。 行またはテキストボックスの位置は、 clusteringモジュールを使用してテーブルの列および行を検出するためにクラスタ化できます。 列と行が正常に検出された場合、 extractモジュールを使用してページグリッドに変換することができ、そのモジュールの内容をfit_texts_into_gridを使用して抽出できます。 また、 extractたデータをpandas DataFrameとしてエクスポートすることもできます。

スキャンしたページがダブルページの場合は、それらをsplitpagesページで前処理する必要があります。

例とチュートリアル

豊富なチュートリアルがここ掲載され、例に含まれるJupyter Notebookから派生しています。 examplesディレクトリにはさらに多くのユースケースとデモンストレーションがあります。

特徴

  • pdf2xml形式のファイルの読み込みと解析( commonモジュール)
  • 分割スキャンされたダブルページ( splitpagesモジュール)
  • 画像処理( imgprocモジュール)によってスキャンされたページの行を検出する
  • ページの回転や傾きを検出して修正する( imgproctextboxesモジュール)
  • 列および行の位置を見つけるために検出された行またはテキストボックス位置のクラスタを検出する( clusteringモジュール)
  • 表形式のデータを抽出し、それをpandas DataFrame(CSV、Excelなどへのエクスポートを可能にする)に変換する(モジュールをextractする)

インストール

このパッケージはPyPIで利用でき、 pip経由でpip install pdftabextractことができます: pip install pdftabextract

要件

要件はrequirement.txtにリストされており、pipを使用すると自動的にインストールされます。

Python 3のみ – Python 2はサポートされていません。

PDFファイルをpdf2xml形式のXMLファイルに変換する

poppler-utilsを使ってPDFを変換する必要があります。このパッケージは、ほとんどのLinuxディストリビューションの一部であり、HomebrewまたはMacPorts経由でOSXでも利用できます。 このパッケージから、 pdftohtmlというコマンドが必要で、ターミナルを使って次のようにpdf2xml形式のXMLファイルを作成することができます:

pdftohtml -c -hidden -xml input.pdf output.xml

引き数input.pdfoutput.xmlはそれぞれ入力PDFファイルとpdf2xml形式の作成XMLファイルです。 OCR処理( “サンドイッチ”)PDFを扱うときは、 隠しパラメータを指定することが重要です。 さらに、パラメータ-fn-lnを追加して、変換するページ範囲のみを設定することもできます。

使用方法と使用例

使用方法や背景情報については、 データマイニングのPDFに関する私のブログ記事の記事を読んでください。

サンプル入出力の次のイメージを参照してください。

元のページ

pdf2xml-viewerで表示されたpdf2xmlファイルの生成(および歪曲)

検出された行

縦線(列)の検出されたクラスタは、

pdf2xml-viewerで生成されたページグリッド

抽出されたデータの抜粋

ライセンス

Apache License 2.0 LICENSEファイルを参照してください。







-WZBSocialScienceCenter
-, , , , , ,

執筆者: