Python初心者が独学で業務効率化に挑戦!①~PDF抽出~

プログラミング

皆さんこんにちは!

絶賛Python学習中のドケチ光秀です。

ついに私の住む地域にも雪が降ってきました。
外に出るのが億劫になりますが、こんな時こそ学習のチャンスです!

今回は、今までの記事が日記でしかなかったので、いよいよプログラミングを活用した業務改善に取り組む様子をお届けしたいなと思っております。

今回は、Pythonを使ってpdfデータから文字(テキスト)やグラフを抽出する方法に取り組んでみました。

特に私のような初学者の方や、Pythonに興味のある方には参考になるかと思いますので、ぜひご覧になっていただければと思います!

 

はじめに

おそらく、pdfデータに触れたことがない方ってほぼいないんじゃないでしょうか?

社会人の方はもちろん仕事で使いますよね。

スキャナー付きのプリンターで書類をスキャンして、pdf化することも多いですよね。

インターネット上にもpdfデータがありふれていて、活用できます。

私の例で言うと、現在プログラミングの勉強と並行して就職活動をやっていますが、求人に応募する際に、応募先から履歴書と職務経歴書の提出を100%求められます。

そして履歴書と職務経歴書はpdf形式で作成して提出してください。と言われることもあります。

学生さんも論文読んだり、学校のレポート作るときにpdfデータを使いますよね?

そして、pdf上の文章をコピペしたいなって思ったり、グラフや表を引用したいなって思ったことはありませんか?

そういった想像から、Pythonを使ってpdfデータから文字(テキスト)やグラフを抽出するツール(コード)を作りたいなと思いました。

では、やっていきましょう。

今回は文字の抽出に挑戦します。

準備(環境構築)

Pythonを自身のPCで扱うにあたって、「環境構築」が必要です。

これは、プログラムを書く・実行するにあたって必要な開発環境の準備をすることですね。

例えばウェブサイトを作りたい!と考えた際は、エディターをダウンロードして、htmlやcssファイルを作ってコードを書いて、それぞれを連動させれば、ブラウザを経由してサイトを表示できるのですが…

Pythonを使おうと思ったとき、まずは公式サイトからPythonシステムをダウンロードして、エディターを選んで、次に実行環境を決めて…と複数の工程を踏んでいかないとスタートラインに立つことができません。

しかも、環境構築のやり方が1つではなく、それぞれのメリットやデメリットがあるという複雑さがあります。

この環境構築がうまくできず、プログラミングの学習を脱落した方も多いのではないでしょうか…。

私はAnacondaとVScodeを連動させて環境構築しました。

最初はなんとなく動かしていって、調べながら試して、気が付けば出来ていました。

色々な方のブログサイトなどを読んでやったのですが、今から着手する方は下記の動画がすごく分かりやすいと思うのでお勧めです!

…意外と苦労しますよね💦

しかし、環境構築が上手くできなかった方にも朗報です。

Googleが提供している「Google Colaboratory」では、なんとブラウザ上でPythonを扱うことができます。

つまり、複雑な作業をしなくてもPythonを扱える状態になるということです。

Googleドライブから操作画面に飛んでいくので、Google系のサービスをよく使う方には大変おすすめです。

私も触ってみましたが、本当に操作が楽です。
しかも見やすい仕様になっており、感動しました。

今後、さらにPythonの学習を始める方が増えていきそうだなと感じます。

では、私はVScodeを使ってコードを書いていくことにします。

コーディング開始

まずAnaconda promptを使用して「PyPDF2」ライブラリをインストールします。

AnacondaとVScodeを連動させているので、Anaconda promptを通じてインストールするとVScodeから使えるようになります。

pip install PyPDF2

PyPDF2というのは、PythonでPDFを操作するためのライブラリです。

pdfの分割、結合、トリミング、変換、暗号化、復号化など、さまざまな操作を簡単に行うことができる多機能なツールとのことで。

めっちゃ便利そう。

では、インストールが終わったのでさっそく進めていきます。

#PyPDF2からPdfReaderを呼び出す
from PyPDF2 import PdfReader

#目的のpdfファイルを読み込む
file_path = "C:\\〇〇\\〇〇\\OneDrive\\デスクトップ\\Python\\pdf抽出\\石川県_業務改善.pdf"
reader = PdfReader(file_path)
まず、インストールしたPyPDF2からPdfReaderというものを呼び出し、pdfを読み込める状態を作っていきます。
次にreaderという変数を作り、そこに私のPCのデスクトップ上にある「python」というフォルダに格納してある「石川県_業務改善.pdf」というデータを読み込むようにしました。
ちなみにこのpdfデータは、平成30年に石川県の教育委員会でまとめられた業務改善の実例集です。
電子機器を用いたり、会議時間の制限を設けたり、業務改善のために素晴らしい工夫の数々をされていますね。
↑詳しくはこちらの石川県HPの教育委員会で公開されています。
では、次はこのpdfデータ上のテキストを文章化していきます。
# すべてのテキストを抽出
for page_number, page in enumerate(reader.pages, start=1):
    print(f" --- Page{page_number} ---"}
    print(page.extract_text())
繰り返し処理をするfor文と、リスト要素とindex(リスト内の順番を示すもの)を取得するenumerate関数を使いました。
「reader.pages」でPDFドキュメントの各ページのリストを取得し、start=1として、通常は0からカウントされるインデックスを1からカウントさせます。
pdfファイルは1ページから始まりますからね。0ページなんてありません。
次にprint(f” — Page{page_number} — “)とすることで、各ページをPage1,Page2…といった形でテキストとして毎ページ分表示させます。
最後に関数「page」に対して.extract_text()メソッドで、pdfのテキストを抽出していきます。
メソッドというのは、変数や値の後ろに.(ドット)を付けて呼び出すものです。
単独で使える関数とは扱い方が違ってきます。
さて、実行してみると…
--- Page1 ---
平成30年3月
石川県教育委員会
業務改善取組事例集学校現場における
--- Page2 ---
 本県では、 平成2 9年4月より教職員の勤務時間調査を継続し て行い、 その実態を積極的
に公表するとともに、 同年8月には、 県教育委員会、 市町教育委員会、 校長会、 体育連盟など
の代表者から構成される 「教職員多忙化改善推進協議会」 を設置し、 教職員の多忙化改善に
ついての議論を重ね、 平成30年3月に 「石川県公立小学校、 中学校、 高等学校及び特別支
援学校における教職員の多忙化改善に向けた取組方針」 をとりまとめたところです。
 この 「取組方針」 は、 協議会の委員から具体のご意見をいただくとともに、 平成29年
1 0月に行った教職員多忙化改善のための実践事例及び取組提案の募集で、 学校現場の教
職員のみなさんからいただいた、 4, 7 0 0件を超える提案も踏まえながら、 とりまとめたもの
です。

※以下省略
このようになりました。
おおむね目的は達成されたのですが、文章内に不要な空白が入っているのが気になりますね。
これの改善方法を考えたいと思います。

pdfplumberの使用

最初はPyPDF2を使用しましたが、他にもテキスト抽出に使用できるライブラリがあるとのことで、次に「pdfplumber」を使ってみることにしました。
こちらはテキストだけではなく画像やテーブルも抽出できるみたいですね。
pip install pdfplumber
Anaconda promptで上記コマンドを実行して、1分でインストール終了です。
そしてコーディング。
# pdfplumberの呼び出し
import pdfplumber

# pdfファイルの読み込み
file_path = "C:\\〇〇\\〇〇\\OneDrive\\デスクトップ\\Python\\pdf抽出\\石川県_業務改善.pdf"

# pdfファイルを開く(自動でオープン・クローズ)
with pdfplumber.open(file_path) as pdf:

# すべてのテキストを抽出
    for page_number, page in enumerate(pdf.pages, start=1):
        print(f" --- Page{page_number} ---"}
        print(page.extract_text())
上記のようにしました。
with pdfplumber.openを用いて、指定したpdfファイルを自動で開き自動で閉じる仕様にしてみました。
あとはほとんど同じですね。
そうすると…
 --- Page 1 ---
学校現場における
業 務 改 善 取 組 事 例 集
平成30年3月
石川県教育委員会
--- Page 2 ---
「学校現場における業務改善取組事例集」の
活用にあたって
本県では、平成29年4月より教職員の勤務時間調査を継続して行い、その実態を積極的 
に公表するとともに、同年8月には、県教育委員会、市町教育委員会、校長会、体育連盟など
の代表者から構成される「教職員多忙化改善推進協議会」を設置し、教職員の多忙化改善に 
ついての議論を重ね、平成30年3月に「石川県公立小学校、中学校、高等学校及び特別支 
援学校における教職員の多忙化改善に向けた取組方針」をとりまとめたところです。 
この「取組方針」は、協議会の委員から具体のご意見をいただくとともに、平成29年 
10月に行った教職員多忙化改善のための実践事例及び取組提案の募集で、学校現場の教 
職員のみなさんからいただいた、4,700件を超える提案も踏まえながら、とりまとめたもの
です。

※以下省略
はい、余分な空白が無くなりました!
目的に応じてライブラリの使い分けが必要ということですね。
なかなか大変でしたが、学びになる時間でした。

あとがき

もともと別のpdfファイルを読み込むつもりだったのですが、暗号化されていたようで上手くいきませんでした。
また、pdfファイルによってはテキストをコピペできたりもするので、今回挑戦したテキストの抽出の出番は限定的なものになってしまうかもしれません。
ということで、pdf関係でいったとき、次回はグラフや表の抽出に挑戦したいなと思いました。
自動でExcelに転記させられたら面白そうですよね!?
それでは、また次回もよろしくお願いします!

コメント

error: Content is protected !!
タイトルとURLをコピーしました