PDF ファイルは至る所にあります。契約書や研究論文から電子書籍や請求書まで。フォーマットを完璧に保持できますが、PDF からのテキスト抽出は、特に大規模または複雑なドキュメントの場合、課題となる可能性があります。手動でのコピーは遅いだけでなく、正確性に欠けることも多いです。 ワークフローを自動化する開発者、コンテンツを処理するデータアナリスト、あるいは単に迅速なテキスト抽出が必要な方にとって、プログラムによる方法は貴重な時間と労力を節約できます。 この包括的なガイドでは、Spire.PDF for Python を使用して Python で PDF ファイルからテキストを抽出する方法を学びます。これは強力で使いやすい PDF 処理ライブラリです。すべてのテキストの抽出、特定のページや領域のターゲット指定、非表示テキストの無視、テキストの位置やサイズなどのレイアウト情報の取得について解説します。 クイックナビゲーション PDF からテキストを抽出する理由 Spire.PDF for Python のインストール 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) 以下は抽出結果のプレビューです: 主な利点 処理時間の短縮 - 必要なもののみを抽出 メモリ使用量の削減 - 不要なコンテンツの読み込みを回避 対象を絞ったデータ抽出 - 関連セクションに集中 柔軟なページ選択 - ループを変更して単一または複数のページから抽出 定義された領域からテキストを取得 フォームや請求書などの構造化ドキュメントを扱う場合、特定の領域からテキストを抽出する方が効率的です。矩形領域を定義し、ページ上のその境界内にあるテキストのみを抽出できます。 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) 以下は抽出結果のプレビューです: 矩形座標の理解 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: 位置とサイズ情報付きでテキストフラグメントを検出し、レイアウト認識処理に適している 生のテキストコンテンツが必要か、位置メタデータが必要かに基づいてツールを選択してください。