「PDFをAIに読ませたのに、内容を理解してくれない」という相談はよくあります。多くの場合、AIの問題ではなくPDFの中身が想像しているものと違うことが原因です。
PDFには3種類ある
まずここが分かれ目です。「2種類」だと思っていると、3つ目で必ず詰まります。
| 種類 | 中身 | AIから読めるか |
|---|---|---|
| テキスト層あり | 文字が文字として入っている | 読める |
| 画像のみ | 紙をスキャンした画像 | そのままでは読めない |
| テキスト層はあるが文字化けする | 文字の並びは入っているが、Unicodeへの対応表が無い | 読めたつもりで別の文字になる |
「選択できるか」では見抜けない
PDFを開いて文字を選択し、別の場所に貼り付けてください。選択できなければ画像です。ここまでは知られています。
問題は3つ目で、選択もコピーもできるのに、貼り付けると別の文字になります。選択できた時点で安心すると見逃します。契約書・受領した請求書・古い社内文書はスキャンPDFであることが多く、その場合はOCRの工程が別途必要になります。
なぜ「テキスト層があるのに文字化けする」のか
PDFの中で文字は、必ずしも文字コードで持たれていません。フォント内部のグリフ番号で持たれていることがあります。その番号をUnicodeに戻すための対応表が ToUnicode CMap で、これが無い、または壊れていると復元できません。
画面には正しく表示されます。フォントが番号どおりに字を描いているだけで、その字が何の文字なのかという情報は、別に持たれているからです。
官公庁のPDFで実際に踏んだ内容
当社では、官公庁が公開しているPDFを扱うために抽出ツールを自作しています。そのときに対応が必要だったのは次の3点でした。
- 圧縮オブジェクトストリーム(
/ObjStm)——官公庁PDFで多用されており、これを展開しないと本文に到達できない ToUnicode CMapの解釈——CIDからUnicodeへの変換- 復元できないケースが残る——ToUnicodeを持たず Adobe-Japan1 だけを指定したCIDフォントは、現状復元できていない
市販のツールを使う場合も、この3つ目は残ります。「抽出できたが中身が違う」状態でAIに渡すのが最悪なので、抽出結果を必ず目で確認してから取り込んでください。
OCRを挟むと精度が段階的に落ちる
OCRは万能ではありません。手書きの追記、印影の重なり、傾いたスキャン、表組み。これらは誤認識の温床です。「読めるが、部分的に間違っている」という最も厄介な状態になります。
OCR経由のPDFを、数値の根拠に使わない
金額や日付が1桁ずれて認識される可能性がある以上、OCR経由のPDFを数値の根拠にする設計は避けてください。
現実的なのは用途を分けることです。人が読んで判断する用途はOCRで足りますが、数字を取り出して計算に使う用途は、元データ側から取る経路を別に用意します。
テキスト層があっても崩れるケース
文字が入っていても、読み順が想定どおりとは限りません。
- 2段組み——左段と右段が交互に混ざって出てくる
- 表——セルの区切りが失われ、数字が羅列になる
- ヘッダー・フッター——全ページに同じ文が挟まり、文章が分断される
- 脚注——本文の途中に注釈が割り込む
「A社の料金は」と聞いてB社の金額が返る
料金表や仕様一覧をPDFで持っている場合、行と列の対応が壊れた状態でAIに渡っている可能性があります。テキスト層があっても、読み順が想定どおりとは限りません。
元データがあるなら、PDFを使わない
最も効果的な対処はこれです。PDFは配布・印刷のための形式であって、データを保持する形式ではありません。
- 料金表 → 元のスプレッドシートを参照する(Excelを対象にする場合の整え方)
- 提案書 → 元のスライドやドキュメントを参照する
- マニュアル → 元のWord、あるいは社内Wikiを参照する
PDFは配布・印刷のための形式であって、データを保持する形式ではない
「PDFしかない」場合だけ、PDFを対象にする。この順序で考えると、扱いにくいファイルの多くは対象から外れます。
それでもPDFしかない場合
受領した契約書、官公庁の資料、取引先から届く仕様書。これらは元データが手に入りません。この場合は、
- テキスト層の有無を確認する
- 表を含むページは、別途手で構造化しておく
- 回答時に必ず「PDFのn ページ目」と出典を出す
出典を出せば、読み取りが完全でなくても使える
回答時に必ず「PDFのn ページ目」と出典を出す。AIの読み取りが完全でなくても、原典に飛べれば人が確認できます。3つの対処のうち、実務上いちばん効きます。
ページ数の多いPDFの扱い
数百ページのマニュアルや規程集は、まるごと渡しても精度が出ません。章や節の単位で分割し、それぞれに見出し情報を持たせた状態で取り込むと、該当箇所を引き当てやすくなります。
この分割作業は自動化できますが、目次構造が正しく入っているPDFかどうかで難易度が変わります。目次がリンクとして機能しているPDFは自動分割が効き、そうでないものは手作業が発生します。
判断の順番
- 元データ(Excel・Word・スライド)が社内にあるか → あればそちらを使う
- 無い場合、テキスト層があるか → 無ければOCRの工程を見込む
- テキスト層があるなら、コピーして貼り付けた文字が正しいか → 化けるなら画像扱いに倒す
- 表を含むか → 含むなら別途構造化が必要
- ページ数が多いか → 章単位の分割を検討する
1番目で大半が解決する
「PDFをどう読ませるか」より「PDFを使わずに済ませられないか」を先に考えてください。元のExcel・Word・スライドが社内にあるなら、そちらを使うほうが速く、精度も高くなります。
どのファイルから対象にすべきか、3分で分かります
元データがあるか、OCRが要るか、表を含むか。かんたんな設問に答えるだけで診断します。取り込み設計に入る前に見ておくと、手戻りが減ります。費用はかかりません。
この記事について:ToUnicode CMap と /ObjStm に関する記述は、当社が官公庁PDFの抽出ツールを実装した際の対応内容と、その時点で復元できなかったケースに基づいています(リポジトリ内の scripts/pdf-extract-text.py)。PDFの内部構造は ISO 32000 で規定されていますが、本記事は仕様の解説ではなく実装上の注意点です。「契約書や古い社内文書はスキャンPDFであることが多い」といった記述は、現場で観測した傾向であって調査統計ではありません。