PDFからテキストを取得する PyPDF2

昨日の札幌は風が強かったです。うちのゴミ箱のフタが飛んでいきました。

さて、地道に作成しているPebbleの札幌東豊線の時刻表アプリなのですが、それになりに動くようになって、平日の栄町駅だけは使えるようになりました。

位置によって最寄りの駅に切り替わることも確認できたので、あとは時刻表データを作るだけです。

いつもスマホで時刻表を見るときは [札幌市営]東豊線の時刻表 – えきから時刻表 を使っているのですが、データだけ抜くのは忍びないので、市が出している何かを参考にすることにしました。

地下鉄路線図・時刻表/札幌市

しかし見渡した限り全部PDFです。おーのー!

ただ、このPDFはテキスト情報が含まれているPDFなので、
この文字を使えば、簡単に時刻表(の文字列)をゲットできて楽ができるかもしれない!!!

本題:pythonでPDFからテキスト情報を取得しよう

pythonからPDFを扱うにはPyPDF2を使います。

mstamy2/PyPDF2

インストール

[code]
pip install pypdf2
[/code]

PDFからテキストを取得する

[python]
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os

import PyPDF2

def get_pdf_text(path):
"""PDFファイルからテキスト情報を抜き出す"""
text = ""
pdf = PyPDF2.PdfFileReader(open(path, "rb"))
for i in range(0, pdf.getNumPages()):
text += pdf.getPage(i).extractText() + "\n"
text = " ".join(text.replace(u"\xa0", " ").strip().split())
return text

if __name__ == ‘__main__’:
print(get_pdf_text(‘hogehoge.pdf’))

[/python]

実行してみる

これを東豊線の栄町駅PDFに対して実行してみます。

[code]
WeekdaysSaturdays/Sundays/Holidays6 01020293846546 01020293847557 2 91419232731353943475155597 311192632384450568 3 711151923273135394347528 2 8142026334047549 0 7152230374451599 2 91724313845525910 61320273542495610 71421283542495611 31118253239465411 31118253239465412 1 81522303744515812 1 81522303744515813 61320273441495613 61320273441495614 31017253239465314 31017253239465315 1 81522303744525915 1 81522293644515816 6132128354146525716 51220273441485617 3 813182329344045515617 31017243139465318 1 6121723283439455218 0 71522293643515919 0 816243240485619 715243240485620 412202937455320 412202937455321 1 917253341495721 1 917253341495722 5132230405022 5132230405023 0102030405023 010203040500 00 0Last Trains for Transfers from This Station.For MiyanosawaFor FukuzumiFor Shin sapporoTransfer at OdoriTransfer at SapporoTransfer at OdoriTransfer at Odori
[/code]

おおおお! テキストになった!!!

けど、これの解析はどうやろう。めんどくさい\(^o^)/
(ちなみにPDFリーダーで開いて、CTRL-Aでテキストを全選択してテキストをコピペしたほうが、もうちょっと読みやすいテキストで取得できます)

つづく。