原因を探っていたところ、PDFからのテキスト抽出に問題があることがわかった。抽出したテキストのJava Stringをプリントしたところ、行数はある程度の分量があるが、印刷可能文字がほとんど含まれていない。PDFからのテキストの抽出には iText を使っていた。
解決方法として、まずは iText の PdfReader や PdfReaderContentParser クラスを調べたが、テキスト抽出に関する設定は見つからない。別のPDFライブラリを使ってみようと思い、探したところ、Apache PDFBox を見つけた。
さて、PDFBox に置き換えてみたところ、テキスト抽出はうまくいった(ようだ)。しかし、CSV への変換がうまくいかない。Java String を byte[] にしてプリントしてみたところ、行末に '\f' (form-feed) が付いていた!
元のPDFにこれまでと違いがあるのか? セキュリティプロパティの「互換性があるバージョン」が「Acrobat 7.0およびそれ以降」に対して、これ以前のPDFでは「Acrobat 5.0およびそれ以降」であった。これが原因か?
最終的に、PDFのテキスト抽出は PDFBox で行い、各行を String.trim() してから処理することで解決した。
4月5日分までのデータを追加したデータセットを Google public data explorer にアップロードしたのでご覧あれ。福島県のデータも追加されている。
(2011-04-07分までのデータを追加し、スクリーンショットを2011-04-08に貼りこみ)
リソース:
- Apache PDFBox - http://pdfbox.apache.org/