ミドリコ雑記帖

ミドリコが思いついたことをなんでも書く場所。Amazonアソシエイト参加、楽天アフィリエイト利用しています

【#05】プログラム完全初心者がPythonを触ってみた(モジュールを探す)

 前の記事はこちら。
midoliko-tsuki.hatenablog.com

1

 前回書いた基礎設計的なやつに沿って、必要なモジュールとかを調べていこう、の巻。【#02】のときに書いたプログラムが、書いたとはとても言えないくらい理解できてないので、ついでにちょっとでも不明なところが分かったらなーという気持ちもあります。

 前回書いた基礎設計的なやつがこちら。

[目的]
冊子をスキャンしたPDF(以下元PDFと呼ぶ)約50件をテキストデータに変換し、テキストファイルを作成する

[手順]
•冊子をスキャンしたPDFの入ったフォルダを用意する
  ・フォルダ内にあるのは変換するPDFのみ
  ・データ形式はすべてpdf

•フォルダ内の任意のPDFファイルを画像に変換する

•画像に変換したファイルをOCRしてテキストデータに変換する

•テキストファイルを作成して、変換されたテキストデータを書き込む
 ・元PDF一つにつき一つのテキストファイルを作成する
 ・作成するテキストファイルの名前は、元PDFの名前と同じものとする(後で元PDFとテキストデータを照合するときに、名前が同じほうが便利だから)

•画像に変換〜テキストファイル作成の工程を、フォルダ内のPDF全部に対して繰り返す

•新規フォルダを作成し、作成したテキストファイルを収納する
 ・フォルダ名は「ocr_作業した日時(yymmddhhmmss)」とする(秒まで入れておくとファイル名が絶対に重複しなくて便利だと言われたのでそうしました)


 PDFを画像に変換してOCRしてテキストデータに変換するところは以前やった部分。それ以外のところが未知の領域です。

 以前やった部分は、分かっていなくても進めているので後回しでもいいかなーと思ったのですが、あまりに分かっていなさすぎて気持ち悪いので、書いてあることを調べてみることにしました。

from PIL import Image
import sys
import pyocr
import pyocr.builders
import pdf2image


 最初の部分です。うーん呪文のようだ。

 頭の部分は実は何度か調べているのですが、そのたびに「ふーん……なるほどね」と分かったつもりになって、後からまた調べ直すということを繰り返しており、頭の悪さが身に染みます。
 というところでふと気がついたのですが、このプログラムは自分ひとりで使うものなので、コメントになにをメモしても別に恥ずかしくないのでした。webサイトのソースみたいなつもりでいたよ!!(かつて作っていたwebサイトのソースを閲覧者にチェックされてダメ出しされた経験を忘れられずにいる)

 そんなわけで、自分で調べたり夫に聞いたりしてコメントを書き込みました。

#画像を使うので、PILからImageをインポートする
from PIL import Image

#とりあえずおまじないだと思っておく
import sys

#TesseractOCRのやつ
import pyocr
import pyocr.builders

#pdfを画像に変換するライブラリ
import pdf2image

 雑う!
 sysについては、調べてみてもよく分からなかったので夫に聞いてみたところ、「説明が難しいけどないと困るやつ」と言われたので、「じゃあとりあえずおまじないだと思っとく!」ということでメモしました。

tools = pyocr.get_available_tools()
if len(tools) == 0:
    print("No OCR tool found")
    sys.exit(1)

tool = tools[0]
print("Will use tool '%s'" % (tool.get_name()))

 続くこのあたりも謎だったんですが、こちらのページを見ていたら、前半はOCR探索、後半は推奨使用順序の決まり文句らしいです。

qiita.com

 なるほど。相変わらず分かった気はしないけど、何の部品なのかはちょっと分かりました。

2

 「PDFを画像に変換してOCRしてテキストデータにする」の部分の謎がちょっと解けたところで、次はいままでやったことのない部分です。

  1. 新規テキストファイルを作成してテキストデータを書き込んで保存する
  2. 「PDFを画書に変換して……」の動作をフォルダ内のファイル全部に対して実行する
  3. 新規フォルダを作成して名前をつけて保存する

 1についてはここに書いてるやつでいけそうな気がします。
office54.net
 ただ、ここではファイル名を指定しているので、そこの部分の書き方を考えないといけません。何かあるだろうとは思うけど、何で検索したら出てくるかな。

 2はこれでいけそうな気がする。
pystyle.info
 この記事ではディレクトリ内の特定の拡張子をピックアップしていますが、私はディレクトリ内にはPDFしか入れておかない予定なので、その部分は省略してもいいかと思いますが、書いておいて悪いものでもないような気もします。
 関係ないですが、この部分について調べていて、フォルダで検索しても出てこないけどディレクトリで検索するとわんさか引っかかってくることを学びました。ディレクトリとか自分で打ったの、人生でこれが初めてじゃないかと思います。

 3。これもディレクトリで検索したらいっぱい出てきた。
hibiki-press.tech
 あれこれ見て回ってるうちに気づいたのですが、Python公式リファレンスがフォルダじゃなくてディレクトリって言ってるらしいです。それでみんなディレクトリって言うのか……。
 そしてこちらも記事内ではディレクトリ名を指定しているので、作成日時をディレクトリ名にする何かを探さなければなりません。……めんどくさいことにしちゃったな(小声)。

 続きはこちら。
midoliko-tsuki.hatenablog.com