ツール連携

PDFの提案書をAIが正しく読めない理由

PDFの提案書をAIが正しく読めない理由

「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しかない場合

受領した契約書、官公庁の資料、取引先から届く仕様書。これらは元データが手に入りません。この場合は、

  1. テキスト層の有無を確認する
  2. 表を含むページは、別途手で構造化しておく
  3. 回答時に必ず「PDFのn ページ目」と出典を出す

出典を出せば、読み取りが完全でなくても使える

回答時に必ず「PDFのn ページ目」と出典を出す。AIの読み取りが完全でなくても、原典に飛べれば人が確認できます。3つの対処のうち、実務上いちばん効きます。

ページ数の多いPDFの扱い

数百ページのマニュアルや規程集は、まるごと渡しても精度が出ません。章や節の単位で分割し、それぞれに見出し情報を持たせた状態で取り込むと、該当箇所を引き当てやすくなります。

この分割作業は自動化できますが、目次構造が正しく入っているPDFかどうかで難易度が変わります。目次がリンクとして機能しているPDFは自動分割が効き、そうでないものは手作業が発生します。

判断の順番

  1. 元データ(Excel・Word・スライド)が社内にあるか → あればそちらを使う
  2. 無い場合、テキスト層があるか → 無ければOCRの工程を見込む
  3. テキスト層があるなら、コピーして貼り付けた文字が正しいか → 化けるなら画像扱いに倒す
  4. 表を含むか → 含むなら別途構造化が必要
  5. ページ数が多いか → 章単位の分割を検討する

1番目で大半が解決する

「PDFをどう読ませるか」より「PDFを使わずに済ませられないか」を先に考えてください。元のExcel・Word・スライドが社内にあるなら、そちらを使うほうが速く、精度も高くなります。

どのファイルから対象にすべきか、3分で分かります

元データがあるか、OCRが要るか、表を含むか。かんたんな設問に答えるだけで診断します。取り込み設計に入る前に見ておくと、手戻りが減ります。費用はかかりません。

この記事についてToUnicode CMap/ObjStm に関する記述は、当社が官公庁PDFの抽出ツールを実装した際の対応内容と、その時点で復元できなかったケースに基づいています(リポジトリ内の scripts/pdf-extract-text.py)。PDFの内部構造は ISO 32000 で規定されていますが、本記事は仕様の解説ではなく実装上の注意点です。「契約書や古い社内文書はスキャンPDFであることが多い」といった記述は、現場で観測した傾向であって調査統計ではありません。