PDFのテキスト化

■PDFのテキスト化のpythonコード例1

import fitz  # PyMuPDF
import pytesseract
from PIL import Image
import io

# Tesseractのインストールパスを指定(例: Windowsの場合)
# pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

def pdf_to_text(pdf_path, language='eng'):
    # PDFを開く
    pdf_document = fitz.open(pdf_path)
    text = ""
    #text = pdf_to_text(pdf_path, language='eng')

    # 各ページごとに画像に変換し、OCRでテキストを抽出
    for page_num in range(pdf_document.page_count):
        page = pdf_document[page_num]
        
        # PDFページを画像にレンダリング
        pix = page.get_pixmap(dpi=300)
        img = Image.open(io.BytesIO(pix.tobytes()))
        
        # 画像からテキストを抽出
        page_text = pytesseract.image_to_string(img, lang=language)
        text += page_text + "\n\n"  # ページごとに改行を追加

    pdf_document.close()

    # 全角を半角に変換
    #text = text.replace('’', "'")  # 全角アポストロフィ → 半角アポストロフィ
    text = text.replace('’', "'").replace('“', '"').replace('”', '"')  # 必要に応じて追加

    return text

# 使用例
pdf_path = 'sample.pdf' 
# 'eng'は英語, 'jpn'は日本語, 'eng+jpn'は英語と日本語の両方
#text = pdf_to_text(pdf_path, language='eng+jpn')
text = pdf_to_text(pdf_path, language='eng')

print(text) #テキストの表示。必要な場合はファイル出力に

=======
■PDFのテキスト化のpythonコード例2

import fitz  # PyMuPDF
import pytesseract
from PIL import Image
import io

# Tesseractのインストールパスを指定(例: Windowsの場合)
# pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

def pdf_to_text(pdf_path, language='eng'):
    # PDFを開く
    pdf_document = fitz.open(pdf_path)
    text = ""

    # 各ページごとに画像に変換し、OCRでテキストを抽出
    for page_num in range(pdf_document.page_count):
        page = pdf_document[page_num]
        
        # PDFページを画像にレンダリング
        pix = page.get_pixmap(dpi=300)
        img = Image.open(io.BytesIO(pix.tobytes()))
        
        # 画像からテキストを抽出
        page_text = pytesseract.image_to_string(img, lang=language)
        text += page_text + "\n\n"  # ページごとに改行を追加

    pdf_document.close()
    
    # 全角を半角に変換
    # text = text.replace('’', "'").replace('“', '"').replace('”', '"')  # 必要に応じて追加

    return text

# 全角の句読点や記号を半角に変換する関数
def convert_fullwidth_to_halfwidth(text):
    text = text.replace(',', ',')  # 全角コンマ → 半角カンマ
    text = text.replace('。', '.')  # 全角ピリオド → 半角ピリオド
    text = text.replace(':', ':')  # 全角コロン → 半角コロン
    text = text.replace(';', ';')  # 全角セミコロン → 半角セミコロン
    text = text.replace('!', '!')  # 全角感嘆符 → 半角感嘆符
    text = text.replace('?', '?')  # 全角疑問符 → 半角疑問符
    text = text.replace('’', "'")  # 全角アポストロフィ → 半角アポストロフィ
    text = text.replace('“', '"')  # 全角二重引用符始 → 半角二重引用符始
    text = text.replace('”', '"')  # 全角二重引用符終 → 半角二重引用符終
    text = text.replace('(', '(')  # 全角括弧開 → 半角括弧開
    text = text.replace(')', ')')  # 全角括弧閉 → 半角括弧閉
    text = text.replace('[', '[')  # 全角角括弧開 → 半角角括弧開
    text = text.replace(']', ']')  # 全角角括弧閉 → 半角角括弧閉
    text = text.replace('{', '{')  # 全角波括弧開 → 半角波括弧開
    text = text.replace('}', '}')  # 全角波括弧閉 → 半角波括弧閉
    text = text.replace('・', '・')  # 全角中黒 → 半角中黒
    text = text.replace('~', '~')  # 全角チルダ → 半角チルダ
    text = text.replace(' ', ' ')  # 全角スペース → 半角スペース
    return text

# 使用例
# PDFからテキストを抽出し、全角を半角に変換
pdf_path = 'sample.pdf'
text = pdf_to_text(pdf_path, language='eng+jpn')
text = convert_fullwidth_to_halfwidth(text)
print(text)