PythonでPDFファイルを読み込んで文字起こしをする

PythonにはPDFファイルを操作できるライブラリがいくつか存在しています。

ライブラリごとにメリットデメリット、目的や使用する状況に応じて使い分けることが必要になりますが本日はpdfminer.sixというライブラリを使用してPDFファイルを読み込み込んで文字起こしをする方法を紹介します。

環境

環境

・Mac BigSur 11.3

・Python 3.8

ライブラリのインストール

必要なライブラリをインストールします。

pdfminer.sixというライブラリを使用します。

% pip install pdfminer.six # pipの人はこれ
% pipenv install pdfminer.six # pipenvの人はこれ
% brew install pdfminer.six # pip、pipenvよくわからんでMacの人はこれ

PDFファイルを用意する

厚生労働省によ公式に公開されているPDFファイルを利用します。

以下よりリンク先を開き、「印刷用のPDFファイルダウンロードはこちらから」の報道発表資料からダウンロードしてください。

毎月勤労統計調査-平成30年9月分結果速報等

また以下のダウンロードをクリックすることでもダウンロードすることができます。

読み込むコード

コードが何をしているかについてはコメントアウトの通りです。

from io import StringIO
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage

fp = open('houdou3009p.pdf', 'rb')

# 出力する
outfp = StringIO()

# PDFファイル内のリソース(テキスト、画像、罫線など)を管理する総元締め的なクラス
rmgr = PDFResourceManager()
# PDFファイルのレイアウトパラメータを保持するクラス
lprms = LAParams()
# PDFファイル内のテキストを取り出す機能を提供するクラス 
device = TextConverter(rmgr, outfp, laparams=lprms)
# PDFファイルを1ページずつ取得。集合(set)として保持するクラス
iprtr = PDFPageInterpreter(rmgr, device)


for page in PDFPage.get_pages(fp):
    iprtr.process_page(page)

text = outfp.getvalue()

outfp.close()
device.close()
fp.close()
print(text)

問題なくコードが実行できればコンソール上には以下のように表示されます。

Press Release   

平成 30 年 11 月7日 
【照会先】 

政策統括官付参事官付雇用・賃金福祉統計室 

統 計 管 理 官    野地  祐二 
室  長  補  佐    村木  幸広 
企画調整係  

(代表電話) 03(5253)1111  (内線 7609,7610) 
(直通電話) 03(3595)3145 

 

報道関係者  各位 

 
毎月勤労統計調査  平成 30 年9月分結果速報等  を公表します 
 
  毎月勤労統計調査平成 30 年9月分結果速報を、今般とりまとめましたので公表します。 
 【調査結果のポイント】〔()内は、前年同月比または前年同月差を示す。〕 
1  賃金(一人平均) 
  (1) 現金給与総額は、270,256 円(1.1%増)となった。 
    うち所定内給与は 244,054 円(0.8%増)、所定外給与は 19,047 円(0.4%増)、所定 
    内給与と所定外給与を合わせたきまって支給する給与は 263,101 円(0.8%増)、特別に 
    支払われた給与は 7,155 円(13.3%増)となった。 
  (2) 一般労働者では、現金給与総額は、347,013 円(1.2%増)となった。 
    うち所定内給与は 310,831 円(0.9%増)、所定外給与は 26,111 円(0.4%増)、きま 
    って支給する給与は 336,942 円(0.9%増)、特別に支払われた給与は 10,071 円(13.2% 
    増)となった。 
  (3) パートタイム労働者では、現金給与総額は、96,266 円(0.5%減)となった。 
    うち所定内給与は 92,688 円(0.5%減)、所定外給与は 3,035 円(2.0%減)、きまっ 
    て支給する給与は 95,723 円(0.6%減)、なお、時間当たり給与は 1,136 円(2.1%増) 
    となった。 
  (4) 実質賃金指数(現金給与総額)は、84.3(0.4%減)となった。 
    (消費者物価指数(持家の帰属家賃を除く総合)の前年同月比は、1.4%上昇) 
  (5) 共通事業所による現金給与総額は、0.2%増となった。(※) 
    うち所定内給与は 0.5%増、きまって支給する給与は 0.6%増となった。 
      また、一般労働者、パートタイム労働者、各々の現金給与総額は、0.1%増、前年同月  
    と同水準となった。 
 
2  労働時間(一人平均) 
  (1) 総実労働時間は、139.3 時間(3.3%減)となった。 
    うち所定内労働時間は 128.8 時間(3.2%減)、所定外労働時間は 10.5 時間(3.6% 
    減)となった。 出勤日数は、18.1 日(0.5 日減)となった。 
      また、製造業の所定外労働時間の前月比(季節調整済指数)は、0.2%増となった。 
  (2) 一般労働者では、総実労働時間は、163.6 時間(3.5%減)となった。 
    うち所定内労働時間は 149.6 時間(3.4%減)となった。 
  (3) パートタイム労働者では、総実労働時間は、84.1 時間(2.5%減)となった。 
    うち所定内労働時間は 81.6 時間(2.5%減)となった。 
 
3  雇用 
  (1) 常用雇用指数は、106.7(1.1%増)、一般労働者では 106.2(1.0%増)、パートタ  
    イム労働者では 107.9(1.7%増)となった。 
  (2) パートタイム労働者比率は、30.63%(0.15 ポイント低下)となった。 
 
(注)平成 30 年9月分結果速報の数値は、確報で改訂される場合があります。 
 
《特別集計》平成30年夏季賞与(一人平均) 

今年の6~8月の「特別に支払われた給与」のうち賞与として支給された給与を特別集計
すると、平成 30 年夏季賞与は 383,879 円となり、平成 29 年夏季賞与に比べ 4.7%増とな
った。 

 

※  平成 30 年1月に標本の部分入替えや基準とする母集団労働者数の更新を行ったことにより、賃
金と労働時間の前年同月比には、一定の断層が含まれます。このため、断層の影響を除いた共
通事業所による前年同月比を参考提供しています。今回の結果の詳細やこれらの変更が賃金水
準等に与える影響については、別添概況をご覧ください。 

改行やスペース含め綺麗に読み込めましたね!!

最後に

いかがでしたでしょうか。

以上が、「PythonでPDFファイルを読み込んで文字起こしをする」の紹介記事になります。

プログラミング学習を効率良く進めるには…

私ヒロヤンがプログラミングを始めた頃は以下のような感じでした。

何から手をつけていいのか、わからない。

プログラミングを始めてみたけど、エラーが解決できない。

そしてネットで調べていくうちに膨大な時間が過ぎていきました。

私ヒロヤンの実体験より、プログラミングを効率的に学ぶために大切なことは以下のことだと考えています。

1. いつまでもダラダラとやらないで、目標を決定して短期集中する

2. マンツーマンで、わからない箇所は直ぐに質問をして即レスをもらう

.proでは私ヒロヤンが学習してきたプログラミング経験0からのpython/django、その他webサイト・サービス開発のコースが用意されています。

カウンセリング自体は無料なので話を聞いてみるだけでもいかがでしょうか?

また以下のリンク先ではdjango専用のプログラミングスクールをまとめ紹介しています。