PDFファイルからデータを抽出する必要がある場面は多々ありますが、その作業は一般的には手間がかかるものです。
しかし、Pythonのpdfplumberライブラリを使用することで、この作業を効率的かつ正確に行うことができます。
この記事では、pdfplumberライブラリの基本的な使い方からテキストデータの抽出方法までを解説します。
- Pythonライブラリpdfplumberの概要
- PDF操作自動化システムのテストで使えるサンプルファイルの入手先
- PDFファイルからpdfplumberを使ってテキストデータを抽出するためのPythonコード
pdfplumberとは
pdfplumber
はPython用のPDF処理ライブラリで、PDFファイルからテキスト、テーブル、フォーム、および画像データを簡単に抽出できます。
内部的にはpdf2image
とPyPDF2
ライブラリを使用しており、PDFの各ページを画像としてレンダリングした後、テキストやテーブルを抽出します。
このライブラリは特にテーブルデータの抽出に優れており、座標や領域を指定してデータを取得することも可能です。
また、PDF内の特定のオブジェクトや要素に対する高度なクエリもサポートしています。
簡単なインストールと直感的なAPIにより、PDFデータの抽出や解析が容易に行えます。
ライブラリのインストール
以下のコマンドをターミナルまたはコマンドプロンプトで実行してください。
pip install pdfplumber
作成したPythonコード
このPythonコードはpdfplumber
ライブラリを使用してPDFファイルからテキストデータを抽出します。
プログラム開始時にPDFファイルのパスを変数に指定し、そのファイルを開きます。次に、PDFの各ページをループで処理し、テキストデータを抽出してコンソールに出力します。
このコードは基本的なテキスト抽出に適用され、さまざまな用途でカスタマイズ可能です。
サンプルPDFファイルの入手
今回はデータ抽出の対象となるサンプルのPDFファイルとして、以下のPDFを扱うシステムの開発者向けサンプルファイルを公開されているサイトを使用します。
以下のページから150 kBの一番容量の小さいfile-sample_150kB.pdf
というファイルをあらかじめダウンロードし、作成するPythonファイルと同じディレクトリに配置しておきます。
コード解説
- PDFファイルのパス指定:
pdf_file_path = "sample.pdf"
でプログラム開始時にPDFファイルのパスを変数に指定します。 - PDFファイルのオープン:
with pdfplumber.open(pdf_file_path) as pdf
で指定したPDFファイルを開きます。このwith
ステートメントにより、ファイルは処理後に自動的に閉じられます。 - ページごとの処理:
for page in pdf.pages
でPDFの各ページに対してループ処理を行います。 - テキストデータの抽出:
text = page.extract_text()
で各ページからテキストデータを抽出します。 - テキストデータの出力:
print(text)
で抽出したテキストデータをコンソールに出力します。
作成した全体のソースコード
# pdfplumberライブラリをインポート
import pdfplumber
# プログラム開始時にPDFファイルのパスを変数に指定
pdf_file_path = "sample.pdf" # ここにPDFファイルのパスを指定
# PDFファイルを開く
with pdfplumber.open(pdf_file_path) as pdf:
# PDFの各ページに対して処理を行う
for page in pdf.pages:
# ページからテキストデータを抽出
text = page.extract_text()
# 抽出したテキストデータを出力
print(text)
実行結果
先ほどのプログラムを実行した結果は以下の通りです。
サンプルのPDFファイルから正しくテキストを取得できました。
Lorem ipsum
Lorem ipsum dolor sit amet, consectetur adipiscing
elit. Nunc ac faucibus odio.
Vestibulum neque massa, scelerisque sit amet ligula eu, congue molestie mi. Praesent ut
varius sem. Nullam at porttitor arcu, nec lacinia nisi. Ut ac dolor vitae odio interdum
condimentum. Vivamus dapibus sodales ex, vitae malesuada ipsum cursus
convallis. Maecenas sed egestas nulla, ac condimentum orci. Mauris diam felis,
vulputate ac suscipit et, iaculis non est. Curabitur semper arcu ac ligula semper, nec luctus
nisl blandit. Integer lacinia ante ac libero lobortis imperdiet. Nullam mollis convallis ipsum,
ac accumsan nunc vehicula vitae. Nulla eget justo in felis tristique fringilla. Morbi sit amet
tortor quis risus auctor condimentum. Morbi in ullamcorper elit. Nulla iaculis tellus sit amet
mauris tempus fringilla.
Maecenas mauris lectus, lobortis et purus mattis, blandit dictum tellus.
Maecenas non lorem quis tellus placerat varius.
Nulla facilisi.
Aenean congue fringilla justo ut aliquam.
Mauris id ex erat. Nunc vulputate neque vitae justo facilisis, non condimentum ante
sagittis.
Morbi viverra semper lorem nec molestie.
Maecenas tincidunt est efficitur ligula euismod, sit amet ornare est vulputate.
12
10
8
Column 1
6
Column 2
4 Column 3
2
0
Row 1 Row 2 Row 3 Row 4
In non mauris justo. Duis vehicula mi vel mi pretium, a viverra erat efficitur. Cras aliquam
est ac eros varius, id iaculis dui auctor. Duis pretium neque ligula, et pulvinar mi placerat
et. Nulla nec nunc sit amet nunc posuere vestibulum. Ut id neque eget tortor mattis
tristique. Donec ante est, blandit sit amet tristique vel, lacinia pulvinar arcu. Pellentesque
scelerisque fermentum erat, id posuere justo pulvinar ut. Cras id eros sed enim aliquam
lobortis. Sed lobortis nisl ut eros efficitur tincidunt. Cras justo mi, porttitor quis mattis vel,
ultricies ut purus. Ut facilisis et lacus eu cursus.
In eleifend velit vitae libero sollicitudin euismod. Fusce vitae vestibulum velit. Pellentesque
vulputate lectus quis pellentesque commodo. Aliquam erat volutpat. Vestibulum in egestas
velit. Pellentesque fermentum nisl vitae fringilla venenatis. Etiam id mauris vitae orci
maximus ultricies.
Cras fringilla ipsum magna, in fringilla dui commodo
a.
Lorem ipsum Lorem ipsum Lorem ipsum
1 In eleifend velit vitae libero sollicitudin euismod. Lorem
2 Cras fringilla ipsum magna, in fringilla dui commodo Ipsum
a.
3 Aliquam erat volutpat. Lorem
4 Fusce vitae vestibulum velit. Lorem
5 Etiam vehicula luctus fermentum. Ipsum
Etiam vehicula luctus fermentum. In vel metus congue, pulvinar lectus vel, fermentum dui.
Maecenas ante orci, egestas ut aliquet sit amet, sagittis a magna. Aliquam ante quam,
pellentesque ut dignissim quis, laoreet eget est. Aliquam erat volutpat. Class aptent taciti
sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Ut ullamcorper
justo sapien, in cursus libero viverra eget. Vivamus auctor imperdiet urna, at pulvinar leo
posuere laoreet. Suspendisse neque nisl, fringilla at iaculis scelerisque, ornare vel dolor. Ut
et pulvinar nunc. Pellentesque fringilla mollis efficitur. Nullam venenatis commodo
imperdiet. Morbi velit neque, semper quis lorem quis, efficitur dignissim ipsum. Ut ac lorem
sed turpis imperdiet eleifend sit amet id sapien.
Lorem ipsum dolor sit amet, consectetur adipiscing
elit.
Nunc ac faucibus odio. Vestibulum neque massa, scelerisque sit amet ligula eu, congue
molestie mi. Praesent ut varius sem. Nullam at porttitor arcu, nec lacinia nisi. Ut ac dolor
vitae odio interdum condimentum. Vivamus dapibus sodales ex, vitae malesuada ipsum
cursus convallis. Maecenas sed egestas nulla, ac condimentum orci. Mauris diam felis,
vulputate ac suscipit et, iaculis non est. Curabitur semper arcu ac ligula semper, nec luctus
nisl blandit. Integer lacinia ante ac libero lobortis imperdiet. Nullam mollis convallis ipsum,
ac accumsan nunc vehicula vitae. Nulla eget justo in felis tristique fringilla. Morbi sit amet
tortor quis risus auctor condimentum. Morbi in ullamcorper elit. Nulla iaculis tellus sit amet
mauris tempus fringilla.
Maecenas mauris lectus, lobortis et purus mattis, blandit
dictum tellus.
Maecenas non lorem quis tellus placerat varius. Nulla facilisi. Aenean congue fringilla justo
ut aliquam. Mauris id ex erat. Nunc vulputate neque vitae justo facilisis, non condimentum
ante sagittis. Morbi viverra semper lorem nec molestie. Maecenas tincidunt est efficitur
ligula euismod, sit amet ornare est vulputate.
In non mauris justo. Duis vehicula mi vel mi pretium, a viverra erat efficitur. Cras aliquam
est ac eros varius, id iaculis dui auctor. Duis pretium neque ligula, et pulvinar mi placerat
et. Nulla nec nunc sit amet nunc posuere vestibulum. Ut id neque eget tortor mattis
tristique. Donec ante est, blandit sit amet tristique vel, lacinia pulvinar arcu. Pellentesque
scelerisque fermentum erat, id posuere justo pulvinar ut. Cras id eros sed enim aliquam
lobortis. Sed lobortis nisl ut eros efficitur tincidunt. Cras justo mi, porttitor quis mattis vel,
ultricies ut purus. Ut facilisis et lacus eu cursus.
In eleifend velit vitae libero sollicitudin euismod.
Fusce vitae vestibulum velit. Pellentesque vulputate lectus quis pellentesque commodo.
Aliquam erat volutpat. Vestibulum in egestas velit. Pellentesque fermentum nisl vitae
fringilla venenatis. Etiam id mauris vitae orci maximus ultricies. Cras fringilla ipsum
magna, in fringilla dui commodo a.
Etiam vehicula luctus fermentum. In vel metus congue, pulvinar lectus vel, fermentum dui.
Maecenas ante orci, egestas ut aliquet sit amet, sagittis a magna. Aliquam ante quam,
pellentesque ut dignissim quis, laoreet eget est. Aliquam erat volutpat. Class aptent taciti
sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Ut ullamcorper
justo sapien, in cursus libero viverra eget. Vivamus auctor imperdiet urna, at pulvinar leo
posuere laoreet. Suspendisse neque nisl, fringilla at iaculis scelerisque, ornare vel dolor. Ut
et pulvinar nunc. Pellentesque fringilla mollis efficitur. Nullam venenatis commodo
imperdiet. Morbi velit neque, semper quis lorem quis, efficitur dignissim ipsum. Ut ac lorem
sed turpis imperdiet eleifend sit amet id sapien.
まとめ
この記事では、Pythonのpdfplumberライブラリを用いてPDFファイルからテキストデータを簡単に抽出する方法を学びました。
PDFは企業のドキュメントとして非常によく用いられるフォーマットであり、PDFファイルに対する作業を自動化することで、大幅な業務効率化を実現できます。
この知識を活かして、PDFデータの抽出や解析作業を効率よく行いましょう。
それでは、また次の記事でお会いしましょう。
コメント