LoginSignup
23
40

More than 5 years have passed since last update.

大量のPDFファイルを、pdfminerを使ってtextファイルに変換する

Posted at

本日のメニュー

大量の英文pdfファイルを読みたいのだけれど、英単語がそもそもわからない。
ひとまずpdfファイルをtextファイルに変換して、単語をリスト化して、頻出単語を上から順番に暗記しよう。きっとその方が早く読める!と信じることにした。

そういうわけで、大量の英文pdfファイルを鍋に投入し、茹でてtextファイルに変換することにした。
気分はさながら椀子そば大会のために大量のそばを茹でる気分。

調理台の環境

macOS
Python3.6
anaconda

食材

消化に困る大量のpdfファイル

調理器具

pdfminer ←インストール方法末尾の参照URLをチェック
os
re

PyPDF2よりも、pdfminerの方が良い結果を得られる、らしい。

調理の失敗として想定されること

日本語の文章には対応していない(と思われる)ので、ご留意ください。

今日の鍋

PdfToTextConverter.py
#! python3
# PdfToTextConverter.py
# PDFファイルの内容を読み込んで、textファイルとして出力

import os
import re
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from io import StringIO

pdf_folder_path = os.getcwd()                           # 現在のフォルダのパスを取得
text_folder_path = os.getcwd() + '/' + 'text_folder'        # pathの表記がmac仕様。windowsの場合は、'/'を'\'に修正する。

os.makedirs(text_folder_path, exist_ok=True)
pdf_file_name = os.listdir(pdf_folder_path)

# name がPDFファイル(末尾が.pdf)の場合はTRUE、それ以外はFALSEを返す。
# こちらの投稿を引用・一部変更しました → http://qiita.com/korkewriya/items/72de38fc506ab37b4f2d
def pdf_checker(name):
    pdf_regex = re.compile(r'.+\.pdf')
    if pdf_regex.search(str(name)):
        return True
    else:
        return False

# PDFをtextファイルに変換
def convert_pdf_to_txt(path, txtname, buf=True):
    rsrcmgr = PDFResourceManager()
    if buf:
        outfp = StringIO()
    else:
        outfp = file(txtname, 'w')
    codec = 'utf-8'
    laparams = LAParams()
    laparams.detect_vertical = True
    device = TextConverter(rsrcmgr, outfp, codec=codec, laparams=laparams)

    fp = open(path, 'rb')
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    for page in PDFPage.get_pages(fp):
        interpreter.process_page(page)
    fp.close()
    device.close()
    if buf:
        text = outfp.getvalue()
        make_new_text_file = open(text_folder_path + '/' + path + '.txt', 'w')
        make_new_text_file.write(text)
        make_new_text_file.close()
    outfp.close()

# フォルダ内のpdfファイル名取得してリスト化
for name in pdf_file_name:
    if pdf_checker(name):
        convert_pdf_to_txt(name, name + '.txt')     # pdf_checkerを使い、TRUE(末尾が.pdfの場合)は変換に進む)
    else:
        pass                                        # PDFファイルでない場合にはpass


完成品

胃もたれしそうな大量のtextファイル

次の調理

大量のtextファイルを椀に移して、頻出単語を500個くらい抽出する。
その単語の意味を覚える(英文を早く読むのに効果があるかは、不明)

参考文献、参照URL

http://qiita.com/korkewriya/items/72de38fc506ab37b4f2d
→pdfファイルをtextファイルに変換する部分は、こちらの記事から引用(一部改変)しました。

https://kusanohitoshi.blogspot.jp/2017/01/python3cstringiostringio.html
→StringIOのインポートエラーへの対処はこちらを参考にしました。

「退屈なことはPythonにやらせよう」
→osモジュールの使い方

http://www.unixuser.org/%7Eeuske/python/pdfminer/index.html
→pdfminerのページ

https://github.com/conda-forge/pdfminer-feedstock
https://conda-forge.org/feedstocks
→anaconda環境におけるpdfminerのインストール手順はこちらを参考にしました。

23
40
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
23
40