請求書、注文書などがメールでやり取りされる際にPDFが多く用いられる。
PDFが媒体となると、システム同士の電子的なやりとりから一歩遠ざかり、手作業が多く出現する。
PDFでの書面やり取りのうち、画像PDF化ではなく、アプリから出力されたPDFは劣化がないので、OCR読取の精度が高いと考えられる。
実際業務では、例えば、
メールでPDF注文書を受信、PDFを見ながら受注記録に手作業で転記、
もしくはPDFの該当項目を選択コピーして所定場所へペースト
といったことが日常的かつ高頻度で実行される。
PDFの受信は不可避として、この転記を極力減らしたい。
そこで、
PDFに込められた情報を読取り、所定のリスト形式に変換
したい。
■方法1:直接PDFを読む
PDF上の情報の読取はOCRではなく、pythonライブラリで直接抽出する方法がある。
pynupdf
この方法は簡単であるが、情報の順序の認識がやや難儀となる。
実際例
■方法2:OCRソフトでPDFからEXCELに移す
一方で、pythonでEXCELのセル内容を読み出すことは容易である。
ということは、PDFを一旦EXCELに移し替えることさえできればよい。
そういうソフトは多々存在するが、画像OCRもできる下記アプリケーションが優れているらしい。
読取革命16
https://www.sourcenext.com/product/yomitorikakumei/?gpc=0000014028
これは画面コピー(スクリーンショット)の変換や、印刷送付された書類の変換にも対応できそうである。が、画像OCRは必要ない場合は単純に費用ロス。
■方法3:pdfをWORDやEXCELに変換、それをpythonで読む。
OCRソフトでなくてWORD自体から読む方法があるようだ。
EXCELだとPowerrQueryの出番。これだと操作しにくい。
そこでとりあえず確実なWORDで読み出して試す。
まずは以下のようにpdfからdocx文書を創生、保存
次にdocx文書から表組みを読み出す。
使用ライブラリ:docx
pip install python-docx
注意!
pip install docx python2用docxライブラリになり、python3で使えない。
#コード例
#WORD文書を読み出す
import docx
path_docx = "C:/Users/shienkikou11/Desktop/testpdf.docx"
document = docx.Document(path_docx)
for paragraph in document.paragraphs:
print(paragraph.text)
for table in document.tables:
for row in table.rows:
list = []
for cell in row.cells:
list.append(cell.text.replace("\n",""))
print(list)
1:元データ(PDFを画像で表示したもの)
2:WORDに取り込み
表形式を完全に保持できている。ただしセル内改行がある
3:pythonで読み出し、リスト化
リスト化できた!!!
あとはどうにでもなる。
残課題1:表からはみ出た部分の認識
(テキスト化はできるから、どうやってターゲットを見出すか)
残課題2:表内のターゲットセルの抽出
(すでにリストだから、セルを指定するだけ)
取り急ぎ、目処はついた!