PDFMiner.sixは、Pythonを使用してPDFファイルからテキストやメタデータを抽出するための強力なライブラリです。このライブラリは、PDFファイルの内部構造を解析し、ページのレイアウトを再現しつつテキストを抽出するために設計されています。以下に、PDFMiner.sixの基本的な使い方と具体的な例を紹介します。
PDFMiner.sixの基本機能
PDFの読み込み
PDFファイルを読み込んで解析する基本機能です。
テキストの抽出
PDFファイル内のテキストを抽出し、再利用可能な形式に変換します。
メタデータの取得
PDFファイルに含まれるメタデータ(作成者、タイトル、作成日など)を取得します。
ページのレイアウト解析
ページのレイアウトを解析し、テキストの位置情報を保持したまま抽出します。
例題1: PDFファイルからテキストを抽出
まず、PDFファイルからテキストを抽出する基本的な方法を示します。
PDFMiner.sixのインストール
pip install pdfminer.six
PDFファイルからテキストを抽出するコード
from pdfminer.high_level import extract_text
# PDFファイルのパス
pdf_path = 'sample.pdf'
# テキストを抽出
text = extract_text(pdf_path)
# 抽出したテキストを表示
print(text)
このコードでは、extract_text
関数を使用してPDFファイルからテキストを抽出し、抽出したテキストをコンソールに表示しています。
例題2: ページごとにテキストを抽出
次に、PDFファイルの各ページからテキストを抽出する方法を示します。
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
import io
def extract_text_by_page(pdf_path):
with open(pdf_path, 'rb') as fh:
for page in PDFPage.get_pages(fh, caching=True, check_extractable=True):
resource_manager = PDFResourceManager()
fake_file_handle = io.StringIO()
converter = TextConverter(resource_manager, fake_file_handle, laparams=LAParams())
page_interpreter = PDFPageInterpreter(resource_manager, converter)
page_interpreter.process_page(page)
text = fake_file_handle.getvalue()
yield text
# クリーンアップ
converter.close()
fake_file_handle.close()
# PDFファイルのパス
pdf_path = 'sample.pdf'
# ページごとにテキストを抽出して表示
for page_number, page_text in enumerate(extract_text_by_page(pdf_path), start=1):
print(f'--- Page {page_number} ---')
print(page_text)
このコードでは、extract_text_by_page
関数を定義し、PDFファイルの各ページからテキストを抽出します。PDFPage.get_pages
を使用してページごとにテキストを処理し、抽出したテキストを表示します。
例題3: PDFファイルのメタデータの取得
PDFファイルのメタデータ(タイトル、作成者、作成日など)を取得する方法を示します。
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfparser import PDFParser
# PDFファイルのパス
pdf_path = 'sample.pdf'
# PDFファイルを読み込み
with open(pdf_path, 'rb') as fh:
parser = PDFParser(fh)
document = PDFDocument(parser)
# メタデータの取得
metadata = document.info[0]
print("Metadata:")
for key, value in metadata.items():
print(f'{key}: {value}')
このコードでは、PDFParser
とPDFDocument
を使用してPDFファイルを解析し、メタデータを取得して表示します。
例題4: 特定の範囲のページからテキストを抽出
特定の範囲のページからテキストを抽出する方法を示します。
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
import io
def extract_text_by_page_range(pdf_path, start_page, end_page):
with open(pdf_path, 'rb') as fh:
for page_num, page in enumerate(PDFPage.get_pages(fh, caching=True, check_extractable=True), start=1):
if start_page <= page_num <= end_page:
resource_manager = PDFResourceManager()
fake_file_handle = io.StringIO()
converter = TextConverter(resource_manager, fake_file_handle, laparams=LAParams())
page_interpreter = PDFPageInterpreter(resource_manager, converter)
page_interpreter.process_page(page)
text = fake_file_handle.getvalue()
yield text
# クリーンアップ
converter.close()
fake_file_handle.close()
# PDFファイルのパス
pdf_path = 'sample.pdf'
# 2ページ目から3ページ目までのテキストを抽出して表示
for page_number, page_text in enumerate(extract_text_by_page_range(pdf_path, 2, 3), start=2):
print(f'--- Page {page_number} ---')
print(page_text)
このコードでは、extract_text_by_page_range
関数を定義し、特定のページ範囲(この例では2ページ目から3ページ目)からテキストを抽出します。
結論
PDFMiner.sixは、Pythonを使用してPDFファイルからテキストやメタデータを抽出するための非常に強力なライブラリです。PDFファイルの詳細な解析、テキスト抽出、メタデータの取得など、多様な操作が可能であり、データ処理やレポート作成の効率化に大いに役立ちます。基本的な操作から高度なページ解析まで、PDFMiner.sixの理解と適用は、PDFファイルを扱う多くのプロジェクトにおいて非常に有用です。