チュートリアル

簡単にライブラリーを使用するためのチュートリアルコレクション

チュートリアル»pdf python extract

Displaying items by tag: pdf python extract

Python を使用した PDF テキスト抽出のチュートリアル

PDF ファイルは至る所にあります。契約書や研究論文から電子書籍や請求書まで。フォーマットを完璧に保持できますが、PDF からのテキスト抽出は、特に大規模または複雑なドキュメントの場合、課題となる可能性があります。手動でのコピーは遅いだけでなく、正確性に欠けることも多いです。

ワークフローを自動化する開発者、コンテンツを処理するデータアナリスト、あるいは単に迅速なテキスト抽出が必要な方にとって、プログラムによる方法は貴重な時間と労力を節約できます。

この包括的なガイドでは、Spire.PDF for Python を使用して Python で PDF ファイルからテキストを抽出する方法を学びます。これは強力で使いやすい PDF 処理ライブラリです。すべてのテキストの抽出、特定のページや領域のターゲット指定、非表示テキストの無視、テキストの位置やサイズなどのレイアウト情報の取得について解説します。

クイックナビゲーション


PDF からテキストを抽出する理由

PDF からのテキスト抽出は、多くのユースケースで不可欠です:

  • データ入力とドキュメント処理の自動化 - 手動のコピー&ペースト操作を排除
  • 全文検索とインデックス作成の有効化 - アプリケーションで PDF コンテンツを検索可能にする
  • レポートとアンケートのデータ分析の実行 - 構造化ドキュメントから洞察を抽出
  • 機械学習と自然言語処理のためのコンテンツ抽出 - PDF ソースからトレーニングデータを準備
  • PDF を他の編集可能な形式に変換 - PDF を Word、Excel、またはプレーンテキストに変換

プログラムによるテキスト抽出は、手動の方法では実現できない精度、速度、スケーラビリティを提供します。


環境設定: Spire.PDF for Python のインストール

Spire.PDF for Python は、すべての PDF 操作ニーズを簡素化する包括的で使いやすい PDF 処理ライブラリです。単純な PDF ドキュメントと複雑な PDF ドキュメントの両方でシームレスに動作する高度なテキスト抽出機能を提供します。

インストール

ライブラリは pip を介して簡単にインストールできます。ターミナルを開き、次のコマンドを実行してください:

pip install spire.pdf

また、Spire.PDF for Python パッケージをダウンロードして、プロジェクトに手動で追加することもできます。


PDF からすべてのテキストを抽出 (基本例)

PDF からすべてのテキストをすばやく読み取りたい場合、この簡単な例がその方法を示しています。各ページを反復処理し、PdfTextExtractor を使用して完全なテキストを抽出し、スペースと改行を保持した状態でテキストファイルに保存します。

from spire.pdf.common import *
from spire.pdf import *

# PdfDocument オブジェクトを作成
doc = PdfDocument()

# PDF ドキュメントを読み込む
doc.LoadFromFile('/Sample.pdf')

# 抽出したテキストを保持する変数を準備
all_text = ""

# PdfTextExtractOptions オブジェクトを作成
extractOptions = PdfTextExtractOptions()
# 空白を含むすべてのテキストを抽出
extractOptions.IsExtractAllText = True

# すべてのページをループしてテキストを抽出
for i in range(doc.Pages.Count):
    page = doc.Pages.get_Item(i)
    textExtractor = PdfTextExtractor(page)
    text = textExtractor.ExtractText(extractOptions)
    # 各ページのテキストを追加
    all_text += text + "\n"

# 抽出したすべてのテキストをファイルに書き込む
with open('output/全ページのテキスト.txt', 'w', encoding='utf-8') as file:
    file.write(all_text)

コードの説明

  • LoadFromFile: 指定されたパスから PDF ドキュメントを読み込む
  • PdfTextExtractOptions: 抽出動作を設定
  • IsExtractAllText: True に設定すると、空白とフォーマットを保持
  • PdfTextExtractor: 各ページから実際のテキスト抽出を実行
  • ExtractText: 抽出したテキストを文字列として返す

この基本的なアプローチは、レイアウトや位置を気にせずに完全なテキストコンテンツが必要な単純なドキュメントに最適です。


高度なテキスト抽出機能

何をどのように抽出するかをより細かく制御するために、Spire.PDF for Python は高度なオプションを提供します。特定のページや領域からコンテンツを選択的に抽出したり、テキストの位置やサイズなどのレイアウト詳細情報を取得したりすることで、特定のデータ処理ニーズに適切に対応できます。

選択したページからテキストを取得

PDF 全体を処理する代わりに、テキスト抽出のために特定のページをターゲットにすることができます。これは、タスクに関連するセクションのみが必要な大規模なドキュメントで特に役立ちます。

from spire.pdf.common import *
from spire.pdf import *

# PdfDocument オブジェクトを作成
doc = PdfDocument()

# PDF ドキュメントを読み込む
doc.LoadFromFile('/Sample.pdf')

# PdfTextExtractOptions オブジェクトを作成し、完全なテキスト抽出を有効化
extractOptions = PdfTextExtractOptions()
# 空白を含むすべてのテキストを抽出
extractOptions.IsExtractAllText = True

# 特定のページを取得 (例: 2 ページ目)
page = doc.Pages.get_Item(1)

# PdfTextExtractor オブジェクトを作成
textExtractor = PdfTextExtractor(page)

# ページからテキストを抽出
text = textExtractor.ExtractText(extractOptions)

# UTF-8 エンコーディングを使用して抽出したテキストをファイルに書き込む
with open('output/ページのテキスト.txt', 'w', encoding='utf-8') as file:
    file.write(text)

以下は抽出結果のプレビューです:

Python を使用して選択した PDF ページからテキストを抽出

主な利点

  • 処理時間の短縮 - 必要なもののみを抽出
  • メモリ使用量の削減 - 不要なコンテンツの読み込みを回避
  • 対象を絞ったデータ抽出 - 関連セクションに集中
  • 柔軟なページ選択 - ループを変更して単一または複数のページから抽出

定義された領域からテキストを取得

フォームや請求書などの構造化ドキュメントを扱う場合、特定の領域からテキストを抽出する方が効率的です。矩形領域を定義し、ページ上のその境界内にあるテキストのみを抽出できます。

from spire.pdf.common import *
from spire.pdf import *

# PdfDocument オブジェクトを作成
doc = PdfDocument()

# PDF ドキュメントを読み込む
doc.LoadFromFile('/利用規約.pdf')

# 特定のページを取得 (例: 2 ページ目)
page = doc.Pages.get_Item(1)

# PdfTextExtractor オブジェクトを作成
textExtractor = PdfTextExtractor(page)

# PdfTextExtractOptions オブジェクトを作成
extractOptions = PdfTextExtractOptions()

# テキストを抽出する矩形領域を定義
# RectangleF(左, 上, 幅, 高さ)
extractOptions.ExtractArea = RectangleF(0.0, 100.0, 890.0, 80.0)

# 指定された領域から空白を保持してテキストを抽出
text = textExtractor.ExtractText(extractOptions)

# UTF-8 エンコーディングを使用して抽出したテキストをファイルに書き込む
with open('output/矩形領域のテキスト.txt', 'w', encoding='utf-8') as file:
    file.write(text)

以下は抽出結果のプレビューです:

Python を使用して PDF の定義された領域からテキストを抽出

矩形座標の理解

RectangleF パラメーターは抽出領域を定義します:

  • left: 矩形の左端の X 座標
  • top: 矩形の上端の Y 座標
  • width: 矩形の幅
  • height: 矩形の高さ

座標はポイント単位で測定されます (1 ポイント = 1/72 インチ)。原点 (0, 0) はページの左上隅にあります。

ユースケース

  • 請求書からヘッダー情報を抽出
  • 特定の場所からフォームフィールド値を読み取る
  • 署名ブロックまたはフッターコンテンツをキャプチャ
  • 周囲のテキストから表やグラフを分離

抽出中に非表示テキストを無視

一部の PDF には、アクセシビリティや OCR レイヤーによく使用される非表示または不可視のテキストが含まれています。ユーザーに実際に見えるコンテンツのみに焦点を当てるために、抽出中にこのようなコンテンツを無視することを選択できます。

from spire.pdf.common import *
from spire.pdf import *

# PdfDocument オブジェクトを作成
doc = PdfDocument()

# PDF ドキュメントを読み込む
doc.LoadFromFile('/利用規約.pdf')

# PdfTextExtractOptions オブジェクトを作成
extractOptions = PdfTextExtractOptions()
# 抽出中に非表示テキストを無視
extractOptions.IsShowHiddenText = False

# 特定のページを取得 (例: 2 ページ目)
page = doc.Pages.get_Item(1)

# PdfTextExtractor オブジェクトを作成
textExtractor = PdfTextExtractor(page)

# ページからテキストを抽出
text = textExtractor.ExtractText(extractOptions)

# UTF-8 エンコーディングを使用して抽出したテキストをファイルに書き込む
with open('output/非表示テキストを除く.txt', 'w', encoding='utf-8') as file:
    file.write(text)

非表示テキストを無視する理由

  • よりクリーンな出力 - OCR アーティファクトとアクセシビリティレイヤーを削除
  • 正確な表現 - ユーザーに表示されるコンテンツのみを抽出
  • ノイズの削減 - メタデータやウォーターマークテキストを排除
  • より良いデータ品質 - 処理有意义的なコンテンツに集中

この機能は、OCR ソフトウェアで処理されたスキャン済みドキュメントを扱う場合に特に重要です。

位置 (座標) とサイズ情報付きでテキストを取得

レイアウトに敏感なアプリケーション (PDF コンテンツを編集可能な形式に変換したり、ページ構造を再構築したりするなど) では、テキストをその位置とサイズとともに抽出できます。これにより、コンテンツの解釈と使用方法を精密に制御できます。

from spire.pdf.common import *
from spire.pdf import *

# PdfDocument オブジェクトを作成
doc = PdfDocument()

# PDF ドキュメントを読み込む
doc.LoadFromFile('/利用規約.pdf')

# ドキュメントのすべてのページをループ
for i in range(doc.Pages.Count):
    page = doc.Pages.get_Item(i)

    # 現在のページ用に PdfTextFinder オブジェクトを作成
    finder = PdfTextFinder(page)

    # ページ上のすべてのテキストフラグメントを検索
    fragments = finder.FindAllText()

    print(f"{i + 1} ページ:")

    # すべてのテキストフラグメントをループ
    for fragment in fragments:
        # 現在のテキストフラグメントからテキストコンテンツを抽出
        text = fragment.Text

        # 位置とサイズ情報を含むバウンディング矩形を取得
        rects = fragment.Bounds

        print(f'テキスト: "{text}"')

        # すべての矩形を反復処理
        for rect in rects:
            # 現在の矩形の位置とサイズ情報を出力
            print(f"位置: ({rect.X}, {rect.Y}), サイズ: ({rect.Width} x {rect.Height})")

        print()

これが提供するもの

  • 正確な座標 - 各テキスト要素の X および Y 位置
  • サイズ情報 - テキストバウンディングボックスの幅と高さ
  • フラグメントレベルのアクセス - 個々のテキストセグメントを操作
  • レイアウト再構築 - プログラム的にドキュメント構造を再構築

実用的なアプリケーション

  • PDF から HTML への変換 - Web 形式で視覚的レイアウトを保持
  • フォームデータ抽出 - 位置に基づいてフィールドを検出
  • ドキュメント比較 - バージョン間のレイアウト変更を検出
  • アクセシビリティ強化 - PDF に意味的構造を追加
  • コンテンツのリフロー - 異なる画面サイズに合わせて PDF コンテンツを適応

このレベルの詳細により、単純なテキスト抽出を超えた高度なドキュメント処理ワークフローが可能になります。


結論

Spire.PDF for Python を使用すると、Python での PDF ファイルからのテキスト抽出が効率的かつ柔軟になります。ドキュメント全体を処理する必要がある場合でも、特定のページや領域からテキストを抽出する必要がある場合でも、Spire.PDF はニーズを満たす堅牢なツールセットを提供します。

テキスト抽出を自動化することで、以下のことが可能になります:

  • ドキュメント処理ワークフローを効率化
  • インテリジェント検索システムを強化
  • 分析と機械学習のためのデータを準備
  • 構造を保持しながら PDF を他の形式に変換
  • カスタムドキュメント管理ソリューションを構築

基本的な抽出、選択的ページ処理、領域ベースの抽出、非表示テキストのフィルタリング、位置認識抽出の組み合わせにより、PDF コンテンツ処理を完全に制御できます。

Spire.PDF for Python のパフォーマンスを評価し、制限を解除したい場合は、30 日間の無料トライアルを申請できます。


よくある質問

パスワード保護された PDF からテキストを抽出できますか?

はい、Spire.PDF for Python は、PDF ドキュメントを読み込む際に正しいパスワードを提供することで、保護されたファイルを開いてテキストを抽出できます。LoadFromFile メソッドにパラメーターとしてパスワードを渡すだけです。

複数の PDF からのバッチテキスト抽出はサポートされていますか?

はい、Spire.PDF for Python を使用して、PDF ファイルのディレクトリをプログラムで反復処理し、各ファイルに効率的にテキスト抽出を適用できます。これは大規模なドキュメントコレクションの処理に理想的です。

PDF から画像や表を抽出できますか?

このガイドはテキスト抽出に焦点を当てていますが、Spire.PDF for Python は画像抽出と表抽出もサポートしています。表抽出については、表の抽出に関する詳細については、Python を使って PDF の表を簡単に抽出する方法に関するガイドをご覧ください。

スキャン済み (画像ベース) の PDF からテキストを抽出できますか?

スキャン済み PDF からのテキスト抽出には OCR (光学文字認識) が必要です。Spire.PDF for Python には組み込みの OCR は含まれていませんが、Spire.OCR for Python などの OCR ライブラリと組み合わせて画像からテキストへの変換を行うことができます。

テキスト抽出の精度はどのくらいですか?

Spire.PDF for Python は、ネイティブ PDF ファイル (スキャンではなくデジタルで作成されたもの) に対して高精度のテキスト抽出を提供します。精度は PDF の内部構造とフォントエンコーディングによって異なります。最良の結果を得るには、画像としてではなく選択可能なテキストで作成された PDF を使用してください。

PdfTextExtractor と PdfTextFinder の違いは何ですか?

  • PdfTextExtractor: テキストを連続した文字列として抽出し、ページや領域からすべてのコンテンツを取得するのに最適
  • PdfTextFinder: 位置とサイズ情報付きでテキストフラグメントを検出し、レイアウト認識処理に適している

生のテキストコンテンツが必要か、位置メタデータが必要かに基づいてツールを選択してください。

Published in エキス/読み取り
Tagged under

PythonでPDFから画像を抽出するチュートリアル

PDF ファイルには、グラフ、図、スキャン画像などの重要なビジュアル情報が含まれていることが多くあります。
開発者にとって、PythonでPDFから画像を抽出する方法を知っておくことは、レポートの自動生成や画像解析、OCR などの機械学習タスクにおいて非常に有用です。

この記事では、Spire.PDF for Python を利用して、Python で PDF から画像を抽出する方法を次の観点から詳しく紹介します。

インストールと環境設定

Python で Spire.PDF を使用して PDF から画像を抽出する前に、以下の準備を行ってください。

  • Python 環境:システムに Python がインストールされていることを確認します。
    最新の安定版を使用することで、より良い互換性とパフォーマンスが得られます。
    Python公式サイト からダウンロード可能です。

  • Spire.PDF for Python ライブラリ
    Python 用の PDF SDK をインストールします。pip を使うのが最も簡単です。

コマンドプロンプトまたはターミナルで以下を実行します:

pip install Spire.PDF

PythonでPDFから画像を抽出する方法

Spire.PDF をインストールしたら、すぐに PDF ドキュメントから画像を抽出できるようになります。 以下の例では、ページ単位および全ページから画像を抽出する方法を順に紹介します。

例1:PDFの特定ページから画像を抽出する

次のコードは、PDF の特定ページに含まれるすべての画像を抽出して保存する完全なスクリプトです。

from spire.pdf.common import *
from spire.pdf import *

# PdfDocument オブジェクトを作成
pdf = PdfDocument()

# PDFファイルを読み込む
pdf.LoadFromFile("template1.pdf")

# 最初のページを取得
page = pdf.Pages[0]

# PdfImageHelper インスタンスを作成
imageHelper = PdfImageHelper()

# ページ上の画像情報を取得
imageInfo = imageHelper.GetImagesInfo(page)

# 取得した画像情報をループ処理して保存
for i in range(0, len(imageInfo)):
    imageInfo[i].Image.Save("Images/Image" + str(i) + ".png")

# リソースを解放
pdf.Dispose()

ポイント解説:

  • PDFを読み込むLoadFromFile() メソッドを使ってファイルをロードします。
  • ページを取得:インデックスを指定して特定ページを取得します。
  • 画像情報を抽出PdfImageHelper を使い、GetImagesInfo() メソッドでページ内の画像情報(PdfImageInfo オブジェクト)をリストとして取得します。
  • 画像を保存:ループ処理で各画像を順に保存します。

出力例プレビュー:

PythonでPDFページから画像を抽出する例


例2:PDF全体からすべての画像を抽出する

単一ページからの抽出を拡張し、すべてのページをループして全画像を抽出することも可能です。 以下のスクリプトでは、PDF 全体からすべての埋め込み画像を取得します。

from spire.pdf.common import *
from spire.pdf import *

# PdfDocument オブジェクトを作成
pdf = PdfDocument()

# PDFファイルを読み込む
pdf.LoadFromFile("template1.pdf")

# PdfImageHelper インスタンスを作成
imageHelper = PdfImageHelper()

# すべてのページをループ
for i in range(0, pdf.Pages.Count):
    page = pdf.Pages[i]
    imageInfo = imageHelper.GetImagesInfo(page)
    for j in range(0, len(imageInfo)):
        imageInfo[j].Image.Save(f"Images\\Page{i + 1}_Image{j + 1}.png")

# PDFを閉じる
pdf.Close()

出力例プレビュー:

PythonでPDF全ページから画像を抽出する例

PDF内の画像をさらに操作したい場合は、PythonでPDFに画像を追加・置換・削除する方法の記事も参考にしてください。

抽出時に異なる画像形式を扱う方法

Spire.PDF for Python は、PNG、JPG/JPEG、BMP などさまざまな画像形式の抽出をサポートしています。 抽出した画像を保存する際、用途に合わせて最適なフォーマットを選択することができます。

主な画像形式と特徴:

形式 主な用途 備考
JPG/JPEG 写真・スキャン画像 圧縮で若干の劣化あり。PDFで最も一般的。
PNG 図表・スクリーンショット 透過保持。ファイルサイズはやや大きめ。
BMP 一時保存やWindowsアプリ用 現在のPDFではまれ。Web用途には不向き。
TIFF 保存・印刷・OCR入力 アーカイブや文書保存向け。複数ページ対応。
EMF ベクター画像編集 IllustratorやInkscapeで編集可能。

よくある質問(FAQ)

Q1:Spire.PDF for Python は無料ですか?

Spire.PDF for Python には無料版と商用版があります。 Free Spire.PDF for Python は、1ファイルあたり最大10ページなどの制限があります。 制限のない試用版ライセンスを希望する場合は、こちらから申請してください。

Q2:特定のページ範囲だけから画像を抽出できますか?

可能です。全ページをループする代わりに、抽出したいページのインデックスを指定します。 例えば 2~5 ページの画像を抽出するには次のように書きます。

# ページ2~5の画像を抽出(ページは0始まり)
for i in range(1, 4):
    page = pdf.Pages[i]
    # 上記と同じ処理を実行

Q3:抽出した画像からテキストを取り出すことはできますか?

はい。スキャンPDFのように画像内に文字が含まれている場合は、Spire.OCR for Python を組み合わせることで、抽出画像から文字認識を行うことができます。

まとめ

PythonでPDFから画像を抽出する作業は、Spire.PDF for Python を使うことで簡単かつ効率的に実現できます。 この記事で紹介したサンプルコードを活用すれば、特定ページや全ページから画像を抽出し、任意の形式で保存することが可能です。 さらに、OCRツールと組み合わせることで、画像からテキストを自動的に抽出することもできます。

この機能を活用すれば、レポート作成や画像解析などの業務効率を大幅に向上させ、PDFに埋め込まれたビジュアルデータを柔軟に再利用できます。

Published in エキス/読み取り
Tagged under