にほんごのれんしゅう

日本語として伝えるための訓練を兼ねたテクログ

OSSでPDF作成とOCR変換を行う

モチベーション

  • WindowsMacで高いAdobe CCを契約し続けるのはオープン化が求められている世の中でAdobe Acrobat DC proに頼り続けるのは、危険な気がしてきた。
  • プロプラエタリなコードは、中身がブラックボックスになっているから神秘性が増し、一部の熱狂的信者を得やすいという傾向があるらしい。神秘性って特定の人に伝染するミームみたいなものらしい。
  • オープンソースは多角的な視点で評価され、多角的な進化を遂げていく。品質は一定せず、素晴らしいものからジャンクまで。ただし基盤は共通しているので、上に乗るソフトウェアの可塑性は高い。

神秘性を零落させたPDFが欲しい

  • できるらしい。まじか。
  • そもそもの勘違いが、PDFフォーマットがAdobe社の独占状態だと勘違いしたこと。仕様書は複雑でちょっと余裕の時間で読み上げて再実装できる量ではない。
  • ISO標準規格なはずなのに、アタッチメント(独自拡張)の範囲が広く、やっぱりAdobe社のPDFジェネレータを使うべきでない。もっとシンプルであるべきだ。
  • ImageMagickというソフトウェアがISOに基づいた再実装頑張っているらしい

オープンソース流にサーチャブルPDFを作成する

  • ImageMagickをAURからダウンロードしてコンパイル
  • Google謹製のOCRソフトウェア tesseractと、学習データ tesseract-data-jpnをAURからコンパイル&インストールすることで、画像認識などが可能である -- ただ、tesseractだけではpdfを解析できない
  • PDFのpypdfocrのモジュールをインストールすることでただのpdfから、OCR情報を組み込んだocr(サーチャブル)-pdfを作成可能である

PDFを作成する際の注意点

  • メモリをバカ食いする;感覚的にはメモリ6GByteのスワップ10GByteぐらいを700枚のA4を処理すると消費する
  • 変換オプションが必須; convert -limit memory 6GiB -limit map 10GiB -define registry:temporary-path=/data/tmp *.jpg -- これくらいないとimagemagickで768の限界ファイル数をまとめて一つのPDFにすることはできない
  • 環境変数 MAGICK_FILE_LIMIT を設定することで限界突破できるかも?

pypdfocr

  • pypdfocr -l jpn target.pdf これを行うだけで、OCR化されたpdfが出てくる 作業を行うディレクトリを一時ファイルで汚しまくるので、注意

まとめ

  • PDFというフォーマットは一応ISOで標準化されているが、多くの人が使いたいだろう動画やフラッシュやポートフォリオのような高度な機能はAdobe独自拡張になっている。
  • 一番痛いのは、文章全体最適化でかなりの容量削減になるのだが、その技術が標準化されて公開されていないってのが痛い。
  • Adobe謹製の最適化を見てると、画像文字を一番近いフォントで置き換えるようなことをやっているように見える(OCRした文字をdelボタンで消すことも可能なので多分そう。消すとバックグラント画像が自動補完される)。パターン認識機械学習の領域なので、標準化するまで技術がどう進化するか。