PDFから取得した時刻表テキストから、使いやすいデータを抽出する

気温の変化の激しさに負け、風邪をひいて喉が痛いです。
週末を風邪でぐったり過ごすと損した気分です!

さて、地道に作成しているPebbleの札幌東豊線の時刻表アプリ、を動かすために必要なデータを作るためにチマチマ進めている PDFからテキストを取得する PyPDF2 の続きです。

ソース

planset/tohosendata です。

やはりこういった電車の時刻表はオープンデータ化してほしいですね。
どこかにあるのかなー?

テキストから時刻表を抽出する

前回、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]

ここからうまい具合に抽出しますが、詳細は省略。

正規表現でざっくり分けて、あとは1時刻ずつ読む感じです(うまく行ってる気がしません)。

苦労した点は、pdfをテキストに変換をすると、
同じ行が2回続いて出力されるPDFがあることです・・・。
PDFの作りの問題なのか、pypdf2の使い方の問題なのか・・・。

栄町分を出力してみるとこんな感じです。時刻表が正しいかはまだ確認していません。

[code]
“1”: {
“fukuzumi”: {
“holiday”: {
“23”: [
0,
10,
20,
30,
40,
50
],
“22”: [
5,
13,
22,
30,
40,
50
],
(省略)
},
“weekday”: {
“23”: [
0,
10,
20,
30,
40,
50
],
“22”: [
5,
13,
22,
30,
40,
50
],
(省略)
}
(省略)
[/code]

ここまでくればもうおっけーです。

あとは、django用のdbに取り込んで時刻検索して返してあげています。

まとめ

これで時刻表のデータが揃ったので、あとは電車に乗りながら動作確認です。
栄町<>さっぽろ間しか乗ることがないので、福住のデータは一生テストされませんけどね!