【Python】pdfminerでPDFからテキストを抽出する

【Python】pdfminerでPDFからテキストを抽出する プログラミング

PDFからテキストを抽出する場合、どうしていますか?
「Ctrl + A」で全選択してコピペですか?

PDFの数が少なければ、コピペで十分でしょう。
ただし、この場合でもPDFのページ数が多いとかなりモッサリします。

さらには、PDFの数が多くなると、コピペだけで対応するのは厳しいでしょう。
こうなってくると、プログラムの出番です。

そして、Pythonであればpdfminerを利用します。
ただ、pdfminerには注意すべきポイントがあります。

本記事の内容

  • pdfminerとは?
  • pdfminerのインストール
  • 【サンプルコード】pdfminerによるPDFからのテキスト抽出

それでは、上記に沿って解説していきます。

pdfminerとは?

pdfminerとは、PDF文書から情報を抽出するためのツールです。
主に、テキストデータの取得と分析に焦点を当てています。

テキストに関しては、次の情報も取得可能です。

  • 座標
  • フォント

また、pdfminerは次の方法で利用可能となっています。

  • コマンドラインツール
  • Pythonのモジュール

コマンドラインツールとしての利用でも、それはそれで便利でしょう。
ただ、Pythonのプログラムから利用することにこそ、pdfminerの存在意義があります。

結局、抽出したテキストデータは利用してこそナンボです。
利用するためには、抽出したテキストデータをデータベースやファイルに保存する必要があります。

それらすべてを自動化するためには、Pythonでプログラミングすることになります。
コマンドラインツールでは、限界があるでしょう。

その意味でも、本記事では「Pythonのモジュール」としての利用について解説します。

さて、ここまでpdfminerの機能と利用方法に関して説明してきました。
ここで、「pdfminerには注意すべきポイント」について述べておきます。

pdfminerにおける注意すべきポイント

pdfminerと呼ばれるモノには、以下の2つが存在します。

  • PDFMiner
  • pdfminer.six

PDFMinerは、現在は開発がストップしています。
ちなみに、開発者は日本人のようです。

pdfminer.sixは、PDFMinerからフォーク(派生)したモノです。
よって、現在pdfminerと言えばpdfminer.sixのことになります。

このことが、pdfminerにおける注意すべきポイントです。
この注意点を頭に入れて、pdfminerのインストールを行っていきましょう。

pdfminerのインストール

現時点(2020年12月)でpdfminerと言えば、pdfminer.sixのことでした。
よって、インストールするのは、pdfminer.sixとなります。

あと、Pythonのバージョンにも注意すべきです。
公式では、Python 3.6以上をサポートしていると記載されています。
Python 3.4と3.5は、非推奨ということです。

そのため、古いPythonでは動かないと考えた方がよいでしょう。
そこでまずは、Pythonのバージョンから確認です。

>python -V
Python 3.7.3

Python 3.6以上であるので、Pythonのバージョンはクリア。
次に、PIPの更新です。

pdfminer.sixは、PIPを使ってインストールします。
PIPを利用する際には、常におまじないのように更新用のコマンドを実行しておきます。

python -m pip install --upgrade pip

では、いざpdfminer.sixのインストールです。
なお、2020年12月時点の最新版は20201018となります。

pip install pdfminer.six

処理の最後に次のように表示されれば、インストール完了です。

Installing collected packages: pdfminer.six
Successfully installed pdfminer.six-20201018

念のため、確認しておきます。
「Pythonのモジュール」の利用を前提として、確認します。

次のコードをスクリプトファイルに保存してください。
適当に、pdfminer_test.pyとかでいいでしょう。

import pdfminer
print(pdfminer.__version__)  

上記コードを実行すると、次のようにバージョンが表示されます。

20201018

インストールしたバージョンですね。
ここまでやれば、インストール成功と言って良いでしょう。

最後に、実際にPDFからテキストを抽出しましょう。

【サンプルコード】pdfminerによるPDFからのテキスト抽出

何か適当にPDFを用意します。
今回は、経済産業省のサイトからPDFをダウンロードしました。

以下は、そのPDFからテキストを抽出して表示するプログラムです。

from pdfminer.high_level import extract_text

FILE_PATH = "./data/yachin_shien.pdf"

text = extract_text(FILE_PATH)
print(text)

実行すると、以下の結果が得られます。

≪テナント家賃の支払いを支援する制度について≫


以下の制度により給付を受け、又は融資を受けた金額は、
テナント家賃の支払いに充てることが可能です。ご活用ください。


①給付金


国


・日本政策金融公庫等
・民間金融機関


テナント


テナント
オーナー


②融資


家賃支払


① 給付金


○ 事業継続のための持続化給付金 【GW明け頃から支給開始】


→ 詳細は中小企業庁HPまで


(上限額)中堅・中小法人200万円、個人事業者100万円


※ 2020年1~12月のうち、前年同月比で売上が50%以上減少している事業者の方が対象


〇 上記の他、新型コロナウイルス感染症対応地方創生臨時交付金等を活用して、地方自治体が
独自に事業者に協力金等を給付する場合、これも家賃支払いに充てることが可能です。最寄り
の自治体にお問い合わせください。


② 融資


○ 実質無利子・無担保・元本返済の据置最大5年の融資


【①②は融資を開始済み。③は補正予算成立後速やかに融資を開始】


→ 詳細は中小企業庁HPまで


① 日本政策金融公庫の新型コロナウイルス感染症特別貸付


上限3億6000万円(無利子上限1億3000万円、当初3年間(※1))
※ 上記の上限は公庫の国民生活事業と中小企業事業を併用した場合


(生活衛生関係営業者向け)
〇 生活衛生関係営業新型コロナウイルス感染症特別貸付


上限6000万円(上記と併用可能)(無利子上限3000万円、当初3年間(※1))


② 商工組合中央金庫の危機対応融資


上限3億円(無利子上限1億円、当初3年間(※1))


③ 民間金融機関による無利子融資


各都道府県等の制度融資:無利子上限3000万円、当初3年間(※2)


(※1)・・売上減少要件(個人事業主5%減、小規模事業者15%減、中規模事業者20%減)
(※2)・・売上減少要件(個人事業主5%減、小・中規模事業者15%減)


(参考)賃貸借契約の考え方 【法務省民事局】
〇 日本の民法の解釈では、賃料不払を理由に賃貸借契約を解除するには,賃貸人と賃借人の信頼関係が破壊されて
いることが必要です。最終的には事案ごとの判断となりますが, 新型コロナウイルスの影響により3カ月程度の賃
料不払が生じても、不払の前後の状況等を踏まえ、信頼関係は破壊されておらず、契約解除(立ち退き請求)が認
められないケースも多いと考えられます。

成功です。
これだけ綺麗に取得できたのは、対象PDFが適切に作成されているというのもあるのでしょう。

それにしても、簡単ですね。
あとは、この結果をデータベースなり、ファイルに保存していくだけです。
そうすれば、テキストマイニングなどで利用することが可能となります。

タイトルとURLをコピーしました