golden-luckyの日記スマートフォン用の表示で見るgolden-luckyの日記ツイッターより長くなるやつ2019-12-01PDFから「使える」テキストを取り出す(第1回)PDFからテキストを取り出すのは、意外と大変です。それにはいくつかの理由があるのですが、もっとも根本的な点で真っ先に解決が必要になるのは、人間が雑に文字としてみなしている絵(「グリフ」)をコンピューターで扱えるような「文字」にする方法です。これには2つのアプローチが考えられます。PDFビューワーでファイルを開いた状態から何とかしてテキストを読み取るPDFファイルの中身を解析してテキストを抜き出すこのうち2つめの話は明日以降にして、今日は1つめの話をします。PDFビューワーでファイルを開いた状態から何とかしてテキストを読み取る方法この方法は、言ってみれば、人間もしくは人間のように振る舞うソフトウェアによりPDFビューワーの表示を「視覚的に読む」ということです。これはPDFの本来の使い道に即した手法です。PDFというのは、グリフ(文字の形)をページ上に表示するための汎用の仕組みだからです。ここで厄介なのが、グリフは文字そのものではない、という点です。「文字そのもの」と書くと哲学的に聞こえますが、ここでは「さまざまなコンピューター環境の間でやり取りして文字としての意味が保たれるようなもの」くらいの意味だと思ってください。ようするに、「コンピューターで扱えるように表現されてる文字」です。このように「文字」を定義すると、「PDFからテキストを取り出す」という目標は、「PDFファイルをビューワーで開いたときに表示される絵から、文字を手に入れる」と言い換えられます。「文字」をもうちょっと狭く、「なんらかの符号化方式でUnicodeの文字集合のどれかを表してる情報」だとすれば、「PDFファイルからUTF-8のテキストデータを手に入れる」と言ってもかまわないでしょう。なんでこんな回りくどい話をしてるんでしょうか。それは、「人間がPDFをビューワーで開いて読む」というのが、コンピューターにとってはそんなに自明な話ではないことを強調したいからです。人間は通常、PDFを目で読むわけですが、そのときは「文字」、つまりコンピューターで扱えるような表現としての文字を抜き出しているわけではありません。PDFはもともと人間が目で見るドキュメントのために作られたデータフォーマットなので、そもそもコンピューターで扱えるような文字を取り出しやすいようにはできていないのです。人間がPDFを読むように、コンピューターでPDFのページに表れる「グリフ」をいい感じに「文字」にする方法があれば、PDFからテキストを取り出せます。そのための方法としていま利用できるのは、いわゆるOCRくらいでしょう。ちなみに、PDFビューワーで開いて文字列を選択してコピペする、みたいな方法は、コンピューターでコピペの操作の対象になるのがそもそも「グリフ」ではなく「文字」なので、人間がPDFを読むのとはまったく違う作業です。PDFからコピペしたら意図した文字とは違う文字しか取れなかった、という経験がある人も多いと思いますが、これはまさにPDFに表れている「グリフ」は「文字」ではないことによります。ちなみに、フォントが埋め込まれているかどうかはまた別の話で、フォントは埋め込まれているけど意図通りにコピペできない、みたいな例もよくあります。いうわけで人間のようにグリフから文字を取り出すにはOCRするしかないと思うのですが、これには物理装置の認識精度みたいな手元のパソコンで気軽に手を出しにくい要素も絡むので、あまりちゃんと調査してません。OCRかどうかに限らず、「人間のようにPDFのグリフから文字を取り出す」手法は画像解析やAIの応用が進めばかなり未来がある方法だと思うので、いつか取り組みたいと思います。PDFの仕様について(ちょっと脇道)ところで、PDFのビューワーといえばAdobeのAcrobatなんですが、これはみんなが想像している以上にすごいツールです。PDFファイルをできるだけ正しく閲覧するには、現時点ではAdobe社の技術に頼るしかありません。いま「PDFファイルをできるだけ正しく」と言いましたが、正しいとか正しくないとか言えるのは、PDFに国際的に標準化された仕様があるからです。2.0というバージョン名で呼ばれています。2.0に準拠して生成されたPDFはぼくの周りにでは滅多に見かけません。2.0についての話はこれでおしまいです。1.x系列に準拠したPDFのことを指します。32000-1:2008に相当します。1.6よりも若いバージョンの仕様は、ISOによって標準化されたものではなく、Adobeによるプロプラな仕様でした。そもそもPDFは、「さまざまなシステムで同じ見た目で表示できるドキュメント形式」を目指してAdobeが開発したファイル形式です。PostScriptと同じことができる軽量で高速なドキュメント形式として考案されたらしいんですが、いつの間にかPostScriptそのものより多機能になってしまいましたね...。Acrobat以前の歴史はわりと面白いので、みんなこの記事を読むといいと思います。https://creativepro.com/scanning-around-gene-camelot-carousel-acrobat/ありがたいことに、AdobeではPDFの仕様に対するリファレンスを無償で配布してくれています。1.7についてAdobeが配布しているのは、PDFリファレンスの「第6版」です。1.7なら第7版になりそうなものなんですが、PDFのバージョンを1.2にしたときにAdobeではPDFリファレンスを第2版にせず第1.1版にしたので、それからずっと1ずれてしまっています。1.7の仕様を網羅したPDFリファレンス第6版にあたることになります。PDF形式で配布されているので、必要に応じてAcrobatで開いて見てもいいんですが、1310ページもあると紙でめくったほうが目的の情報に素早く行き当たるので、当社ではすべて印刷してパラパラ眺められるようにしています。明日は「PDFファイルの中身を解析してテキストを抜き出す」について書ければと思います。00:17PDFから「使える」テキストを取り出す(第1回)Tweet広告を非表示にする関連記事2019-12-23XMLからEPUBを作る昨日までの話をふりかえってみます。出版社を作って4年が経ちました直販サイトを作って書籍を売ることTeXの脚注をなんとかするXMLからEPUBを作る月別アーカイブはてなブログをはじめよう!golden-luckyさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。