1
4

Pythonを使用してPDFファイルからテーブルをバッチ抽出する方法

Last updated at Posted at 2024-05-24

PDFドキュメントには通常、公式レポート、学術論文、財務報告書などの文書に多くのデータが含まれています。これらの文書には、構造化されたテーブルデータがしばしば含まれています。テーブルは、重要な情報を保持するためのキャリアとして機能し、データ分析、研究論証、ビジネスの意思決定において重要な意味を持ちます。しかし、PDF形式は文書のクロスプラットフォームの一貫性を保証している一方で、データの直接的な抽出と利用には障壁があります。Pythonを使用してPDFドキュメントから効率的にテーブルを抽出する方法を習得することで、データ処理能力や情報フローの加速能力を向上させることができます。本記事では、Pythonを使用してPDFドキュメントからテーブルデータを迅速に抽出しExcelファイルに保存する方法について説明します。

この記事で使用する方法には、Spire.PDF for Pythonが必要です。PyPIを介してインストールすることができます:pip install Spire.PDF

無料ライセンスの申請

PDFドキュメントからテーブルデータを抽出する

PdfTableExtractor(PdfDocument)クラスは、PDFドキュメントのテーブル抽出作業に使用できます。このクラスのインスタンスを作成した後、PdfTableExtractor.ExtractTable(int: page index)メソッドを使用して指定されたページのすべてのテーブルを抽出することができます。テーブルを取得した後、PdfTable.GetText(int: row index, int column index)メソッドを使用してテーブルデータを他の場所に保存することができます。
以下は、PDFのテーブルを抽出してテキストに保存する手順です:

  1. 必要なモジュールをインポートします。
  2. PdfDocumentのインスタンスを作成し、PdfDocument.LoadFromFile()メソッドを使用してPDFドキュメントをロードします。
  3. テーブルデータを保存するためのリストを作成し、ドキュメントからPdfTableExtractorのインスタンスを作成します。
  4. ドキュメントのページを反復処理し、PdfTableExtractor.ExtractTable(int: page index)メソッドを使用してページ上のテーブルを抽出します。
  5. 抽出された各テーブルを反復処理し、各テーブルに対して文字列オブジェクトを作成し、PdfTable.GetText(int: row index, int column index)メソッドを使用してテーブルデータを取得し、文字列に追加します。
  6. 各テーブルをテキストファイルとして保存します。
  7. リソースを解放します。

コード例

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

# PdfDocumentクラスのインスタンスを作成します
pdf = PdfDocument()

# PDFファイルを読み込みます
pdf.LoadFromFile("サンプル.pdf")

# リストを作成します
table_data_list = []

# PdfTableExtractorオブジェクトを作成します
extractor = PdfTableExtractor(pdf)

# ドキュメントの各ページを処理します
for pageIndex in range(pdf.Pages.Count):
    # ページからテーブルを抽出します
    table_list = extractor.ExtractTable(pageIndex)

    # テーブルリストが空でないか確認します
    if table_list is not None and len(table_list) > 0:
        # リスト内の各テーブルに対して処理を行います
        for table in table_list:
            table_data = ''
            # 行数と列数を取得します
            row = table.GetRowCount()
            column = table.GetColumnCount()

            # テーブルの行と列を処理します
            for i in range(row):
                for j in range(column):
                    # セルからテキストを取得します
                    text = table.GetText(i, j)

                    # テキストをリストに追加します
                    table_data += text + " "
                table_data += "\n"
            table_data_list.append(table_data)

# 各テーブルをtxtファイルとして保存します
for i in range(len(table_data_list)):
    file_name = "output/Tables/ExtractedPDFTables{0}.txt".format(i)
    with open(file_name, "w") as f:
        f.writelines(table_data_list[i])

# リソースを解放します
pdf.Close()

サンプルファイル
2024-05-27_102539.png

抽出されたテーブル
2024-05-27_102922.png
2024-05-27_103005.png

PDFドキュメントからテーブルを抽出し、CSVファイルに保存する

テーブルデータを抽出する際に、Spire.XLS for Pythonライブラリ(pip install Spire.XLS)を組み合わせて、テーブルデータを直接Excelファイルに書き込むことができます。以下は手順です:

  1. 必要なモジュールをインポートします。
  2. PdfDocumentクラスのインスタンスを作成します。
  3. PdfDocument.LoadFromFile()メソッドを使用してサンプルPDFドキュメントをロードします。
  4. Workbookクラスのインスタンスを作成し、デフォルトのワークシートをクリアします。
  5. PDFドキュメントのページを反復処理します。
  6. PdfTableExtractor.ExtractTable()メソッドを使用してテーブルをページから抽出します。
  7. 抽出したテーブルを反復処理します。
  8. 各テーブルに対して、Workbook.Worksheets.Add()メソッドを使用してワークブックにワークシートを追加します。
  9. PdfTable.GetText()メソッドを使用してセルのテキストを取得します。
  10. Worksheet.Range[rowIndex, columnIndex].Valueプロパティを使用してテキストを特定のセルに書き込みます。
  11. Workbook.SaveToFile()メソッドを使用して結果のワークブックをExcelファイルとして保存します。
  12. リソースを解放します。

コード例

from spire.pdf import *
from spire.xls import *

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

# サンプルPDFファイルを読み込みます
doc.LoadFromFile("サンプル.pdf")

# Workbookオブジェクトを作成します
workbook = Workbook()

# デフォルトのワークシートをクリアします
workbook.Worksheets.Clear()

# PdfTableExtractorオブジェクトを作成します
extractor = PdfTableExtractor(doc)

sheetNumber = 1

# ページをループします
for pageIndex in range(doc.Pages.Count):
    # 特定のページからテーブルを抽出します
    tableList = extractor.ExtractTable(pageIndex)

    # テーブルリストが空でないか確認します
    if tableList is not None and len(tableList) > 0:
        # リスト内の各テーブルに対して処理を行います
        for table in tableList:
            # ワークシートを追加します
            sheet = workbook.Worksheets.Add(f"sheet{sheetNumber}")

            # テーブルの行数と列数を取得します
            row = table.GetRowCount()
            column = table.GetColumnCount()

            # 行と列を処理します
            for i in range(row):
                for j in range(column):
                    # 特定のセルからテキストを取得します
                    text = table.GetText(i, j)

                    # テキストを指定のセルに書き込みます
                    sheet.Range[i + 1, j + 1].Value = text

            # 列幅を自動調整します
            sheet.AllocatedRange.AutoFitColumns()

            sheetNumber += 1

# ファイルに保存します
workbook.SaveToFile("output/Tables/PDFテーブルをExcelファイルに保存.xlsx", ExcelVersion.Version2013)
doc.Dispose()
workbook.Dispose()

抽出されたテーブル
2024-05-27_103345.png

本記事では、Pythonを使用してPDFドキュメントからテーブルデータを抽出し、テキストファイルまたはExcelファイルに保存する方法を示しました。

より詳しいPDFドキュメントの操作技術については、Spire.PDF for Pythonチュートリアルをご覧ください。

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4