本文へスキップ
LeedyBox
支援する

PDF からのテキスト抽出:テキストレイヤーと OCR

すぐにテキストを取り出せる PDF もあれば、ページの画像しか入っておらず OCR が必要な PDF もあります。このガイドでは、PDF にテキストが保存される仕組み、抽出したテキストが文字化けしたり順序が乱れたりする理由、OCR がスキャンしたページを読む仕組みと精度に影響する要因、結果を使う前に確認すべき点を説明します。

PDF ページの 2 つの種類

PDF のページがテキストを持つ方法は 2 通りあります。ワープロ、ブラウザー、デザインソフトから書き出した PDF の多くにはテキストレイヤーがあり、各文字はフォント内のコードとして保存され、ページ上の決まった位置に置かれます。スキャンしたページや撮影したページは別物です。ページ全体が 1 枚の画像なので、ソフトウェアから見ればそこにある文字はただのピクセルです。

ページの種類作られ方抽出の結果
テキスト PDFアプリから PDF に書き出し、または印刷保存された文字。たいていそのまま
スキャン PDFスキャナー、スマートフォンのカメラ、ファクスOCR が画像を読むまでは何もない
検索可能なスキャンスキャンにあとから OCR のテキストレイヤーを追加そのときの OCR 結果と、その誤り
アウトライン化した文字デザインソフトで文字を図形に変換文字はなく、OCR でしか読めない

どちらの種類かは、たいてい PDF ビューアーでわかります。単語を 1 つだけ選択できたり、検索ボックスで見つけられたりすれば、そのページにはテキストレイヤーがあります。ドラッグするとページ全体が 1 つのかたまりとして選ばれる、または検索しても何も見つからない場合は画像のページです。入力した報告書にスキャンした付録が付いている場合のように、1 つのファイルに両方が混ざることもあります。

テキストレイヤー抽出の仕組み

PDF は段落を保存しません。フォントと位置を持つ文字のかたまりを、多くは単語 1 つや数文字ずつ、ファイルを作ったプログラムが決めた順序で保存しています。抽出ツールはこのかたまりを読み、位置をもとに行を組み立て直します。

LeedyBox の PDF テキスト抽出ツールは、Firefox の PDF エンジンである PDF.js でこのかたまりを読みます。縦の位置が 5 ポイント(約 1.8 mm)を超えて変わると新しい行を始め、そうでなければかたまりの間に空白を入れてつなぎます。結果の各ページは --- ページ 1 --- のような印で始まります。1 段組みの文書はたいてい読みやすく出力されますが、いくつか副作用があります。

  • 字間の調整などで 1 つの単語が複数のかたまりとして保存されていると、単語の途中に空白が入ることがあります。日本語や中国語の文では、文字の間に空白が入ることもあります。
  • 段組み、サイドバー、キャプションは保存された順序で出力され、その順序は人が読む順序と異なる場合があります。
  • 上付き文字や注番号など、行より高い位置や低い位置にある文字は、独立した 1 行になることがあります。
  • ヘッダー、フッター、ページ番号も各ページのテキストに含まれます。

抽出したテキストが文字化けする理由

PDF の中では、テキストは Unicode の文字ではなくフォントのグリフコードとして保存されています。コードを文字に戻すには、ファイルに対応表が必要です。きちんと作られた PDF はフォントごとに ToUnicode 表を持っており、標準のエンコーディングを使うフォントは表がなくても解読できます。問題は、フォントが独自の番号を持つサブセットとして埋め込まれ、対応表がない場合に起こります。コードはファイルの外では意味を持たないため、画面では正しく見えても、抽出すると別の文字や記号、空の四角になります。

日本語、中国語、韓国語のフォントは、独自の表ではなく Adobe-Japan1 や Adobe-Korea1 などの定義済みの文字対応表(CMap)を使うことがよくあります。LeedyBox のツールは PDF.js と一緒にこれらの CMap を読み込むため、単純な抽出ツールでは文字化けする東アジアの文書の多くを正しく読めます。ほかによくある原因は、fi のように 2 文字を 1 つのグリフで保存した合字、文字を図形として描くため対応表がないことの多い Type 3 フォント、コピーしにくくするためにわざとエンコーディングを入れ替えた PDF です。

ページにテキストレイヤーがあると、ツールはそれが文字化けしていてもそのまま使い、そのページでは OCR を実行しません。こうしたページを OCR で読むには、PDF を JPG に変換で画像にしてから、画像からテキスト抽出(OCR)で読み取ってください。

LeedyBox のツールが OCR を使うとき

ツールはページごとに判断します。ページのテキストレイヤーが 15 文字未満の場合、そのページを通常の 2 倍の大きさ、約 144 ppi の画像として描き、「OCR言語」で選んだ言語と英語で Tesseract.js が読み取ります。そのため、入力したページとスキャンしたページが混ざった文書でも、入力したページは正確に読み、スキャンしたページだけが OCR にかかります。

印鑑やページ番号のために数文字だけあるスキャンページは、空のページとみなされて OCR にかかります。反対に、すでに 15 文字以上のテキストレイヤーがあるスキャンは OCR にかからないため、スキャナーが付けた質の低い OCR レイヤーもそのまま出力されます。OCR エンジンと言語データは初めて OCR を実行するときにleedybox.com からダウンロードされるので、最初のスキャンページは時間がかかります。PDF はブラウザー内で読み込まれ、アップロードされません。

OCR がピクセルを文字に変える仕組み

OCR はいくつかの段階で進みます。エンジンはまず画像を白黒に変え、文章のかたまり、行、単語を探します。この段階をページ分割と呼びます。次に、言語や文字体系ごとに学習したニューラルネットワークが各行を読み、その言語の単語リストも参考にしながら、もっともらしい文字の並びを選びます。結果は写しではなく推測です。0 と O、1 と l と I、rn と m のように形の似た文字を取り違えることがあり、言語データにない単語はより間違えやすくなります。

言語の設定はどのオプションよりも重要です。ラテン文字で学習したモデルはタイ語や日本語を読めず、選んでいない言語の文章はたいてい誤った文字になります。LeedyBox のツールでは「英語のみ」以外のすべての選択肢が選んだ言語に英語を組み合わせるので、英語の製品名を含む日本語の契約書のように、2 つの言語が混ざった文書に役立ちます。

OCR の精度に影響する要因

要因影響対策
解像度小さな文字は文字を見分ける細部が失われる300 DPI 以上でスキャン。小さな文字はさらに高く
傾きと湾曲傾いた行や本の湾曲したページは行の検出を妨げる平らにまっすぐスキャンし、真上から撮影する
コントラストとノイズ灰色の背景、しみ、裏写り、JPEG のノイズが文字のように見える白地に濃い文字のきれいなスキャン
フォント装飾的な書体、極端に細い・太い書体は誤認識が増える結果を丁寧に確認する
手書きTesseract は印刷された文字で学習しているよい結果は期待しにくいので、入力し直す
縦書き縦書きの日本語や中国語はよく誤認識される丁寧に確認するか、入力し直す

ツールはページを約 144 ppi で描くため、脚注や契約書の細かい文字は、よいスキャンでも読み取りにくいことがあります。そうしたページは、PDF を JPG に変換でより高い解像度の画像にし、画像からテキスト抽出(OCR)で小さな文字を 2 倍のサイズで読み直したり、コントラストを上げてから認識したりできます。

表、段組み、レイアウト

結果はプレーンテキストです。表は罫線の構造を失い、段組みのページは段ごと、または段をまたいで行ごとに出力されることがあり、テキストボックスやキャプションはファイルや OCR エンジンが決めた順序のどこかに入ります。単語を認識することとレイアウトを組み直すことは別の問題で、このツールが扱うのは前者だけです。数値の表はすべての値を原本と照合するか、表計算ソフトに入力し直してください。長い文書は、テキストを抽出したあとエディターで見出しと段落を整えてください。

結果の確認と整理

  • 数字、名前、日付をいくつか原本と比べてください。数字の OCR の誤りは見落としやすいものです。
  • 0 と O、1 と l と I、5 と S、rn と m のような取り違えやすい文字、抜けたアクセントや濁点を探してください。
  • 行末でハイフンにより分かれた単語や、段落の途中で切れた行をつなぎ直してください。
  • 続いたテキストが必要なら、ページの印、ヘッダー、ページ番号を削除してください。
  • 「テキストをコピー」または「.TXTとして保存」で結果を残します。保存されるファイルは UTF-8 のプレーンテキストです。

よくある質問

空になるページがあるのはなぜですか?

そのページにテキストレイヤーがなく、OCR も読める文字を見つけられなかったためです。スキャンが白紙、薄すぎる、小さすぎる、あるいは手書きの可能性があります。より鮮明にスキャンし直すか、PDF を JPG に変換でページを画像にし、画像からテキスト抽出のコントラストと拡大のオプションを使ってみてください。

パスワードで保護された PDF も読めますか?

開くときにパスワードを求める PDF は読めず、代わりにエラーが表示されます。権限がある場合は、PDF ビューアーでパスワードを入力して開き、保護を解除したコピーを先に保存してください。

検索可能な PDF を作れますか?

いいえ。結果はコピーしたり .txt ファイルとして保存したりできるプレーンテキストで、PDF 自体は変更されません。検索可能な PDF を作るソフトは、スキャンした各ページの上に見えない OCR テキストレイヤーを追加します。

長い文書で OCR が遅いのはなぜですか?

OCR エンジンと言語データをダウンロードしたあと、スキャンしたページを 1 ページずつ画像として描き、ブラウザー内で認識するためです。遅い端末では 1 ページに数秒以上かかることがあります。テキストレイヤーがあるページは認識の必要がないため、ずっと速く処理されます。