LoginSignup
1
2

More than 1 year has passed since last update.

残プロ 第-44回 ~論文.pdfを自動でリネーム~

Last updated at Posted at 2021-07-15

自動で論文タイトルにリネームしたい

皆さんは,論文のpdfファイルをダウンロードした際,ファイル名が意味のない数字やアルファベットの羅列になった経験はありますでしょうか.おそらく,論文を集める際に全員が通る道だと思います.

今回はPDFMINERを使って,Pythonでpdfを解析し,自動でタイトルを取得します.
なお,プログラムの作成に当たりこちらの記事をかなり参考にさせていただきました.先人って凄い!

PDFRename.py
import os
import sys
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfpage import PDFTextExtractionNotAllowed
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams, LTContainer, LTTextLine

def get_objs(layout, results):
    if not isinstance(layout, LTContainer):
        return
    for obj in layout:
        if isinstance(obj, LTTextLine):
            results.append({'text': obj.get_text(), 'height': obj.height})
        get_objs(obj, results)


def get_title(path):
    with open(path, "rb") as f:
        parser = PDFParser(f)
        document = PDFDocument(parser)
        laparams = LAParams(all_texts=True)
        rsrcmgr = PDFResourceManager()
        device = PDFPageAggregator(rsrcmgr, laparams=laparams)
        interpreter = PDFPageInterpreter(rsrcmgr, device)
        page = next(PDFPage.create_pages(document)) #1ページ目
        interpreter.process_page(page)
        layout = device.get_result()
        results = []
        get_objs(layout, results)
    f.close()
    title = max(results, key=lambda x:x.get('height'))
    print(title.get('text'))
    return title.get('text').strip()


def main(path):
    os.rename(path, get_title(path)+".pdf")


if __name__ == '__main__':
    path = sys.argv[1]
    main(path)

get_objs関数内で扱っているobjはheightやwidthも取得できます.
このプログラムでは1ページ目にある一番heightが大きいオブジェクトをタイトルとしています.typeによる条件処理は行ってないのでたまに失敗します.興味ある方はぜひ挑戦してみてください!

1
2
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
2