ほぼほぼこちらの方法です。
なにも面白いことはしてないです。
#つかうもの
PDFMinerというライブラリ。
pipで一発です。
pip install pdfminer.six
参考サイトでは日本語が~とありましたが、pipで入れてもちゃんと日本語検出されました。
#つくるCSV
・「更新日時」カラムにCSV作成日データが入っている
・「文章」カラムにPDFのテキストデータが入っている
・「ページ番号」カラムにPDFのページ番号が入っている
#できたもの
9割参考サイトのソースです。
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
import csv,re,datetime
import pandas as pd
class converter(object):
def pdf_to_csv(self,p_d_f):
df = pd.DataFrame(columns=["更新日時","文章","ページ番号"])
#ここからPDFのテキスト抽出
cnt = 1
space = re.compile("[ ]+")
fp = open(p_d_f, 'rb')
for page in PDFPage.get_pages(fp):
#逐次初期化
rsrcmgr = PDFResourceManager()
outfp = StringIO()
codec = 'utf-8'
laparams = LAParams()
laparams.detect_vertical = True
device = TextConverter(rsrcmgr, outfp, codec=codec, laparams=laparams)
interpreter = PDFPageInterpreter(rsrcmgr, device)
interpreter.process_page(page)
text = re.sub(space, "", outfp.getvalue())
df.loc[cnt,["文章","ページ番号"]] = [text,cnt]
cnt += 1
outfp.close()
fp.close()
device.close()
now = datetime.datetime.now()
df["更新日時"] = now
csv_path = p_d_f.replace('.pdf', '.csv')
df.to_csv(csv_path, encoding='CP932', index=False)
if __name__ == "__main__":
p_d_f = "なんちゃか.pdf"
con=converter()
hoge=con.pdf_to_csv(p_d_f)
参考サイトと異なる点は、PDFから抽出したテキストデータを格納する箱(outfp)をデータフレームに入れた矢先に初期化しているというところです。
そのままだと全ページのテキストデータがどんどん追加されていくので。
データフレームに入れてしまえばこちらのものなので、細かいカラム追加などはさくっとできるかと。
検索しても一発でcsv変換が引っかからなかったのは簡単だからという理由もあるかもですが、メモ書きに。
#2/24追記
なぜか続いた