PDF は表示できますが、コピーできません。スキャンではない可能性があります。最初にテキスト レイヤーと文字マッピングを確認してください。
文字が無い場合は、直接的には「文字レイヤーが正常」とは判断できませんし、そのままスキャンしたものとも判断できません。以下にテキスト、代替文字、ページ画像参照がそれぞれ記録され、レビュー対象のステータスが出力されます。画像参照は、画像がページ全体を覆っていること、またはテキストが識別可能であることを証明するものではありません。
・テキストが抽出されない場合は直接スキャンと判断できず、画像参照からはページ全体が写真であるとは証明されません。
- 代替文字が表示される場合は、エンコードとフォントのマッピングを見直してください。不正なマッピングによって生成された擬似テキストは、非 null チェックに合格する可能性があります。
- この記事の診断は統計的特徴のみに基づいており、暗号化されたフォントや特殊なエンコーディングが見つかった場合は、手動による確認が必要です。
- 翻訳前にページの順序とテキストの整合性をチェックし、翻訳後はタイトル、テキスト、凡例が一致しているかどうかをチェックします。
PDF 内のテキストは表示されるがコピーできない場合は、スキャンされたコピーではないか、文字マッピングに問題がある可能性があります。この記事は、PDF コンテンツを抽出、翻訳、または構造化する必要がある開発者および文書処理者を対象に書かれています。読んだ後は、まずテキストレベルの問題と画像コンテンツを区別し、統一されたシグナルを使用して次に何をすべきかを決定する方法がわかります。
ここでのコードと例では、隔離された環境でのサンプル チェックに合格した合成サンプルを使用しており、すべての実際のファイルや製品のパフォーマンスを保証するものではありません。重要な書類を処理する前に、原本を保管し、本文の境界と許容事項に従って確認してください。
PDF は表示できますが、コピーすることはできません。スキャンしたコピーですか?一文の結論
直接的に判断することはできません。最初にテキスト レイヤーと文字マッピングを確認し、次にページ画像を確認して、最後にスキャンまたはマッピングの失敗であるかどうかを判断します。
| あなたの状況 | 推奨される実践方法 | 理由 |
|---|---|---|
| テキストを確認したり、文字化けや空白をコピーしたりできます | ToUnicode マッピングとフォント エンコーディングを確認する | ビジュアルは正常ですが、テキスト レイヤーは壊れています。これは主にマッピングが欠落しているか間違っていることが原因です。 |
| コピーされた文字は妥当に見えますが、セマンティクスが正しくありません | 抽出結果をビジュアルコンテンツと照合して確認する | ヒューリスティック マッピングでは間違った文字が出力され、非 null チェックに合格する可能性がある |
| 文字はありませんが、ページ内に写真が掲載されています | 画像にテキストが含まれているかどうかを確認し、OCR が必要かどうかを判断します | 画像の引用は全ページのスキャンと同等ではなく、テキストが判読できることを証明するものでもありません |
| テキストも画像もチェックアウトされていません | ページ描画コンテンツの表示 | ページが空白であると結論付ける方法はありません |
コピーしたコードが文字化けするのはなぜですか?
ユーザーはブラウザまたはリーダーでテキストを正常に表示できますが、コピーされたテキストは文字化けしたり、空白になったり、無関係な記号が表示されたりします。通常、これは破損したファイルではなく、必ずしもスキャンされたコピーである必要もありません。根本的な原因は、PDF 内のグリフ (Glyph)から Unicode へのマッピング テーブル (ToUnicode CMap)が見つからないか、間違っていることです。
レンダリング エンジンはグリフ インデックスに依存してビジュアル コンテンツを描画しますが、クリップボードおよびテキスト抽出ツールはマッピング テーブルに依存してセマンティック文字を復元します。この 2 つが壊れると、「見た目は正常だが、機械では判読できない」不良テキストの層が現れます。
文書の翻訳や構造化抽出を行う前に、まず問題がマッピングにあるのか、それともページ自体が画像であるのかを確認する必要があります。そうしないと、後続の OCR または NLP プロセスが間違った前提に基づいて行われることになります。
グリフ インデックスと Unicode マッピングの間のメカニズムを破壊する
PDF 仕様では、フォントにグリフのアウトラインと幅の情報のみを埋め込むことができますが、文字エンコーディングのマッピングは許可されません。次のような状況では破損が発生する可能性があります。
- PDF を生成するソフトウェアが ToUnicode テーブルを正しく書き込まない
- カスタム エンコードが使用されていますが、デコード ルールは提供されていません
現時点では、抽出プログラムは元のグリフ ID (CID)のみを取得できます。これらの ID はレンダラーにとっては意味がありますが、テキスト処理にとっては価値がありません。
一部のツールでは、ヒューリスティックを使用してマッピングを推測し、その結果、中国語の句読点をラテン文字に変換したり、数字を制御文字に置き換えたりするなど、妥当に見えても実際には間違った文字が生成される場合があります。この種の「ダミー テキスト」は、非 null チェックに合格できるため、純粋な空白よりも微妙ですが、ダウンストリーム リンクでサイレント データ汚染を引き起こす可能性があります。
このような問題を判断する鍵となるのは、テキストが選択できるかどうかではなく、抽出された文字列が視覚的なコンテンツと意味的に一貫しているかどうかを検証することです。
メモリ合成診断に PyMuPDF を使用する
次のコードは、メモリ内に入力を構築し、診断ロジックを検証します。
from io import BytesIO
from PIL import Image
import pymupdf
def inspect(page):
text = page.get_text().strip()
images = page.get_images()
if "\ufffd" in text:
state = "review_replacement_characters"
elif text:
state = "text_present_needs_semantic_review"
elif images:
state = "image_without_extracted_text"
else:
state = "empty_text_needs_review"
return {"state": state, "characters": len(text), "image_refs": len(images)}
with pymupdf.open() as doc:
doc.new_page().insert_text((50, 50), "Text sample")
doc.new_page()
picture = BytesIO()
Image.new("RGB", (16, 16), "red").save(picture, format="PNG")
doc.new_page().insert_image(pymupdf.Rect(10, 10, 100, 100), stream=picture.getvalue())
assert inspect(doc[0])["state"] == "text_present_needs_semantic_review"
assert inspect(doc[1])["state"] == "empty_text_needs_review"
assert inspect(doc[2])["state"] == "image_without_extracted_text"
assert inspect(doc[2])["characters"] == 0
上記のコードでは、diagnose_text_layer 関数は get_text("text") を通じて元のテキストを取得し、unicodedata.category を使用して制御文字と空白文字をフィルターし、有効なコンテンツの割合を計算します。同時に、get_text("blocks") を介して画像ブロックの存在を検出します。
2 つのアサーションは、印刷可能率が 0.9 より高い通常のドキュメントと、文字数が 0 のスキャンされたドキュメントの 2 つのケースを検証します。これは、コア分岐ロジックをカバーします。
この診断は統計的特徴のみに基づいていることに注意することが重要です。暗号化されたフォントまたは特殊なエンコーディングの場合は、引き続き手動での確認が必要です。
📊 コアの比較
次の表に、さまざまな信号に対応する検査の指示と、導き出すべきではない結論を示します。
| 信号 | 次のステップで確認すること | 出すべきではない結論 |
|---|---|---|
| 印刷可能なテキストがあります | セマンティクス、順序、ソースを確認する | 抽出できれば正しいということになります。 |
| 代替キャラもいるよ | エンコーディングとフォント マッピングを確認する | すべての文字が失われます |
| 写真はあるけど文字が無い | 画像にテキストが含まれているか確認してください | これは全ページスキャンに違いない |
| テキストも画像も検出されませんでした | ページ図面を見る | 白紙のページに違いない |
🎯 どの方法があなたに合いますか?
テキストは見えるけどコピーできないなら
ToUnicodeのマッピングやフォントエンコーディングのチェックを優先してください。これらは通常、マップブレークによって発生します。
コピーされたテキストが正常に見えるが誤りが含まれている場合、
ビジュアルコンテンツを使って段落ごとに結果を比較・抽出してください。単に無価値かどうかだけを見るのではなく。
ページに画像だけがありテキストがない場合
画像にテキストが含まれているか確認し、OCRが必要かどうかを判断します。 ページ全体がスキャンだと決めつけないでください。
もしあなたが文書翻訳の準備をしているなら
まずテキストの整合性チェックを行い、脱感作したサンプルを翻訳プロセスに引き渡します。
このチェックリストを文書翻訳に使ってください
まず、ページの順序、出典の場所、テキストの整合性を慎重に確認し、同じ脱感作サンプルを翻訳プロセスに提出します。 翻訳後も、タイトル、本文、キャプションが正しく一致しているかを確認する必要があります。テキストの滑らかさだけで判断するだけでは不十分です。
OmniDoc(製品エントリー)はマルチフォーマットの文書翻訳ポータルを提供しており、公式ウェブサイトではOCR、用語集、バイリンガルの参照機能を導入しています。 ファイルから直接読み始めたいなら、実際のサンプルを使ってこのパスを評価できます。
アップロード権を持つ不安ファイルを使い、この記事のチェックリストの結果を検証してください。 これは、OmniDocがこの記事で言及されたオープンソースライブラリや内部アルゴリズムを使用していることを主張するものではなく、製品性能テストを例に置き換えているわけでもありません。
❓ よくある質問(FAQ)
1. テキストを抽出できるなら、テキストレイヤーは正しいのでしょうか?
いいえ。 抽出されたコンテンツは意味論、順序、出典のチェックも必要であり、マッピングが誤っていれば一見妥当な文字を出力することがあります。
2. ページに画像がある場合、それはスキャンという意味ですか?
必ずしもそうとは限りません。 画像参照は、画像がページ全体を覆っていることやテキストが認識可能であることを証明するものではありません。画像にテキストが含まれているかどうかを確認する必要があります。
3. テキストも画像も検出されない場合、そのページは空白ということでしょうか?
これだけで結論を出すことはできません。 判断を下す前にページのレンダリングを確認してください。
4. この診断スクリプトはすべてのPDFに使えますか?
いいえ。 これは統計的特徴のみに基づいています。暗号化されたフォントや特別なエンコーディングは依然として手動の検証が必要です。
📝 概要
PDFは読むことはできますがコピーはできません。まずテキストレイヤーや文字マッピングを確認し、次に画像の内容を確認し、最終的にスキャンコピーかどうかを判断します。 処理前に、元の書類を保管し、各品目を検査項目で確認してください。


