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が適切に作成されているというのもあるのでしょう。
それにしても、簡単ですね。
あとは、この結果をデータベースなり、ファイルに保存していくだけです。
そうすれば、テキストマイニングなどで利用することが可能となります。