PDF、組版と文書変換のアンテナハウス株式会社

サイトマップ
hr トップ
ページ
hr デスクトップ
製品情報
hr システム
製品情報
hr DITA
サービス
hr 電子書籍
サービス
hr サポート hr 製品の購入
について
hr お問い合わせ hr 会社案内 hr

スペース

簡単そうで簡単ではないPDFのテキスト抽出

更新日: 2018/12/19

PDFを、Adobe Readerを始めとするPDFビューア(PDFリーダーとも)で表示し、画面上でページ全体や矩形または任意の領域のテキストについて抽出したり、コピー&ペーストして再利用することがあります。しかし、たまにコピーして取り出したテキストについて、文字やその並びなどが期待したとおりに抽出できていないということが起こります。これはなぜでしょうか。その理由について考えてみます。

順序、またはつながりの認識が難しい

印刷された文字をテキストで表現するには、どういう順序でテキスト化するかを決める必要があります。紙の上にレイアウトされた文字の並びに適切な順序を指定するのは、必ずしも簡単ではありません。

どの順序で文字を取り出せば、整理された情報として意味を持つテキストになるか?

PDFに限らず印刷物での一連の文字は、行頭から始まり、行末へ流れます。 文の途中で行末に至ると次の行の行頭へ移り、再び行末へ流れます。こうした文字の流れを目で追うことで、自然に文字を、意味を持つひとかたまりの情報として捉えられるようになります。
PDFはどうでしょうか。

PDFのテキスト抽出に必要なこと

文字の流れと行の流れ
画面上で開いたPDFのある特定のページ全体、またはページ内の特定の矩形領域を選択してその中の文字を外部に取り出すとき、取り出した文字を、文章の流れに従って一列に並べる必要があります。このためには、表示された特定の領域内にある文字と行の進行方向のほか、領域内の行頭と行末を認識することが必要です。
ブロック構成の順序
  • ページ内が段組み、コラム、表、図などのブロックで分割・構成されているとき、ブロックとして適切に認識すること。
  • コピー元として複数のブロックを選択したとき、異なるブロックのテキストを混合しない。

例えば、選択した矩形領域の中でテキストが二段組で配置されているときは、2つの段のテキストは改段の位置でのみ繋げなければ意味のあるテキスト抽出になりません。
また、選択した矩形領域が左右にフロートで配置されているブロックを含むときは、本文のテキストとフロートで配置されているブロック内のテキストは分離させておかなければ、やはり意味のあるテキストは抽出できません。

本文以外の情報と区別する
一般に、印刷用PDFのテキストは基本版面と版面外に分離できます。ページの上下(稀に小口)に配置される柱やノンブルと基本版面の本文とは分離する必要があります。
表の場合
セル単位に文字を区切る必要があります。ブロックと同様に、異なるセル内のテキストを繋げてはいけません。
注の扱い
傍注(横書きの場合)、頭注(縦書き)などは、本文中の語句の補助的な説明文で、「本文」ではないため、本文の文字とは区別するべきでしょう。

テキストの並びは画面上(見た目)と、PDFファイル内部では違う

多くのPDFビューアでは、PDFファイルからテキストを取り出すとき、ファイル内に格納されている順番で取り出しています。実は、この「ファイル内に格納されている順番」というのが曲者で、必ずしも画面上で表現されるような順番になっているわけではないのです。

どういうことでしょうか?
PDFファイルの内部のテキストはPDFファイルの制作ソフトの都合の良いように格納されています。その格納の順序が、テキストを取り出すときの順番として利用されるため、抽出した際のテキストの順番が、時々意図したとおりの並びになっていなかったりするのです。

しかし、これは画面上の見た目で順序が異なることを見つけることはできず、コピーして取り出したテキストをメモ帳などにペーストして結果を見てみないことにはわかりません。

次の簡単な例を示します。画像はクリックすると拡大します。

test1.pdf
test1.pdf
test2.pdf
test2.pdf

上図は、PDFビューアで「test.pdf」「test2.pdf」を並べてみた画像です。見る限り、両者には全く差がありません。しかし、これを全文コピー&ペーストしてみると、2つのPDFファイルから取り出したテキストの順番が違うことがわかります。

参考記事:電子書籍、電子出版のCAS-UBブログ 「簡単そうで難しいPDFからのテキスト抽出 解決策を考えます open_in_new

表示されているテキストの文字コードが取得できない!?

ごくたまに、PDFビューア上で検索やコピー操作はできるのに、メモ帳などにペーストしようとすると、文字化けしてしまうPDFに出会います。

PDFを画面上で表示したとき、文字は線画またはビットマップ画像で表されています。これを、「字形」(グリフ)といいます。
PDF上の文字を外部にテキストとして取り出すには、字形から文字コードに対応付けができなければなりません。

仮に、テキストの文字コードをUnicodeで表そうとした場合、画面上の文字(字形)には、テキストファイルではUnicodeのコード番号(コードポイントとも)への対応付け(対応テーブルの用意)が必要になります。

ですが、必ずしもビューア画面上の文字(字形)が、文字コードと対応付けられているわけではありません。どういう場合に起こりうるでしょうか。

  • PDFにはフォントが埋め込まれているが、PDFの内部に字形と文字コードの対応テーブルが用意されていないとき。
  • 文字がアウトライン化されてしまっているとき。
  • Unicodeの私用領域(外字領域とも)の文字コードが使われているとき。
  • 記号類など、同じ記号がUnicodeにもあるが、PDFでは字形ではなく「画像」として埋め込まれているとき。
  • アウトライン化:文字情報やオブジェクトの縁取りをして線画(図形化)にしてしまうこと。
  • Unicodeの私用領域:当事者間の私的な合意によって文字(外字)を定義できる領域で、文字の規格が定義されていないため、星やニコニコマークなど様々な特殊文字に使われている。

これ以外にも、たまに原因不明で文字が化けてしまうことがあります。また、古いPDFでは、強調指定の文字をコピー&ペーストしたとき、二重にテキストが取得されてしまったりなど、本当に一筋縄ではいかないPDFのテキスト抽出です。

お問い合わせについて

アンテナハウスでは、この問題を解決するご提案をいろいろと用意しておりますので、お困りの方は一度ご相談いただければと存じます。

フォームがご利用いただけない場合は、直接 sis@antenna.co.jp までご連絡ください!


スペース
トップページサポートお問い合わせ会社案内
サイトマップ個人情報保護の考え方とお願い
Copyright Antenna House, Inc. All rights reserved.
Antenna House is a trademark of Antenna House, Inc.