PDFテキスト抽出の基本、問題点、実践的解決策
2020年8月25日

16:00～17:20

アジェンダテーマ：

PDFテキスト抽出の基本、問題点、実践的解決策

プレゼンター：小林徳滋（koba@antenna.co.jp）

時間

見出し

内容

16:00
～
16:20

PDFのテキスト抽出の基本

PDFで文字を表示する仕組み、PDF内のテキストの扱いについて簡単に解説します。

16:20
～
16:40

PDFからテキストをコピー&ペーストするときの問題

PDFからテキストをコピー&ペーストする
際に経験することがある、様々なトラブルの例を紹介し、トラブルが発生する原因について説明します。

16:40
～
17:00

PDFのテキスト抽出のソリューション

現在、アンテナハウスで開発中のPDF高度テキスト抽出アプリケーションを紹介します。簡単なデモを予定しています。

17:00
～

質疑

チャットでの質疑応答と必要に応じて補足説明します。

※時間は目安です。進行の具合によって多少前後しますのであらかじめご了承ください。

はじめに：作り方によるPDFの大分類

ボーンデジタルPDFと電子化PDF

ボーンデジタルPDF


オフィスソフト・DTPソフトなどのアプリで出力したPDF、帳票ソフトやレポート作成ソフトから出力したPDF、など



ボーンデジタルPDFはフォントを使って文字が表示される

電子化PDF

紙をスキャンした画像から作るPDF、デジタル写真からPDF変換で作成するPDF



電子化PDFでは文字はビットマップ画像で表される。文字の表示にフォントを使わない



電子化PDFのテキスト抽出は、PDFを画像に戻してOCR処理で文字を認識する。OCR文字認識の精度は100%ではないた
め、誤った文字になる可能性がある※今日の話題は、主にボーンデジタルPDFからのテキスト抽出に関する内容です。

ボーンデジタルPDFからのテキスト抽出

たいていのボーンデジタルPDFからは、 PDFファイル内にある、文字を表示するためのデータからテキスト抽出できるこちらが今日のトピックです。



そのメリットOCRと違って文字コードの誤認識がない

文字の位置を精密に取得できるので位置情報を使える

そのデメリットPDFのセキュリティで、テキストのコピーが許可されている必
要がある

文字コードを取り出せないケースがある

PDFの作り手によって内部が千差万別なため、いろいろなパターンのPDFに対応するための開発工数が大きいフォント、文字、グリフ

フォントで文字を表示するとは



文字の形（字形）を表す絵のことをグリフという（用語）

フォントの中にはグリフを描画するデータがある

フォントに文字の識別子を入力して、グリフを探す

フォントのエンコーディングは、文字の識別子からフォント内のグリフへの対応関係を示す
グリフ

グリフ

グリフ

文字

文字

文字

メイリオ

悠明朝 Demibold

UD デジタル教科書体※同じ文字でも、フォントによってグリフが異なる

PDFのテキスト表示の仕組み


PDFのテキストとはページの特定位置に描かれる文字のこと



表示される文字の識別子と表示位置などのデータは、PDFのページ内のコンテントストリームに置かれている

フォントの情報はフォントリソースに置かれている

PDFリーダーは、コンテントストリーム内の文字の識別子とフォントのエンコーディングを元に、フォントの中のグリフを特定し、指定された位置に文字を印刷・表示する

コンテントストリームはページの中で細切れになっている

PDF仕様（ISO 32000-1）は文字の識別子からグリフを探して表示する仕組みについて決めているISO 32000-1:2008 「第9章 テキスト」を参照

プログラマーから見たPDFファイル
https://www.antenna.co.jp/pdf/reference/pdftext.html

PDFの表示PDF Text Extractor
PDFテキスト抽出

Times New Roman
悠明朝

フォント埋め込みなしで作成したPDFの内部〇コンテントストリーム
コンテントストリームに改行コードはないBT/F0 10.56 Tf 85.08192 729.83997 Td [(P) -1(D) -5(F) -1( ) 34(T) 66(e) 1(xt) 5( )11(E) -2(xt) 5(r) 3(a) 1(c) 1(t) 5(or) ] TJ
/F1 10.56 Tf 0.00004 -17.88 Td [<0050>
4<0044> 4<0046> -250<30C630AD> 12<30B930C8> 11<62BD51FA> ] TJ
ET
〇フォントリソース<</Font <</F0 9 0 R/F1 10 0 R>>/

使用フォント、フォントサイズ
行頭の位置表示する文字の識別子の並び

9 0 obj<</Type /Font/Subtype /TrueType/Name /F0/BaseFont/TimesNewRomanPSMT/FirstChar 32/LastChar 120/Widths [250 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 611 556 0 0 0 0 0 0 0 0 0 556 0 0 0611 0 0 0 0 0 0 0 0 0 0 0 0 444 0 444 0 444 0 0 0 0 0 0 0 0 0 500 0 0 333 0 278 0 0 0500]/Encoding /WinAnsiEncoding/FontDescriptor 11 0 R>>
endobj
10 0 obj<</Type /Font/Subtype /Type0/Name /F1/BaseFont /YuMincho-Regular/Encoding/UniJIS-UCS2-H/DescendantFonts [12 0 R]>>
endobjPDFの表示PDF Text Extractor
PDFテキスト抽出
フォント埋め込みで作成したPDFの内部

Times New Roman
悠明朝
コンテントストリームに改行コードはない〇コンテントストリーム
BT /F0 10.56 Tf 85.08192 729.83997 Td [<0033> -1<0027> -5<0029> -1<0003> 34<0037>
66<0048> 1<005B0057> 5<0003> 11<0028> -2<005B0057> 5<0055> 3<0044> 1<0046>
1<0057> 5<00520055> ] TJ
/F1 10.56 Tf 0.00004 -17.88 Td [<0033> 4<0027> 4<0029> -250<03C403AB>
12<03B703C6> 11<0BAA095C> ] TJ
ET
使用フォント、フォントサイズ〇フォントリソース<</F0 9 0 R/F1 10 0 R>>

行頭の位置表示する文字の識別子の並び

9 0 obj<</Type /Font/Subtype /Type0/Name /F0/BaseFont/JDTVFA+TimesNewRomanPSMT/Encoding /Identity-H/ToUnicode 12 0 R/DescendantFonts[11 0 R]>>
endobj
10 0 obj<</Type /Font/Subtype /Type0/Name /F1/BaseFont /JDTVFA+YuMincho-Regular/Encoding/Identity-H/ToUnicode 16 0 R/DescendantFonts [15 0 R]>>
endobj情報処理における文字とテキストデータとはコンピュータのプログラムで文字を取り扱うためには標準化された文字コードを使う。標準文字コードは大雑把には次のようなもの①

印刷物などで実際に使われている文字を収集する。

②

字義が同じで字体が同一視できる文字を一つにまとめる。これを包摂する（Unification）と言う。文字はこのように抽象化される③

こうして作成した文字集合の構成要素に一定の番号（コードポイント）を与える。できたものを符号化文字集合と言う④

コンピュータで情報処理するときはコードポイントを一定の計算式でバイトのならびに変換して取り扱う。これが、情報処理におけるテキストデータであり、この変換方式を符号化方式と言う

符号化文字集合ではUnicodeが一般的。Unicodeをコンピュータで使うときの符号化方式はUTF-8、UTF-16などが使われる

日本の符号化文字集合としてJIS文字規格は幾つかある。JIS
X0213:2012が最新のJIS文字規格

PDFテキスト抽出の内部処理


PDFでのテキストはコンテントストリーム内にある文字識別子の並び（表示する文字）のことである



情報処理のテキストは、Unicodeなどで表されたデータ



テキスト抽出では、次の二つの処理が必要①

PDF内の文字識別子の並びをUnicodeのテキストデータに変換する（文字コード変換）②

ページ上で文字が表示される位置を考慮しながら、テキストの流れを作る（文の流れの作成）

PDFからテキストを取り出すには

ユーザーがPDFファイルからテキストを取り出すとき：① PDFをリーダーで画面に表示する② 画面上で、テキストを選択し、コピーする③ メモ帳などにペーストする

ペーストされた結果を保存すると、形式的にはテキストデータになるPDFテキストのコピー＆ペーストの問題例


ペーストしたテキストが期待通りになっていないことが多い

PDFからテキストをコピー＆ペーストしたとき起きる問
題の実例のいくつかを紹介

テキストのコピー＆ペーストの問題いろいろ

１．文の順序が表示順と違う


画面に表示している順序とコピー＆ペーストしたテキス
トで段落の順序が異なる



Officeソフトから作成したシンプルなレイアウトのPDFでも起きることがある（例１）DTPソフトで作成した複雑なレイアウトのPDFではかなり頻繁にみられる（例２）例１

様式特小第２号（新型コロナウイルス感染症関係）（小規模事業主用様式）（厚生労働省）例２

中野市
別冊 広報なかの vol.1
P.10
https://www.city.nakano.nagano.jp/docs/2015121800024/file_contents/1011.pdf

特集
弾ける美味さ！
信州中野のおいしいぶどう
わが家のぶどう栽培
両親と妻と私の４人で「巨峰」、「ナガノパープル」、「ピオーネ」、「シャインマスカット」、「クイーンニーナ」など８種類のぶどうを栽培しています。わが家は元々リンゴなどを栽培する農家でしたが、祖父の代からぶどうの栽培を始め、私はぶどう農家としては３代目になります。
現在は「ＪＡ中野市ぶどう部会」の部会長を務めており、県外へぶどうのセールスに行く機会も多くあります。お客さんの「おいしい」という笑顔を見ると嬉しいもので、来年も良いものを作らなければという意欲が湧いてきます。
中野市のぶどうの歴史
本市で本格的に巨峰の栽培が始まったのは昭和28 年ごろだといわれています。ぶどうといえば「デラウェア」や「ナイアガラ」が主流だった当時、大粒で味が抜群に良い「巨峰」が登場しました。当初は栽培が難しく安定した生産ができなかったようですが、次第に栽培技術が発達し、安定生産が可能になったことで栽培農家が増え、中野市は日本有数の巨峰の産地となりました。
現在では、5月に出荷する超加温栽培、６～８月に出荷する加温・無加温栽培、９～ 11 月に出荷する露地栽培、11月に出荷する抑制栽培、12 ～ １月に出荷する冷蔵出荷と、5月から翌年１月までの長期間にわたり、味にこだわったぶどうを出荷しています。
仲間との支え合い
地域のぶどう農家には、産地の歴史を築いてきた先輩方だけでなく、若い後継者が入ってきて活気があり、とても心強く感じています。
畑で栽培技術の話をしたり、お互いのハウスのビニールを張る作業をしたりして、仲間同士支え合ってぶどう栽培をしています。昨年のことですが、突風でハウスのビニールが捲れ上がってしまったときに、園主が不在にもかかわらず近所の仲間たちが集まって直してくれたという出来事もありました。
中野のぶどうを全国へ
地元で採れた新鮮でおいしいぶどうを「おつかいもの」などに使っていただき、「信州中野のぶどう」を自慢の逸品として皆さんにも宣伝していただければと思います。
日本一の産地を目指して―。
味にこだわる信州中野のぶどう
武 たけだ田政まさし志（竹原）さん
信州中野発！
甘くて果汁がたっぷりのおいしいぶどうはどのように栽培されているのでしょうか？
巨峰の露地栽培の様子を、ＪＡ中野市の営農指導員の方に聞きました。
おいしいぶどうができるまで②発芽（４月）：春を迎え、ぶどうの木から若い新芽が顔を出します①剪定（１２ 月～２月上旬）： 枝を切ることにより降雪によるぶどう棚の倒壊を防ぎます
おいしいぶどうは、農家の皆さんの努力と愛情の結晶です！
⑩収穫（９月）：手間暇かけて育てたぶどうがついに収穫を迎えます⑨着色（８月）：巨峰は１ 粒ずつ着色が進んでいきます▲ＪＡ中野市でぶどうの営農指導員を務める清しみず水達たつや哉さん
10
別冊
なかの広報vol.１

テキストのコピー＆ペーストの問題いろいろ

２．文の配置とテキストの順
序がうまく対応しない

コピー＆ペーストで、文字や文の配置とテキストの順序が不適切になる

次のスライドに定義箇条形式からのテキスト抽出の例をしめす。



２段組の２つの段でテキストがつながってしまうことがある

表や図のコピー＆ペーストも面倒

表や図はむしろ画像にしてしまう方が良いときもある

例

定義箇条

Adobe Reader で選択して、コピー※定義と説明文が入り組む

テキストエディタに貼り付け

Title DITA Open Toolkit User Guide and Reference.
Edition, release First edition, August 10, 2006. Based on release 1.2.2 of DITA Open Toolkit.
DITA Open Toolkit is an open source, reference implementation of the OASIS DITA
standard (currently DITA 1.0)
Publishing
information
Anna van Raaphorst and Richard H. (Dick) Johnson, principals, VR Communications, Inc.
(http://www.vrcommunications.com).
Authors
This document is the definitive source of information about DITA Open Toolkit (OT). It
is also a product of the architecture and the recommended best practices, having been
Description
written entirely in DITA XML and produced using the principles and procedures describedin the document. With a few minor exceptions (in anticipation of some major enhancements
in release 1.3, we made use of the existing bookmap and PDF2 functionality), DITA Open
Toolkit User Guide and Reference is "vanilla DITA." By processing this document to agiven target environment you can see output with no specializations or other special
configurations applied. In general, we have found the vanilla outputs adequate for ourneeds, if not always glamorous or exciting.

テキストのコピー＆ペーストの問題いろいろ

３．文字間の空き、改行の扱い


和欧混色の場合、元のテキストにはスペースがないが、コピー＆ペースト後にスペースが入る



行末の改行の扱い※コピー＆ペーストを処理するPDFリーダーによる相違があるAdobe Reader で選択して、コピー半角空白が挿入される（黄色のところ）

テキストエディタに貼り付け

Google Chromeでコピーすると、半角空白挿入位置が異なる

FireFoxでコピーすると、さらに結果が異なる。行末に改行が入らない。

PDF内のテキストには和文と欧文間の空白文字はない。PDFの表示オペレータ（Tj/TJ）のパラメータで表示位置の調整が行われている。
改行も同様。

テキストのコピー＆ペーストの問題いろいろ

４．不要な文字が抽出される


文字が2重に出る ⇒ 強調を文字の２重表示で表現しているとき、コピー＆ペーストすると文字が2重になる。
最近のAdobe Readerは余り起きない

表示されていない文字が取れる⇒



PDFで非表示に設定されている文字など不必要なテキストがコピーされる

ヘッダー・フッター（柱）は抽出不要なので無視したい

ページ番号（ノンブル）は抽出不要なので無視したいテキストのコピー＆ペーストの問題いろいろ

５．文字コードを取得できない※この問題には回避策がないことが多い。


PDFのテキストを正しい標準文字コードに変換できない

カスタムエンコーディング、ユーザー定義文字などが使われているグリフがアウトライン化（画像化）されている※ラテン文字が抽出できない↑
Adobe Acrobat Readerで選択、コピーテキストエディタにペースト⇒

でビルドされています。
（ランタイムライブラリ が必要）

コピー＆ペーストには問題多い コピー＆ペーストはPDF内のテキストを再利用するための十分な解決策にならない！



その原因は、PDFファイルの作成目的は、テキストを表示・印刷することにあるため

 新しいツールが必要！
 簡単そうで困難な課題

開発中

テキスト抽出ツール
PDF Advanced Extractor α版

PDFファイルからテキストデータを抽出する



PDFのテキストをコピー＆ペーストで起きる典型的な問題として示した、例１～４については本ツールを使えば解決できる※ PDFファイルを解析する方法のため、残念ながら、例５は解決できないテキスト枠を自動認識


2段組、段抜きなどの領域を自動認識

テキスト枠を作成


画面上でマウスをドラッグしてテキスト枠を指定



見出しの指定もできる

テキスト枠の編集


枠選択



枠拡大



枠縮小



枠移動



枠結合



枠削除

枠の選択

テキスト枠の抽出順序変更


テキスト枠の内容を出力する順序を指定



既定値は作成順。
必要に応じて付け替え

指定漏れチェック

テキスト枠毎に、文字を抽出したときに脱落しないかを事前に確認できる

抽出範囲指定

ページの中でテキストを抽出する範囲を指定する

本文領域を範囲指定すると、ヘッダー、フッターを除外できる

画像保存


画像領域を指定して画像ファイルを作成



選択範囲を画像化。表やグラフなどの画像化に便利

PDF

PNG

HTMLタグ付き保存

HTMLタグ付きテキストでの保存

bodyの下位に出力するタグは次の8種類


段落タグ（p）



見出しタグ（h1～h6）

イメージタグ（img）



イメージ範囲にテキストがあるとき、テキストをimgタグのalt属性値に保存できる

HTML保存デモ製品概要項目内容

製品名

PDF Advanced Extractorバージョン

α版（仕様が変更される可能性があります）

動作環境

Windows 10

種別

デスクトップ製品 （サーバー上で使ったり、システムに組み込むことはできません）

価格

オープン価格

発売日

未定

製品Web

https://www.antenna.co.jp/pdfae/

64ビット版

α版試用と評価のお願い

本製品のα版をお試しください。



評価結果をお待ちしています。
次のURLから評価版をダウンロードいただけます：

https://www.antenna.co.jp/pdfae/eval.html
お問い合わせ先：oem@antenna.co.jp

参考資料
アンテナハウスPDF資料室


PDFからテキストを取り出す処理について「プログラマーから見たPDFファイル」
https://www.antenna.co.jp/pdf/reference/pdftext.html



PDFテキスト抽出の諸問題「簡単そうで簡単ではないPDFのテキスト抽出」
https://www.antenna.co.jp/pdf/reference/text-extractor.html